Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de...

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]

Transcript of Árvores AVL Balanceadas Árvores AVL Balanceadas (Árvore Binária Balanceada) José Antonio de...

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.