1 / 16

Árvores Equilibradas

Árvores Equilibradas. Sumário AVL Splay B Vermelho-Preto AA e BB Multidimensionais quaternárias k-d [Pesquisa Lexicográfica tries multivia tries binárias PATRICIA]. Árvores equilibradas. Árvore de pesquisa binária não garante acesso logarítmico

rasul
Download Presentation

Árvores Equilibradas

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Árvores Equilibradas • Sumário • AVL • Splay • B • Vermelho-Preto • AA e BB • Multidimensionais • quaternárias • k-d • [Pesquisa Lexicográfica • tries multivia • tries binárias • PATRICIA]

  2. Árvores equilibradas • Árvore de pesquisa binária não garante acesso logarítmico • Inserção e eliminação simples podem criar árvores desequilibradas • Pior caso é linear: árvore degenera em lista ligada • Pior caso ocorre tipicamente para inserções ordenadas • Árvores equilibradas • Evitam casos degenerados • Garantem O(log N) para operações de inserção, remoção e pesquisa • Requerem algoritmos mais elaborados para inserção e remoção • Condição adicional na árvore • condição de equilíbrio, garante que nenhum nó está demasiado profundo

  3. Árvores AVL • Adelson-Velskii e Landis, 1962 • Condição de equilíbrio: na altura das sub-árvores de cada nó • diferença de alturas não pode exceder 1 • garante altura logarítmica para a árvore • é simples de manter • Definição • Uma á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 árvore • 1 + altura da sua sub-árvore mais alta • 0 para árvore só com 1 nó • -1 para árvore vazia

  4. Nú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 i • SH: tamanho da menor árvore AVL de altura H (S0 = 1, S1 = 2) • A árvore mais pequena de altura H tem sub-árvores de alturas H-1 e H-2 • Cada sub-árvore terá, por sua vez, o número mínimo de nós para a sua altura • Então será SH = SH-1 + SH-2 +1 • SH = FH+3 -1 , por indução: • S0 =1, é F3 -1 • Se SH-1 = FH+2 -1 e SH-2 = FH+1 -1, então SH = SH-1 + SH-2 +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ós • H < 1.44 log (N+2) -1.328 (não mais de 44% acima da mínima)

  5. Árvores AVL • Inserções e remoções podem destruir o equilíbrio de alguns dos nós da árvore • Necessário verificar condição e reequilibrar se tiver sido destruída 12 12 8 8 16 16 4 10 14 4 10 14 2 6 2 6 Inserção com violação da condição em 2 nós 5

  6. Inserçã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 alterada • condição só depende das alturas das sub-árvores de um nó • Para reequilibrar: subir no caminho até à raiz • reequilibrar o nó mais profundo onde surge desequilíbrio • toda a árvore resulta equilibrada • X: nó a reequilibrar devido a inserção em 1- árvore esquerda do filho esquerdo de X 2- árvore direita do filho esquerdo de X 3- árvore esquerda do filho direito de X 4- árvore direita do filho direito de X • Casos 1 e 4 simétricos; casos 2 e 3 simétricos

  7. Rotação simples • k2 é nó mais profundo onde falha o equilíbrio • sub-á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 k2 k1 Caso 1 k1 k2 C A A B B C

  8. Rotação simples • Árvore resultante da rotação é AVL • k1 e k2 passam a ter subárvores da mesma altura • nova altura da árvore resultante é igual á da árvore anterior à inserção • problema fica resolvido com uma só operação 12 12 k2 k1 8 4 16 16 C k1 A k2 4 10 14 2 8 14 A B 2 6 1 6 10 C B 1

  9. Rotaçã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; }

  10. Rotaçã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; }

  11. Rotação simples no caso 2 • Rotação simples não resolve o desequilíbrio! • sub-árvore Q está a 2 níveis de diferença de R • sub-árvore Q passa a estar a 2 níveis de diferença de P k2 k1 Caso 2 k1 k2 R P P Q Q R

  12. Rotação dupla no 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 raiz • posições de k1, k3 e subárvores completamente determinadas pela ordenação k3 k2 Caso 2 k1 k1 k3 D k2 A A B C D B C

  13. Rotação dupla • Rotação dupla pode ser vista como sequência de 2 rotações simples • rotação entre o filho e o neto de X • rotação entre X e o seu novo filho 12 12 k3 k2 8 6 16 16 D k3 k1 k1 4 10 14 4 8 14 A A C D 2 k2 6 2 B 5 10 B C 5

  14. Rotaçã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 ); }

  15. Rotaçã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 ); } }

  16. Inserçã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 SA não se modifica: terminar • se a altura de SA é modificada: se ocorre desequilíbrio em A, fazer as rotações necessárias para reequilibrar • Comparaçã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 iterativo • Especificar paragem logo que uma rotação é realizada

More Related