21
Árvores AVL Árvores AVL Balanceadas Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto José Antonio de Oliveira Neto [email protected] [email protected]

Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto [email protected]

Embed Size (px)

Citation preview

Page 1: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

Árvores AVL Árvores AVL BalanceadasBalanceadas

(Árvore Binária Balanceada)

José Antonio de Oliveira NetoJosé Antonio de Oliveira Neto

[email protected][email protected]

Page 2: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

SUMÁRIO

• O que são árvores? • Árvores Balanceadas• Balanceamento estático e dinâmico!• Árvores AVL• Fator de Balanceamento (Fatbal)• Rotação Simples(Esquerda e direita) • Rotação Dupla (Esquerda e Direita)• Exemplos• Referências.

Page 3: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

O que são Árvores?

• São estruturas de dados não lineares que caracterizam uma relação entre dados;

• A relação existente entre os dados é uma relação de hierarquia onde um conjunto de nodos é hierarquicamente subordinado a outro.

Page 4: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

• Uma arvore é considerada balanceada quando suas sub-arvores à esquerda e à direita possuem a mesma altura.

• A árvore não balanceada é definida como degenerada

Árvores Balanceadas

Árvore Binária Balanceada

Árvore Binária Degenerada

Page 5: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

• 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.

BalanceadasÁrvores

Page 6: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

Árvores AVL

• O termo AVL vem de seus fundadores Adel´son, Vel´skii e Landis (1962). Foi a primeira estrutura de dados a oferecer operações de inserção, remoção e busca em tempo logaritmo ou seja é um algoritmo muito rápido.

- Em uma árvore degenerada de 10.000 nós, são necessárias 5.000

comparações para efetuar uma busca, já numa árvore AVL, com o mesmo número de nós, essa média baixa para 14 comparações. –

• A árvore AVL é uma árvore binária de busca e sua estrutura foi construída de forma que a altura da sub-árvore direita é diferente da altura da sub-árvore esquerda de no máximo 1.

Page 7: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

• Sendo assim, para cada nó define-se um fator de balanceamento(fatbal), que deve ser -1,0 ou 1.

Árvores AVLFator de Balanceamento

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.

Page 8: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

Balanceamento em AVL

• Inserimos um novo nodo na árvore.

• Esta inserção pode ou não alterar as propriedades de balanceamento.

• Caso a inserção desse novo nodo não viole alguma propriedade de balanceamento, podemos continuar inserindo novos nodos.

• Se a inserção afetar as propriedades de balanceamento devemos restaurar o balanço da árvore. Esta restauração é efetuada através de ROTAÇÕES na árvore.

Page 9: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

I) Rotação simples à esquerda

Rotação:

Page 10: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

II) Rotação simples à direita

Rotação:

Page 11: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

III) Rotação dupla à esquerda

Rotação:

(rotação simples à direita + rotação simples à esquerda)

Page 12: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

IV) Rotação dupla à direita

Rotação:

(rotação simples à esquerda + rotação simples à direita)

Page 13: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

Dicas:

a) Para identificar quando uma rotação é simples ou dupla deve-se observar os sinais do Fb:

• Sinal for igual, a rotação é simples• Sinal for diferente a rotação é dupla

b) Se Fb for positivo (+) a rotação para à esquerda

c) Se Fb for negativa (-) a rotação para à direita

Rotação:

Page 14: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

Caso I: Rotação Simples• Suponha que inserimos os números 50, 40 e 30 em uma

árvore. Obteremos então:

• A inserção novamente produziu um desbalanceamento.

• Neste caso, como os sinais dos FB são os mesmos, significa que precisamos fazer apenas uma ROTAÇÃO SIMPLES à direita no nodo com FB -2.

• No caso simétrico (nodo com FB 2) faríamos uma rotação simples à esquerda.

Page 15: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

Caso I: Rotação Simples

• Após a rotação simples teremos:

• A árvore está balanceada dentro das propriedades de AVL.

Page 16: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

Exemplo:

• Considerando a árvore abaixo:

• A árvore está balanceada, como podemos observar pelos Fb de cada nodo.

• São dois os possíveis casos de desbalancemento

Page 17: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

Caso II: Rotação Dupla

• Ao inserir o número 5 na árvore teremos a seguinte árvore:

• O nodo 8 fica com o FB -2 e tem um filho com FB +1. Neste caso para manter o balanceamento devemos aplicar duas rotações, também denominada ROTAÇÃO DUPLA.

• Primeiro rotaciona-se o nodo com FB 1 para a esquerda.

Page 18: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

Caso II: Rotação Dupla

• Logo rotaciona-se o nodo que possuía FB -2 na direção oposta, nesse caso a direita.

Page 19: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

Caso II: Rotação Dupla

• Os FB dos nodos voltaram a ficar dentro do esperado das árvores AVL.

• O caso simétrico ao explicado acima acontece com os sinais de FB trocados, ou seja, um nodo com FB +2 com um filho com FB -1. Também utilizariamos uma rotação dupla, mas nos sentidos contrários, ou seja, o nodo com FB -1 seria rotacionado para a direita e o nodo com FB +2 seria rotacionado para a esquerda.

Page 20: Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de Oliveira Neto mano_oliveira@terra.com.br

• A descrição do algoritmo em pseudo-código para a construção de uma árvore AVL seria:

– Inserir o novo nodo normalmente – Iniciando com o nodo pai do nodo recém-inserido, testar se a propriedade

AVL é violada no novo nodo. Temos aqui 2 possibilidades:– A condição AVL foi violada

• Execute as operações de rotação conforme for o caso (Caso I ou Caso II).

• Volte ao passo de Inserção.– A condição AVL não foi violada.– Se o nodo recém-testado não tem pai, ou seja, é o nodo raiz da árvore,

volte para inserir novo nodo.