1 Árvores Balanceadas (AVL) Prof. Alexandre Parra Carneiro da Silva [email protected].
Embed Size (px)
Transcript of 1 Árvores Balanceadas (AVL) Prof. Alexandre Parra Carneiro da Silva [email protected].

2
Roteiro
Contextualização
Árvores Balanceadas (AVL)
Operações de Balanceamento

3
Roteiro
Contextualização
Árvores Balanceadas (AVL)
Operações de Balanceamento

4
Contextualização As ABP estudadas têm uma séria desvantagem que
pode afetar o tempo necessário para recuperar um item armazenado.
A desvantagem é que o desempenho da ABP depende da ordem em que os elementos são inseridos.
1, 2, 3, 4, 5, 6, 7 4, 6, 2, 5, 1, 7, 31
2
3
4
5
6
7
2
4
6
1 3 5 7

5
Contextualização
Idealmente, deseja-se que a árvore esteja balanceada, para qualquer nó p da árvore.
Como saber se a árvore está balanceada ?
Para cada nó p da árvore a altura da sua sae é aproximadamente igual à altura da sua sad.

6
Roteiro
Contextualização
Árvores Balanceadas (AVL)
Operações de Balanceamento

7
Árvores Balanceadas (AVL) O nome AVL vem de seus criadores Adelson Velsky e
Landis (1962).
Uma árvore binária de pesquisa T é denominada AVL se: Para todos nós de T, as alturas de suas duas sub-
árvores diferem no máximo de uma unidade.
Operações de consulta, inserção e remoção de nós tem custo O(log2n).
130
100 150
120 20080
110
120
100
11080
130
200
150

8
Como reconhecer uma árvore desbalanceada? (1/2)
Como saber se a árvore está desbalanceada ?
Verificando se existe algum nodo “desregulado”.
Como saber se um nodo está desregulado ? Subtraindo-se as alturas das suas sub-árvores.
Por questões de eficiência, estas diferenças são pré-calculadas e armazenadas nos nós correspondentes, sendo atualizadas durante as operações.

9
Como reconhecer uma árvore desbalanceada? (2/2)
Possíveis valores de diferença para cada nó em uma árvore balanceada: -1, 0, 1.
Fator de Balanceamento (FB) de cada nó da árvore
FB(p) = h(sad(p)) – h(sae(p))

10
Exemplos de cálculos de FB
1
2
3
4
5
6
7
+6
+5
+4
+3
+2
+1
0
Inserção: 1, 2, 3, 4, 5, 6 e 7
2
4
6
1 3 5 7
0 0
0
0 0
00
Inserção: 4, 2, 3, 6, 5, 1 e 7
4
1 6
3
2
5 7
-1
0
00
+2
-1
0
Inserção: 4, 1, 3, 6, 5, 2 e 7

11
Operação: Inserção
2
4
6
1 3 5 7
0 0
0
0 0
00
Op. de balanceamento
4
1 6
3
2
5 7
0
00
+2
-1
0
Inserção: 4, 6, 1, 7, 5, 3 e 2. -1

12
Operação: Remoção
4
6
7
+2
0
+1Remover nó 2
4
6
7
0
0
0Op. de balanceamento4
2 6
7
+1
0
+10
Inserção: 4, 6, 2 e 7.

13
Roteiro
Contextualização
Árvores Balanceadas (AVL)
Operações de Balanceamento

14
Operações de Inserção e Remoção
A inserção ou remoção de um nó em uma árvore AVL pode ou não provocar seu desbalanceamento.
Se a árvore AVL ficar desbalanceada, a restauração do seu balanceamento é realizado através de ROTAÇÕES.

15
Tipos de Rotações
Rotação Simples: Rotação a Esquerda Rotação a Direita
Rotação Dupla: Rotação a Esquerda Rotação a Direita

16
Exemplos de Rotação Simples
Suponha que nós queiramos inserir o nó 3 na árvore inicial abaixo
3
08
4 10
2 6
0
0 0
-18
4 10
2 6
3
-1 0
+1 0
-2
0
Rotação a direita (nó 8)
0
0
0 0
4
2 8
1063
+1 0
A inserção do nó 3 produziu um desbalanço no nó 8 verificado pelo FB = -2 neste nó. Neste caso, como os sinais dos FB são os mesmos (nó 8 com FB = -2 e nó 4 com FB = -1) significa que precisamos fazer apenas uma ROTAÇÃO SIMPLES.

17
Exemplo de Rotação Dupla (1/2)
Suponha que queiramos inserir o nó 5 na árvore abaixo
08
4 10
2 6
0
0 0
-1
0
8
4 10
2 6
50
0
-1
+1
-2
(a)8
6 10
4
52
0
0
0
0-2
-2
Observe que o nó 8 tem FB = -2 e tem um filho com FB = +1 (sinais opostos). Neste caso, o balanceamento é alcançado com duas rotações. Primeiro: (a) rotação simples sobre o nó 4 (com FB = +1) para a esquerda.

18
Exemplo de Rotação Dupla (2/2)
8
6 10
4
52
0
0
0
0-2
-2
Logo após da rotação a esquerda: (b) rotaciona-se o nó 8 (FB = -2) na direção oposta (direita neste caso).
(b)6
4 8
2 105
0
0
0
00
+1

19
Pseudo-Código: Rotações Simples
Rotação Simples a Esquerda
p aponta para o nó desbalanceado q = right(p); hold = left(q); left(q) = p; right(p) = hold; p = q;
Rotação Simples a Direita p aponta para o nó desbalanceado
q = left(p); hold = right(q); right(q) = p; left(p) = hold; p = q;
10
12
157
30
21
+2
0
+10
+10
10 15 12 7 21 30
2
10
1
154
7
0
0
0
-1
-1
-2 10 15 4 2 1 7

20
Pseudo-Código: Busca e Inserção
Busca e Inserção
Procurar pseudo-código no livro do Tenembaum “Estrutura de Dados Usando C”. pags: 531, 532, 533 e 534.

21
Conclusões
Balanceamento de árvores busca minimizar o número médio de comparações necessárias para localizar qualquer dado.
Operações de inserção e remoção de nós tendem a tornar as árvores desbalanceadas.
Há um custo extra de processamento.
Compensado quando os dados armazenados precisam ser recuperados muitas vezes.

22
AVL Tree Applet
http://webpages.ull.es/users/jriera/Docencia/AVL/AVL%20tree%20applet.htm