ÁRVORES LNEDS Uma árvore binária de busca não garante acesso em tempo logarítmico. Inserções ou eliminações podem desbalanceá-la. Pior caso: a árvore degenera em lista ligada, onde a busca passa a gastar tempo linear. alanceamento das árvores binárias de busca: Evitam esses casos degenerados. Garantem tempo logarítmico para todas as operações. Requerem algoritmos mais elaborados para inserção e eliminação. De modo geral, os nós das árvores balanceadas armazenam mais informações. Dois conhecidos modelos: árvores VL e vermelho-preto.
ÁRVORES VL utores: delson-velskii e Landis (1962) Exigências para as sub-árvores de cada nó: Diferença de alturas não pode exceder 1 É simples de manter Garante altura logarítmica para a árvore Definição: uma árvore VL é uma árvore binária de busca em cujos nós as alturas das sub-árvores diferem no máximo de uma unidade.
ÁRVORES VL 12 12 8 16 8 16 4 2 6 10 14 4 10 14 2 6 Inserção do 5 5 Desbalanceamento pós cada inserção ou eliminação, é necessário verificar o balanceamento de todos os nós da árvore
INSERÇÃO EM ÁRVORES VL pós uma inserção, somente podem ficar desbalanceados os nós do caminho da raiz até esse novo nó. Nesse caminho, é preciso encontrar o nó mais profundo no qual ocorreu desbalanceamento. asta rebalancear esse nó! Supondo que X seja esse nó, possíveis casos a serem analisados: a) árvore esquerda do filho esquerdo de X b) árvore direita do filho esquerdo de X c) árvore esquerda do filho direito de X d) árvore direita do filho direito de X asos simétricos: a e d (caso 1); b e c (caso 2).
SO 1: ROTÇÃO SIMPLES é nó mais profundo que sofreu desbalanceamento Sua sub-árvore esquerda ficou 2 níveis abaixo da direita não está no mesmo nível de (pois estaria desbalanceado antes da inserção) não está no mesmo nível que (pois seria o nó mais profundo)
EXEMPLO 12 12 8 4 10 14 16 4 2 8 14 16 2 6 1 6 10 1 árvore resultante é VL e ficam balanceados altura da árvore resultante é igual à da árvore anterior à inserção O problema é resolvido em tempo constante
SO 2 R P P Q Q R Uma rotação simples não resolveria o desbalanceamento sub-árvore Q, que está a 2 níveis de diferença de R, passaria a estar a 2 níveis de diferença de P
SO 2: ROTÇÃO DUPL k3 k3 D D Uma (e somente uma) das sub-árvores ou está 2 níveis abaixo de D k3 ficaria na raiz s novas posições de, e das sub-árvores respeitam a ordenação altura da árvore resultante é igual à da árvore anterior à inserção
EXEMPLO 12 12 8 D 4 10 14 16 k3 6 4 8 14 16 2 6 k3 2 5 10 D 5 Essa rotação dupla corresponde a 2 rotações simples Entre e k3 Entre e k3 Também pode ser feita em tempo constante
ELIMINÇÕES EM ÁRVORES VL eliminação de um nó numa árvore VL é, inicialmente, análoga à que ocorre numa árvore binária de busca: Se for folha, basta eliminá-la. Se tiver um único filho, ele ficará em sua posição. Se tiver dois filhos, elimina-se o nó mais à esquerda da sua sub- árvore à direita, cujo valor passará a ser armazenado em seu lugar. É fácil perceber que essa técnica pode provocar desbalanceamentos na árvore VL. O rebalanceamento começará no nó mais profundo que, após a eliminação, perdeu a propriedade VL. Do modo semelhante às inserções, será preciso verificar seis possíveis casos, simétricos dois a dois.
SO 1: ROTÇÃO SIMPLES Nos esquemas abaixo, como a eliminação ocorreu na subárvore, bastará realizar uma rotação simples: ou No segundo esquema, a sub-árvore resultante diminuiu de altura (uma unidade). Por isso, também será preciso realizar um eventual rebalanceamento no pai de. Isso pode continuar até a raiz... Há também outros dois casos simétricos, onde é inicialmente a sub-árvore esquerda de.
SO 2: ROTÇÃO DUPL No esquema abaixo, ou podem ter altura menor (uma unidade). omo a eliminação ocorreu na sub-árvore D, será preciso realizar uma rotação dupla: k3 k3 D D sub-árvore resultante diminuiu de altura (uma unidade). Por isso, também será preciso realizar um eventual rebalanceamento no pai de k3. Isso pode continuar até a raiz... Há um caso simétrico, onde inicialmente D é a sub-árvore esquerda de e k3 é filho esquerdo de.
ÁRVORES VL Nas árvores VL, inserções gastam tempo constante, e eliminações gastam, no pior caso, tempo proporcional à altura da árvore. Exercício: Implementar uma sequência de inserções e eliminações numa árvore VL, e depois imprimir percursos nessa árvore. Dica: em cada nó, será preciso manter um inteiro (-1, 0 ou 1) que indica a diferença entre as alturas das suas sub-árvores.
LTUR DE UM ÁRVORE VL Seja n(h) o número mínimo de nós de uma árvore VL com altura h. Sabemos que n(0)=1 e n(1)=2. Para h>1, essa árvore VL mínima será formada pela raiz, por uma sub-árvore de altura h-1 e por outra sub-árvore de altura h-2. Portanto, n(h) = 1 + n(h-1) + n(h-2), para h>1. omo n(h-1) > n(h-2), sabemos que n(h) > 2.n(h-2). Repetindo: n(h) > 2.n(h-2) > 2.(2.n(h-2-2)) = 4.n(h-4) n(h) > 4.n(h-4) > 4.(2.n(h-4-2)) = 8.n(h-6) Generalizando: n(h) > 2 i.n(h-2i), para i>0.
LTUR DE UM ÁRVORE VL n(h) > 2 i.n(h-2i), para i>0. onsideremos o caso h = 2i+1, ou seja, i = (h-1)/2: n(h) > 2 (h-1)/2.n(2i+1-2i) n(h) > 2.2 (h-1)/2, pois n(1) = 2 n(h) > 2 (h+1)/2 lg n(h) > (h+1)/2 h < 2.lg n(h) - 1 h = O(log n), ou seja, a altura de uma árvore VL é de ordem logarítmica em relação ao seu número de nós. Portanto, os algoritmos de busca e de eliminação na árvore VL são logarítmicos!
LTUR DE UM ÁRVORE VL Por outro lado, é fácil verificar que n(h) = F(h+3)-1, onde F(h) é o h-ésimo número de Fibonacci. Mais precisamente, sabe-se que h < 1,44.lg (n+2), onde h é a altura e n é o número de nós de uma árvore VL, ou seja, o pior caso tem um fator multiplicativo pequeno.