390 likes | 492 Views
8. 1. 4. 12. 2. 6. 10. 14. 2. 3. 4. 11. 5. 7. 9. 13. 15. 1. 3. Árvores Balanceadas. Tempo de busca numa Árvore Binária de Busca depende da profundidade da árvore. Com 4 nós precisa de 4 comparações. Com 15 nós precisa de 4 comparações. 1. 2. 9. 1. 5. 7. 10. 4. 10.
E N D
8 1 4 12 2 6 10 14 2 3 4 11 5 7 9 13 15 1 3 Árvores Balanceadas Tempo de busca numa Árvore Binária de Busca depende da profundidade da árvore Com 4 nós precisa de 4 comparações Com 15 nós precisa de 4 comparações CAP-223
1 2 9 1 5 7 10 4 10 2 8 3 7 4 8 6 3 6 9 5 Árvores Balanceadas (cont.) A geração de uma Árvore Binária de Busca não garante que o resultado seja eficiente para a busca 2 5 10 7 1 6 8 4 3 9 1 9 7 2 8 10 4 3 6 5 CAP-223
6 6 3 10 3 7 9 4 8 5 2 1 9 8 5 2 4 1 10 7 Árvores Balanceadas (cont.) 6 7 8 3 4 9 2 5 10 1 6 10 3 5 9 1 4 2 8 7 CAP-223
Árvores Balanceadas (cont.) O ideal é sempre ter uma Árvore Binária completa. Mas nem sempre isso é possível. Árvore não é balanceada A melhor estrutura, para uma árvore parcialmente preenchida, é aquela onde TODOS OS NÍVEIS estão preenchidos exceto o último nível que pode não ter algumas folhas CAP-223
Árvores Balanceadas (cont.) Conhecimento a priori dos dados é uma boa ajuda. Não é sempre o caso. Mas nas operações de inserção e remoção, a eficiência na busca deve ser mantida. COMO? Duas categorias de árvores: • Árvores Height-Balanced (1962) • AVL (G. Adel’son-Vel’skii e E. Landis) • Árvores Multiway • B-trees e sua generalização a-b trees CAP-223
Árvores Balanceadas (cont.) Altura de um nó Comprimento do caminho mais longo do nó até folha CAP-223
5 10 2 1 4 7 11 6 9 12 3 8 6 4 8 7 9 5 2 10 1 3 Height-Balanced trees Para cada nó, as alturas das suas sub-árvores diferem no máximo em 1. Também são chamadas de árvores AVL e esta diferença é o fator de balanceamento. CAP-223
0 0 +1 -1 0 +1 0 0 0 0 0 Height-Balanced trees (cont.) Convenções usadas para o Fator de Balanceamento [/] ou [ -1], sub-árvore à esquerda tem altura maior [\] ou [+1], sub-árvore à direita tem altura maior [-] ou [0], sub-árvores possuem a mesma altura CAP-223
6 4 8 9 5 10 Height-Balanced trees (cont.) Exemplo de uma árvore que não está balanceada pela altura. O nó marcado viola a condição de balanceamento CAP-223
Height-Balanced trees (cont.) Operações aplicadas para reestruturar AVLs depois de serem “bagunçadas” devido à inserção e remoção • Rotação (rotation) • Rotação Dupla (double rotation) Árvore dividida em sub-árvores e reconstrui numa maneira diferente CAP-223
Height-Balanced trees (cont.) • Três propriedades de balanceamento: • [-]horizontal • [/]inclinação à esquerda (left-leaning) • [\]inclinação à direita (right-leaning) CAP-223
b a a x b 1 2 x y z y z Height-Balanced trees (cont.) rotação CAP-223
b a a c c x b W 1 2 W Y Z x Z Y Height-Balanced trees (cont.) rotação dupla CAP-223
Height-Balanced trees (cont.) • Processo de Inserção • novo elemento inserido na árvore • condição de balanceamento do novo nó - • a partir do novo nó • caminhe até a raiz passando a informação que • a altura da sub-árvore do nó inserido aumentou • em 1 • em cada nó no caminho uma operação • baseada em algumas regras é realizada CAP-223
Height-Balanced trees (cont.) • As regras dependem de: • condição de balanceamento do nó • (encontrado no caminho) antes da • inclusão do novo elemento • direção do acesso a esse nó • (esquerda ou direita) CAP-223
Height-Balanced trees (cont.) Regra I1 SE ( nó atual tem a condição de balanceamento horizontal[-] ) { mude para [\] se acessou pelo lado direito mude para [/] se acessou pelo lado esquerdo SE ( nó é raiz ) FIM SENÃO continue subir } CAP-223
Height-Balanced trees (cont.) Regra I2 SE ( nó atual tem a condição de balanceamento [/] ou [\] ) { SE ( acesso via sub-árvore que era mais baixa antes da inserção do nó) { mude para [-] FIM } } CAP-223
1 1 2 0 1 2 2 0 Height-Balanced trees (cont.) Insere 0 Antes da inserção do novo nó 0 a sub-árvore à esquerda era mais baixa que o da direita (Não havia sub-árvore à esquerda) CAP-223
Height-Balanced trees (cont.) Regra I3 SE ( nó atual tem a condição de balanceamento [/] ou [\] ) { SE ( acesso via sub-árvore que era mais alta antes da inserção do nó) { // condição de balanceamento violada restaura o balanceamento } } CAP-223
2 1 5 3 2 4 2 1 5 BALANCEAR 1 5 3 3 4 Height-Balanced trees (cont.) Insere 4 Antes da inserção do novo nó 4 a sub-árvore à esquerda era mais alta que o da direita (Não havia sub-árvore à direita) CAP-223
Height-Balanced trees (cont.) Como restaurar a condição de balanceamento? SE os últimos dois passos vieram da mesma direção (os dois de esquerda ou os dois de direita) ENTÃO aplica rotação SE os últimos dois passos vieram de direções opostas (um de esquerda e outro de direita OU um de direita e outro de esquerda) ENTÃO aplica rotação dupla CAP-223
Height-Balanced trees (cont.) 1 5 2 2 1 5 2 4 3 2 2 rotação 2 2 1 5 1 5 rotação dupla 1 4 1 5 3 3 3 5 3 4 1 CAP-223
Height-Balanced trees (cont.) • Processo de Remoção • um elemento é removido da árvore • a partir do nó removido • caminhe até a raiz passando a informação que • a altura da sub-árvore do nó removido diminuiu • em 1 • em cada nó no caminho uma operação • baseada em algumas regras é realizada CAP-223
Height-Balanced trees (cont.) • As regras dependem de: • condição de balanceamento do nó • (encontrado no caminho) antes da • remoção do elemento • direção do acesso a esse nó • (esquerda ou direita) CAP-223
Height-Balanced trees (cont.) Regra D1 SE ( nó atual tem a condição de balanceamento horizontal[-] ) { mude para [\] se acessou pelo lado direito mude para [/] se acessou pelo lado esquerdo } CAP-223
Height-Balanced trees (cont.) Regra D2 SE ( nó atual tem a condição de balanceamento [/] ou [\] ) { SE ( acesso via sub-árvore que era mais alta antes da remoção do nó) { mude para [-] continue a caminhar para cima com a mensagem que a sub-árvore do nó encurtou } } CAP-223
Height-Balanced trees (cont.) Regra D3 SE ( nó atual tem a condição de balanceamento [/] ou [\] ) { SE ( acesso via sub-árvore que era mais baixa antes da remoção do nó) { // condição de balanceamento violada restaura o balanceamento (3 casos) } } CAP-223
b a rotação a b X Z Z Y X Y Height-Balanced trees (cont.) Caso 1 CAP-223
b a rotação a b Z Y Y Z X X Height-Balanced trees (cont.) Caso 2 CAP-223
b c rotação dupla a c a W X Y Z Z b W X Y Height-Balanced trees (cont.) Caso 3 CAP-223
Multiway Trees • Número variável de filhas • Devido ao interesse em manter as • árvores balanceadas, tem que adicionar • algumas restrições • Restrições • Folhas na mesma profundidade • Limitação no número de filhas • limite inferior a • limite superior b • exemplo (2,3) trees • nós com 2 ou 3 filhas CAP-223
Multiway Trees Definição de árvore-(a,b): • Elementos xi com ordenação definida • a e b são inteiros tal que 2 a e (2a-1) b • c(N) é número de filhas do nó N • todas as folhas no mesmo nível • 2 c(raiz) b • a c(N) b, para N que não seja raiz Árvores-(a,b) com b = 2a - 1 B-trees CAP-223
Multiway Trees (cont.) Os nós que não são folhas são considerados nós internos. Nó interno com k filhas possui k-1 elementos ou chaves tal que x1 < x2 < ... < xk-1 Árvores que correspondem às k filhas são T1, T2, ..., Tk y xi para todos os elementos y na T1 ... Ti xi z para todos os elementos z na Ti+1 ... Tk CAP-223
Multiway Trees (cont.) Os algoritmos operam nos nós internos e ignoram as folhas. As folhas são entidades fictícias. Na verdade as folhas são arquivos físicos com todos os registros cujo as chaves estão localizadas nos nós internos CAP-223
19 22 27 48 2 57 25 36 5 66 26 7 45 37 30 11 12 16 15 14 18 33 39 20 Multiway Trees (cont.) Exemplo de Árvore (3,5) B-Tree CAP-223
Multiway Trees (cont.) Nó 19 aponta para 2 nós [nó 11-15 e nó 27-36-45] Nó 11-15 aponta para 3 Nó 27-36-45 aponta para 4 CAP-223
Multiway Trees (cont.) Operação de Inserção Separação dos nós Operação de Remoção Junção dos nós CAP-223
Multiway Trees (cont.) A operação de inserção começa a partir de uma procura, até a FOLHA, sem sucesso do nó a ser inserido O NÓ NÃO ESTÁ NA ÁRVORE A chave a ser inserida começa no pai da FOLHA. Processo de inserção depende se o Nó possui MENOS que (b-1) elementos. Neste caso, o elemento x é inserido. Caso contrário há a necessidade de uma cisão (split) CAP-223
QuadTrees Usadas muito para armazenamento de imagens 1 0 2 3 CAP-223