Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

1
Árvores Balanceadas (AVL) 
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 AB 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 AB depende da 
ordem em que os elementos são inseridos.
1, 2, 3, 4, 5, 6, 7 4, 6, 2, 5, 1, 7, 3
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
+6
+5
+4
+3
+2
+1
0
Inserção: 1, 2, 3, 4, 5, 6 e 7
0 0
0
0 0
00
Inserção: 4, 2, 3, 6, 5, 1 e 7
-1
0
00
+2
-1
0
Inserção: 4, 1, 3, 6, 5, 2 e 7
11
Operação: Inserção
0 0
0
0 0
00
Op. de balanceamento0
00
+2
-1
0
Inserção: 4, 6, 1, 7, 5, 3 e 2.-1
12
Operação: Remoção
+2
0
+1Remover nó 2
0
0
0
Op. de balanceamento
+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
-1
8
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
5
0
0
-1
+1
-2
(a)
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)
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)
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 15 12 7 21 30
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/AV
L%20tree%20applet.htm

Mais conteúdos dessa disciplina