Post on 07-Apr-2016
Árvores Árvores Balanceadas Balanceadas
(AVL) (AVL) Prof. Luiz José Hoffmann Filho
ljhfilho@gmail.com
1
RoteiroRoteiro• Contextualização
• Árvores Balanceadas (AVL)
• Operações de Balanceamento
2
RoteiroRoteiro• Contextualização
• Árvores Balanceadas (AVL)
• Operações de Balanceamento
3
ContextualizaçãoContextualizaçã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.
4
1, 2, 3, 4, 5, 6, 7 4, 6, 2, 5, 1, 7, 31
2
3
4
5
67
2
4
6
1 3 5 7
ContextualizaçãoContextualizaçã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.
5
RoteiroRoteiro• Contextualização
• Árvores Balanceadas (AVL)
• Operações de Balanceamento
6
Árvores Balanceadas (AVL)Á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:o 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).
7
130
100 150
120 20080
110
120
100
11080
130
200
150
Como reconhecer uma árvore desbalanceada? Como reconhecer uma árvore desbalanceada?
(1/2)(1/2)
• Como saber se a árvore está desbalanceada ?o Verificando se existe algum nodo “desregulado”.
• Como saber se um nodo está desregulado ? o 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.
8
Como reconhecer uma árvore desbalanceada?Como reconhecer uma árvore desbalanceada?
(2/2)(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 árvoreo FB(p) = h(sad(p)) – h(sae(p))
9
Exemplos de cálculos de FBExemplos de cálculos de FB
10
1
2
3
4
5
67
+6+5
+4+3
+2+1
0
Inserção: 1, 2, 3, 4, 5, 6 e 7
2
4
6
1 3 5 70 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
Operação: InserçãoOperação: Inserção
11
2
4
6
1 3 5 70 0
0
0 0
00
Op. de balanceamento4
1 6
3
2
5 7
0
00
+2
-1
0
Inserção: 4, 6, 1, 7, 5, 3 e 2. -1
Operação: RemoçãoOperação: Remoção
12
4
6
7
+2
0+1Remover nó 2
4
6
70
0
0Op. de balanceamento4
2 6
7
+1
0
+10
Inserção: 4, 6, 2 e 7.
RoteiroRoteiro• Contextualização
• Árvores Balanceadas (AVL)
• Operações de Balanceamento
13
Operações de Inserção e RemoçãoOperaçõ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.
14
Tipos de RotaçõesTipos de Rotações• Rotação Simples:
o Rotação a Esquerdao Rotação a Direita
• Rotação Dupla:o Rotação a Esquerdao Rotação a Direita
15
Exemplos de Rotação SimplesExemplos de Rotação Simples• Suponha que nós queiramos inserir o nó 3 na árvore
inicial abaixo
3
16
08
4 10
2 6
00 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.
Exemplo de Rotação Dupla Exemplo de Rotação Dupla (1/2)(1/2)
• Suponha que queiramos inserir o nó 5 na árvore abaixo
17
08
4 10
2 6
00 0
-1
0
8
4 10
2 6
50
0-1
+1
-2
(a)8
6 10
4
52
00
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.
Exemplo de Rotação Dupla Exemplo de Rotação Dupla (2/2)(2/2)
18
8
6 10
4
52
00
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
00
00+1
Pseudo-Código: Rotações Pseudo-Código: Rotações SimplesSimples
• 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;
19
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
Pseudo-Código: Busca e InserçãoPseudo-Código: Busca e Inserção• Busca e Inserção
o Procurar pseudo-código no livro do Tenembaum “Estrutura de Dados Usando C”. pags: 531, 532, 533 e 534.
20
ConclusõesConclusõ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.
21
AVL Tree AppletAVL Tree Applet• http://www.qmatica.com/DataStructures/Trees/AV
L/AVLTree.html• http://people.ksp.sk/~kuko/bak/
22
ExercíciosExercícios• Insira em uma árvore AVL, itens com as chaves
apresentadas nos itens a seguir (na ordem em que aparecem). Desenhe a árvore resultante da inserção, sendo que uma nova árvore deve ser desenhada quando houver uma rotação. Indique qual a rotação que foi executada.
a)30, 40, 24, 58, 48, 26, 11, 13, 14b)20, 15, 25, 10, 30, 24, 17, 12, 5, 3c) 40, 30, 50, 45, 55, 52d)20, 15, 25, 12, 17, 24, 30, 10, 14, 13e)20, 15, 25, 12, 17, 30, 26f) 35, 39, 51, 20, 13, 28, 22, 32, 25, 33
23
ExercíciosExercícios• Dadas as seguintes chaves M, G, B, H, S, P, F, C
como entrada (nesta ordem), desenhe a respectiva árvore AVL (balanceando-a quando for necessário).
24
ExercíciosExercícios
25
Nesta questão, você deverá executar duas inserções e duas remoções na árvore AVL acima, desenhe cada uma das operações necessárias.
Insira 105Insira 20Remova 99Remova 36