Disciplina de Estrutura de Dados Árvores Balanceadas (AVL) 1 Árvores Balanceadas Uma árvore é dita balanceada quando as suas sub-árvores á esquerda e à direita possuem a mesma altura. A árvore que não está balanceada, define-se como degenerada. Árvore Binária Balanceada Árvore Binária Degenerada Árvores Balanceadas Desempenho de uma árvore binária depende da ordem em que os elementos são inseridos. 1, 2, 3, 4, 5, 6, 7 3 4, 6, 2, 5, 1, 7, 3 Árvores Balanceadas – Tipos de Balanceamento Balanceamento Estático: Este balanceamento consiste em, depois de um certo tempo de uso da árvore, destruir sua estrutura, guardando suas informações em uma lista ordenada e reconstruí-la de forma balanceada. Balanceamento Dinâmico: Tem por objetivo reajustar os nós de uma árvore sempre que uma inserção ou remoção provocar desbalanceamento. Um exemplo de balanceamento dinâmico são as Árvores AVL. Árvores AVL Árvores AVL vem em homenagem aos matemáticos russos Adelson-Velskii e Landism – 1962. Uma árvore binária de pesquisa P é denominada AVL se: Para todos nós de P, as alturas de suas duas sub-árvores diferem no máximo de uma unidade. 130 100 80 5 110 120 120 150 130 100 200 80 110 200 150 Árvores AVL Fator de Balanceamento (fatbal) Para cada nó define-se um fator de balanceamento que deve ser [–1,0,1]. Fatbal = altura (sub-arvore direita) – altura (sub-árvore esquerda) Fatbal = -1, quando a sub-árvore da esquerda é um nível mais alto que a direita. Fatbal = 0, quando as duas sub-árvores tem a mesma altura. Fatbal = 1, quando a sub-árvore da direita é um nível mais alto que a esquerda. O fator de balanceamento de uma folha é sempre 0 Exemplos de cálculos de FB +6 Inserção: 1, 2, 3, 4, 5, 6 e 7 0 Inserção: 4, 2, 3, 6, 5, 1 e 7 +5 0 +4 +3 0 0 +2 0 0 0 +1 0 -1 Inserção: 4, 1, 3, 6, 5, 2 e 7 0 +2 -1 7 0 0 0 Árvores AVL – Operação Inserção Inserção: 4, 6, 1, 7, 5, 3 e 2. -1 0 +2 -1 0 8 0 0 Op. de balanceamento 0 0 0 0 0 0 0 Árvores AVL – Operação de Remoção Inserção: 4, 6, 2 e 7. +1 Remover nodo 2 0 +1 0 9 +2 0 Op. de balanceamento +1 0 0 0 Árvores AVL Operações de Inserção e Remoção As operações de inserção ou remoção de um nodo 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. Existem 4 tipos de rotações 10 Rotação simples à esquerda; Rotação simples à direita; Rotação dupla à esquerda; Rotação dupla à direita. Exemplos de Rotação Simples Suponha que nós queiramos inserir o nodo 3 na árvore inicial abaixo -1 -2 0 8 8 4 0 0 0 4 2 -1 10 0 6 +1 4 2 10 0 Rotação a direita (nodo 8) +1 0 2 8 0 0 0 0 6 3 10 6 0 3 3 A inserção do nodo 3 produziu um desbalanço no nodo 8 verificado pelo FB = -2 neste nodo. Neste caso, como os sinais dos FB são os mesmos (nodo 8 com FB = -2 e nodo 4 com FB = -1) significa que precisamos fazer apenas uma ROTAÇÃO SIMPLES. 11 Exemplo de Rotação Dupla Suponha que queiramos inserir o nodo 5 na árvore abaixo -2 -1 8 0 0 0 2 4 +1 10 0 6 -2 8 0 (a) -2 10 4 0 -1 2 0 6 0 0 0 5 Observe que o nodo 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 nodo 4 (com FB = +1) para a esquerda. 12 0 Exemplo de Rotação Dupla (continuação) -2 -2 0 0 0 0 (b) 0 0 +1 0 0 0 Logo após da rotação a esquerda: (b) rotaciona-se o nodo 8 (FB = -2) na direção oposta (direita neste caso). 13 Referências Luzzardi, Paulo Roberto Gomes. Estrutura de Dados. UCPEL. Da Silva, Rosaura E. S. Árvores AVL. http://infovis.ucpel.tche.br/luzzardi/AVL.pdf Simulação: http://www.site.uottawa.ca/~stan/csi2514/applets/avl/BT.html