Árvores equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é avl...
TRANSCRIPT
![Page 1: Árvores Equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é AVL k1 e k2 passam a ter subárvores da mesma altura nova altura da árvore resultante](https://reader031.vdocuments.site/reader031/viewer/2022022712/5c07d1b509d3f29f288bb316/html5/thumbnails/1.jpg)
ARV
Árvores EquilibradasÁrvores Equilibradas
SumárioSplayVermelhoPretoAA e BBMultidimensionais
quaternáriaskd
Pesquisa Lexicográficatries multiviatries binárias PATRICIA
![Page 2: Árvores Equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é AVL k1 e k2 passam a ter subárvores da mesma altura nova altura da árvore resultante](https://reader031.vdocuments.site/reader031/viewer/2022022712/5c07d1b509d3f29f288bb316/html5/thumbnails/2.jpg)
ARV
Árvores EquilibradasÁrvores Equilibradas
SumárioÁrvores AVLÁrvores BSplayPesquisa Lexicográfica
tries multiviatries binárias
![Page 3: Árvores Equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é AVL k1 e k2 passam a ter subárvores da mesma altura nova altura da árvore resultante](https://reader031.vdocuments.site/reader031/viewer/2022022712/5c07d1b509d3f29f288bb316/html5/thumbnails/3.jpg)
ARV
Árvores equilibradasÁrvores equilibradas Árvore de pesquisa binária não garante acesso logarítmico
Inserção e eliminação simples podem criar árvores desequilibradasPior caso é linear: árvore degenera em lista ligadaPior caso ocorre tipicamente para inserções ordenadas
Árvores equilibradasEvitam casos degeneradosGarantem O(log N) para operações de inserção, remoção e pesquisaRequerem algoritmos mais elaborados para inserção e remoção
Condição adicional na árvorecondição de equilíbrio, garante que nenhum nó está demasiado profundo
![Page 4: Árvores Equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é AVL k1 e k2 passam a ter subárvores da mesma altura nova altura da árvore resultante](https://reader031.vdocuments.site/reader031/viewer/2022022712/5c07d1b509d3f29f288bb316/html5/thumbnails/4.jpg)
ARV
Árvores AVLÁrvores AVL AdelsonVelskii e Landis, 1962 Condição de equilíbrio: na altura das subárvores de cada nó
diferença de alturas não pode exceder 1garante altura logarítmica para a árvoreé simples de manter
DefiniçãoUma árvore AVL é uma árvore de pesquisa binária que respeita a seguinte
condição de equilíbrio: para qualquer nó da árvore, as alturas das subárvores esquerda e direita diferem no máximo de 1 unidade.
Altura de uma árvore1 + altura da sua subárvore mais alta 0 para árvore só com 1 nó1 para árvore vazia
![Page 5: Árvores Equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é AVL k1 e k2 passam a ter subárvores da mesma altura nova altura da árvore resultante](https://reader031.vdocuments.site/reader031/viewer/2022022712/5c07d1b509d3f29f288bb316/html5/thumbnails/5.jpg)
ARV
Número de nós na árvore AVLNúmero de nós na árvore AVL Uma árvore AVL de altura H tem pelo menos FH+3 1 nós, em que
Fi é o número de Fibonacci de ordem iSH: tamanho da menor árvore AVL de altura H (S0 = 1, S1 = 2)A árvore mais pequena de altura H tem subárvores de alturas H1 e H2Cada subárvore terá, por sua vez, o número mínimo de nós para a sua alturaEntão será SH = SH1 + SH2 +1
SH = FH+3 1 , por indução:
S0 =1, é F3 1 Se SH1 = FH+2 1 e SH2 = FH+1 1,
então SH = SH1 + SH2 +1 = FH+2 1 + FH+1 1 +1= FH+2 + FH+1 1 = FH+3 1
Fi ≈ φi /√5, com φ= (1+ √5)/2 ≈ 1.618árvore de altura H tem no mínimo φH+3 /√5 nósH < 1.44 log (N+2) 1.328 (não mais de 44% acima da mínima)
![Page 6: Árvores Equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é AVL k1 e k2 passam a ter subárvores da mesma altura nova altura da árvore resultante](https://reader031.vdocuments.site/reader031/viewer/2022022712/5c07d1b509d3f29f288bb316/html5/thumbnails/6.jpg)
ARV
Árvores AVLÁrvores AVL
Inserções e remoções podem destruir o equilíbrio de alguns dos nós da árvoreNecessário verificar condição e reequilibrar se tiver sido destruída
4
8
10
12
14
16
Inserção com violação da condição em 2 nós
2 6
4 10 14
168
12
2 6
5
![Page 7: Árvores Equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é AVL k1 e k2 passam a ter subárvores da mesma altura nova altura da árvore resultante](https://reader031.vdocuments.site/reader031/viewer/2022022712/5c07d1b509d3f29f288bb316/html5/thumbnails/7.jpg)
ARV
Inserção em Árvores AVLInserção em Árvores AVL Após uma inserção, só os nós no caminho da raiz ao ponto de
inserção podem ter a condição de equilíbrio alteradacondição só depende das alturas das subárvores de um nó
Para reequilibrar: subir no caminho até à raizreequilibrar o nó mais profundo onde surge desequilíbriotoda a árvore resulta equilibrada
X: nó a reequilibrar devido a inserção em1 árvore esquerda do filho esquerdo de X2 árvore direita do filho esquerdo de X3 árvore esquerda do filho direito de X4 árvore direita do filho direito de X
Casos 1 e 4 simétricos; casos 2 e 3 simétricos
![Page 8: Árvores Equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é AVL k1 e k2 passam a ter subárvores da mesma altura nova altura da árvore resultante](https://reader031.vdocuments.site/reader031/viewer/2022022712/5c07d1b509d3f29f288bb316/html5/thumbnails/8.jpg)
ARV
Rotação simplesRotação simples
k2
k1
C
AB
k1
k2
CA
B
Caso 1
k2 é nó mais profundo onde falha o equilíbriosubárvore esquerda está 2 níveis abaixo da direita
B não está no mesmo nível de A, ou k2 estaria desequilibrado antes da inserção B não está no mesmo nível que C, ou k1 seria nó desequilibrado mais fundo
![Page 9: Árvores Equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é AVL k1 e k2 passam a ter subárvores da mesma altura nova altura da árvore resultante](https://reader031.vdocuments.site/reader031/viewer/2022022712/5c07d1b509d3f29f288bb316/html5/thumbnails/9.jpg)
ARV
Rotação simplesRotação simples
Árvore resultante da rotação é AVLk1 e k2 passam a ter subárvores da mesma alturanova altura da árvore resultante é igual á da árvore anterior à inserção problema fica resolvido com uma só operação
4 10 14
168
12
2 6
1
A B
Ck1
k2
2 8 14
164
12
1 6
A
B C
k2
k1
10
![Page 10: Árvores Equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é AVL k1 e k2 passam a ter subárvores da mesma altura nova altura da árvore resultante](https://reader031.vdocuments.site/reader031/viewer/2022022712/5c07d1b509d3f29f288bb316/html5/thumbnails/10.jpg)
ARV
Rotação simples com filho esquerdoRotação simples com filho esquerdo
/** * Rotate binary tree node with left child. * For AVL trees, this is a single rotation * for case 1. */ static BinaryNode withLeftChild( BinaryNode k2 ) { BinaryNode k1 = k2.left; k2.left = k1.right; k1.right = k2; return k1; }
![Page 11: Árvores Equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é AVL k1 e k2 passam a ter subárvores da mesma altura nova altura da árvore resultante](https://reader031.vdocuments.site/reader031/viewer/2022022712/5c07d1b509d3f29f288bb316/html5/thumbnails/11.jpg)
ARV
Rotação simples com filho direitoRotação simples com filho direito
/** * Rotate binary tree node with right child. * For AVL trees, this is a single rotation * for case 4. */ static BinaryNode withRightChild( BinaryNode k1 ) { BinaryNode k2 = k1.right; k1.right = k2.left; k2.left = k1; return k2; }
![Page 12: Árvores Equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é AVL k1 e k2 passam a ter subárvores da mesma altura nova altura da árvore resultante](https://reader031.vdocuments.site/reader031/viewer/2022022712/5c07d1b509d3f29f288bb316/html5/thumbnails/12.jpg)
ARV
Rotação simples no caso 2Rotação simples no caso 2
k2
k1
R
PQ
k1
k2
R
P
Q
Caso 2
Rotação simples não resolve o desequilíbrio!subárvore Q está a 2 níveis de diferença de Rsubárvore Q passa a estar a 2 níveis de diferença de P
![Page 13: Árvores Equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é AVL k1 e k2 passam a ter subárvores da mesma altura nova altura da árvore resultante](https://reader031.vdocuments.site/reader031/viewer/2022022712/5c07d1b509d3f29f288bb316/html5/thumbnails/13.jpg)
ARV
Rotação dupla no caso 2Rotação dupla no caso 2
k3
k1
D
A C
k2
k3
D
Caso 2
Uma das subárvores B ou C está 2 níveis abaixo de D (e só uma) k2, a chave intermédia, fica na raizposições de k1, k3 e subárvores completamente determinadas pela ordenação
B
k2
C
k1
A B
![Page 14: Árvores Equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é AVL k1 e k2 passam a ter subárvores da mesma altura nova altura da árvore resultante](https://reader031.vdocuments.site/reader031/viewer/2022022712/5c07d1b509d3f29f288bb316/html5/thumbnails/14.jpg)
ARV
Rotação duplaRotação dupla
Rotação dupla pode ser vista como sequência de 2 rotações simplesrotação entre o filho e o neto de Xrotação entre X e o seu novo filho
4 10 14
168
12
2 6
5
k3
k1
k2A
B C
D4 8 14
166
12
2 5
k2
k1k3
AB C D10
![Page 15: Árvores Equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é AVL k1 e k2 passam a ter subárvores da mesma altura nova altura da árvore resultante](https://reader031.vdocuments.site/reader031/viewer/2022022712/5c07d1b509d3f29f288bb316/html5/thumbnails/15.jpg)
ARV
Rotação dupla com filho esquerdoRotação dupla com filho esquerdo
/** * Double rotate binary tree node: first left child * with its right child; then node k3 with new * left child. * For AVL trees, this is a double rotation for * case 2. */ static BinaryNode doubleWithLeftChild( BinaryNode k3) { k3.left = withRightChild( k3.left ); return withLeftChild( k3 ); }
![Page 16: Árvores Equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é AVL k1 e k2 passam a ter subárvores da mesma altura nova altura da árvore resultante](https://reader031.vdocuments.site/reader031/viewer/2022022712/5c07d1b509d3f29f288bb316/html5/thumbnails/16.jpg)
ARV
Rotação dupla com filho direitoRotação dupla com filho direito
/** * Double rotate binary tree node: first right child * with its left child; then node k1 with new * right child. * For AVL trees, this is a double rotation for * case 3. */ static BinaryNode doubleWithRightChild(BinaryNode k1) { k1.right = withLeftChild( k1.right ); return withRightChild( k1 ); }}
![Page 17: Árvores Equilibradas - web.fe.up.ptaed2/acetatos/avl.pdf · Árvore resultante da rotação é AVL k1 e k2 passam a ter subárvores da mesma altura nova altura da árvore resultante](https://reader031.vdocuments.site/reader031/viewer/2022022712/5c07d1b509d3f29f288bb316/html5/thumbnails/17.jpg)
ARV
Inserção em árvore AVLInserção em árvore AVL Algoritmo recursivo
Inserir nó com chave X numa árvore A recursivamente, inserir na subárvore conveniente de A, SA se a altura de AS não se modifica: terminar se a altura de AS é modificada: se ocorre desequilíbrio em A, fazer as rotações
necessárias para reequilibrarComparação de alturas
requer cálculo repetido de alturas das árvores: preferível manter o resultado da comparação como um factor de equilíbrio
Algoritmo iterativoEspecificar paragem logo que uma rotação é realizada