árvores balanceadas - avl
TRANSCRIPT
![Page 1: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/1.jpg)
Árvores BalanceadasAVL
Prof: Sergio Souza Costa
![Page 2: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/2.jpg)
Sobre mim
Sérgio Souza CostaProfessor - UFMADoutor em Computação Aplicada (INPE)
https://sites.google.com/site/profsergiocosta/home
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
http://www.slideshare.net/skosta/presentations?order=popular
![Page 3: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/3.jpg)
Introdução
● As árvores binárias de busca permitem a organização da informação com o objetivo a otimizar as buscas.
![Page 4: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/4.jpg)
Introdução
● As árvores binárias de busca permitem a organização da informação com o objetivo a otimizar as buscas.
● Ela permite o acesso mais rapido aos elementos dado que os elementos estão organizados na árvore, obedecendo uma certa propriedade.
■ Esquerda são os menores que a raiz■ Direita são os maiores que a raiz
![Page 5: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/5.jpg)
Introdução
● As Árvores binárias de busca (ABB) estudadas têm uma séria desvantagem que pode afetar o tempo necessário para recuperar um item armazenado.
![Page 6: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/6.jpg)
Introdução
Insiram os seguintes valores em uma árvore binária de busca (ABB):
1, 2, 3, 4, 5, 6, 7 4, 6, 2, 5, 1, 7, 3
O que vocês concluem com isso ?
![Page 7: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/7.jpg)
IntroduçãoA desvantagem é que o desempenho da ABB depende da ordem em que os elementos são inseridos.
![Page 8: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/8.jpg)
IntroduçãoA desvantagem é que o desempenho da ABB depende da ordem em que os elementos são inseridos.
Idealmente, deseja-se que a árvore esteja balanceada, para qualquer nó p da árvore.
![Page 9: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/9.jpg)
IntroduçãoA desvantagem é que o desempenho da ABB depende da ordem em que os elementos são inseridos.
Idealmente, deseja-se que a árvore esteja balanceada, para qualquer nó p da árvore.
Como saber se a árvore está balanceada ?
![Page 10: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/10.jpg)
IntroduçãoA desvantagem é que o desempenho da ABB depende da ordem em que os elementos são inseridos.
Idealmente, deseja-se que a árvore esteja balanceada, para qualquer nó p da árvore.
Como saber se a árvore está balanceada ?
A altura dos nós é um importante dado.
![Page 11: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/11.jpg)
AVL
● O nome AVL vem de seus criadores Adelson Velsky e Landis (1962).
● Uma árvore binária de pesquisa T é denominada AVL se:
○ Para todos nós de T, as alturas de suas duas sub-árvores diferem no máximo de uma unidade.
20
3010
40
35
20
3010
4035
Qual é AVL ? Que nó esta desbalanceado ?
a) b)
![Page 12: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/12.jpg)
AVL
● Como saber se a árvore está desbalanceada?
![Page 13: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/13.jpg)
AVL
● Como saber se a árvore está desbalanceada?○ Verificando se existe algum nodo “desregulado”.
![Page 14: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/14.jpg)
AVL
● Como saber se a árvore está desbalanceada?○ Verificando se existe algum nodo “desbalanceado”.
● Como saber se um nodo está desbalanceado ?
![Page 15: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/15.jpg)
AVL
● Como saber se a árvore está desbalanceada?○ Verificando se existe algum nodo “desbalanceado”.
● Como saber se um nodo está desbalanceado ?○ Subtraindo-se as alturas das suas sub-árvores.
![Page 16: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/16.jpg)
Fator de balanceamento
● O fator de balanceamento é dado por:○ altura (SAE) – altura(SAD)
● Ou,○ altura (SAD) – altura(SAE)
![Page 17: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/17.jpg)
Fator de balanceamento
● O fator de balanceamento é dado por:○ altura (SAE) – altura(SAD)
● Ou,○ altura (SAD) – altura(SAE)
● O fator de balanceamento de um nodo é dado pelo seu peso em relação a sua sub-árvore.
○ Um nodo pode ter um fator balanceado de 1, 0, ou -1.○ Um nodo com fator de balanceamento -2 ou 2 (diferença de
2 elementos) é considerado desbalanceado e requer um balanceamento.
![Page 18: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/18.jpg)
AVL - Calculando o fator
20
3010
40
35
Coloque as alturas de cada nó
![Page 19: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/19.jpg)
AVL - Calculando o fator
20
3010
40
35
0
1
Coloque as alturas de cada nó
2
3
0
-1 -1
-1 -1
-1
-1
![Page 20: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/20.jpg)
AVL - Calculando o fator
20
3010
40
35
0
1
Coloque as alturas de cada nó
Calcule o fator de balanceamento
altura (SAE) - altura (SAD)
2
3
0
-1 -1
-1 -1
-1
-1
![Page 21: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/21.jpg)
AVL - Calculando o fator
20
3010
40
35
0
1
altura (SAE) - altura (SAD)
2
3
0
-1 -1
-1 -1
-1
-1
0 - 2 = -2
![Page 22: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/22.jpg)
AVL - Calculando o fator
20
3010
40
35
0
1
altura (SAE) - altura (SAD)
2
3 (-2)
0
-1 -1
-1 -1
-1
-1
0 - 2 = -2
![Page 23: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/23.jpg)
AVL - Calculando o fator
20
3010
40
35
0
1
altura (SAE) - altura (SAD)
2
3 (-2)
0
-1 -1
-1 -1
-1
-1
-1 - 1 = -2
![Page 24: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/24.jpg)
AVL - Calculando o fator
20
3010
40
35
0
1
altura (SAE) - altura (SAD)
2 (-2)
3 (-2)
0
-1 -1
-1 -1
-1
-1
-1 - 1 = -2
![Page 25: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/25.jpg)
AVL - Calculando o fator
20
3010
40
35
0 (0)
1 (1)
altura (SAE) - altura (SAD)
2 (-2)
3 (-2)
0 (0)
-1 -1
-1 -1
-1
-1
![Page 26: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/26.jpg)
AVL - Calculando o fator
20
3010
40
35
0 (0)
1 (1)
altura (SAE) - altura (SAD)
2 (-2)
3 (-2)
0 (0)
-1 -1
-1 -1
-1
-1
Uma árvore binária de pesquisa T é denominada AVL se:
○ Para todos nós de T, as alturas de suas duas sub-árvores diferem no máximo de uma unidade.
![Page 27: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/27.jpg)
AVL - Calculando o fator
20
3010
40
35
0 (0)
1 (1)
altura (SAE) - altura (SAD)
2 (-2)
3 (-2)
0 (0)
-1 -1
-1 -1
-1
-1
Uma árvore binária de pesquisa T é denominada AVL se:
○ Para todos nós de T, as alturas de suas duas sub-árvores diferem no máximo de uma unidade.
![Page 28: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/28.jpg)
Atividades
Insira os seguintes valores em uma árvore binária, coloque os fatores de balanceamento e diga se é ou não uma AVL e qual nó esta desbalanceado:
a) [30,15, 50, 5,10, 20]b) [ 80, 40, 100, 120, 90, 30]c) [10, 50, 4, 90, 20, 8]
![Page 29: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/29.jpg)
Como balancear ?
![Page 30: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/30.jpg)
Como balancear ?
Através de operações de rotações!!!!
![Page 31: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/31.jpg)
Rotações
Existem quatro operações de rotações:
Rotação simples à EsquerdaRotação simples à DireitaRotação Dupla à EsquerdaRotação Dupla à Direita
![Page 32: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/32.jpg)
Rotações
Existem quatro operações de rotações:
Rotação simples à EsquerdaRotação simples à DireitaRotação Dupla à EsquerdaRotação Dupla à Direita
As duplas são derivadas das simples
![Page 33: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/33.jpg)
Rotações
● Quando usar as Rotações ?○ Na inserção de um elemento○ e na remoção de um elemento
● É provado que no máximo uma rotação é suficiente para realizar o balanceamento de uma árvore quando é inserido ou removido um elemento
![Page 34: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/34.jpg)
Rotações e balanceamento
Vamos ver primeiro as operações de rotação e depois usa-las para balanceamento.
![Page 35: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/35.jpg)
Rotações
Rotação a direitaRotação a direita
Rotação a esquerda
![Page 36: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/36.jpg)
Rotação a direita
![Page 37: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/37.jpg)
Rotação a direita
30
20
10
Imagine a seguinte árvore....
![Page 38: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/38.jpg)
Rotação a direita
30
20
10
30
20
10
Imagine a seguinte árvore....
![Page 39: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/39.jpg)
Rotação a direita
30
20
10
30
20
10
Imagine a seguinte árvore....
![Page 40: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/40.jpg)
Rotação a direita
AtividadesInsiram os seguintes valores e depois rotacione para a direita a partir da raiz:
a) [40,30, 20]b) [40, 30, 20, 35]c) [40, 50, 30, 20, 35]
![Page 41: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/41.jpg)
Rotação a esquerda
![Page 42: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/42.jpg)
Rotação a esquerda
AtividadesInsiram os seguintes valores e depois rotacione para a esquerda a partir da raiz:
a)[40, 50, 60]b) [40, 50, 10, 60]c) [40, 20, 10, 50, 60, 70]
![Page 43: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/43.jpg)
Rotação dupla a esquerda
![Page 44: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/44.jpg)
Rotação dupla a esquerda
AtividadesInsiram os seguintes valores e depois rotacione dupla a esquerda a partir da raiz:
a)[20, 40, 30]b) [20, 40, 30, 50]c) [20, 10, 40, 30, 50, 12]
![Page 45: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/45.jpg)
Rotação dupla a direita
![Page 46: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/46.jpg)
Rotação dupla a direita
AtividadesInsiram os seguintes valores e depois rotacione dupla a direita a partir da raiz:
a) [40, 20, 30]b) [40, 20, 30, 50]c) [40, 20, 30, 10,50, 80]
![Page 47: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/47.jpg)
Como usar as rotações para manter uma árvore balanceada, ou seja, uma AVL ?
![Page 48: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/48.jpg)
Balanceamento
Ao inserir um novo elemento em uma árvore, pode ser que um dos seus nós ascendentes se torne desbalanceado, avô, bisavô ...
![Page 49: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/49.jpg)
Balanceamento
Algoritmo:
A cada inserção, checa-se os nós ascedentes.
![Page 50: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/50.jpg)
Balanceamento
Algoritmo:
● Aplica-se, o mesmo algoritmo de inserção da árvore binária de busca.
● A cada inserção, checa-se os nós ascedentes.
● Caso o nó esteja desbalanceado, existem quatro diferentes configurações, como veremos a seguir.○ Para cada configração, existe uma rotação indicada.
![Page 51: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/51.jpg)
![Page 52: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/52.jpg)
Exemplo
10
altura (SAE) - altura (SAD)
[10, 20, 30]
![Page 53: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/53.jpg)
Exemplo
10
20
FB: -1 - 0 = -1 OK
altura (SAE) - altura (SAD)
[10, 20, 30]
![Page 54: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/54.jpg)
Exemplo
10
20
altura (SAE) - altura (SAD)
[10, 20, 30]
30
![Page 55: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/55.jpg)
Exemplo
10
20
altura (SAE) - altura (SAD)
[10, 20, 30]
30
FB: -1 - 0 = -1 OK
![Page 56: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/56.jpg)
Exemplo
10
20
altura (SAE) - altura (SAD)
[10, 20, 30]
30
FB: -1 - 1 = -2 Perigo: desbalanceado
![Page 57: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/57.jpg)
Exemplo
10
20
altura (SAE) - altura (SAD)
[10, 20, 30]
30
FB: -1 - 1 = -2 Perigo: desbalanceado
Qual a rotação indicada neste caso ?
![Page 58: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/58.jpg)
Exemplo
10
20
altura (SAE) - altura (SAD)
[10, 20, 30]
30
FB: -1 - 1 = -2 Perigo: desbalanceado
Qual a rotação indicada neste caso ?
Rotação simples a esquerda.
![Page 59: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/59.jpg)
Exemplo
10
20
altura (SAE) - altura (SAD)
[10, 20, 30]
30
![Page 60: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/60.jpg)
Exemplo
10
20
altura (SAE) - altura (SAD)
[10, 20, 30, 40]
30
40
![Page 61: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/61.jpg)
Exemplo
10
20
altura (SAE) - altura (SAD)
[10, 20, 30, 40, 35]
30
40
35
![Page 62: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/62.jpg)
Exemplo
10
20
altura (SAE) - altura (SAD)
[10, 20, 30, 40, 35]
30
40
35
FB: -1 - 1 = -2 Perigo: desbalanceado
![Page 63: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/63.jpg)
Exemplo
10
20
altura (SAE) - altura (SAD)
[10, 20, 30, 40, 35]
30
40
35
FB: -1 - 1 = -2 Perigo: desbalanceado
Qual a rotação indicada neste caso ?
![Page 64: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/64.jpg)
Exemplo
10
20
altura (SAE) - altura (SAD)
[10, 20, 30, 40, 35]
30
40
35
FB: -1 - 1 = -2 Perigo: desbalanceado
Qual a rotação indicada neste caso ?
Rotação dupla a esquerda.
![Page 65: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/65.jpg)
Exemplo
10
20
altura (SAE) - altura (SAD)
[10, 20, 30, 40, 35]
30
40
35
rotação direita
![Page 66: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/66.jpg)
Exemplo
10
20
altura (SAE) - altura (SAD)
[10, 20, 30, 40, 35]
30
35
40
![Page 67: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/67.jpg)
Exemplo
10
20
altura (SAE) - altura (SAD)
[10, 20, 30, 40, 35]
30
35
40
rotação esquerda
![Page 68: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/68.jpg)
Exemplo
10
20
altura (SAE) - altura (SAD)
[10, 20, 30, 40, 35]
35
3040
FB: 0 - 1 = -1 OK
continua a checagem com o no ascendente.
![Page 69: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/69.jpg)
Atividades
A partir de uma árvore AVL, insiram os seguintes valores:
a) [10, 20,15,45,67,81,91,10]b) [1, 5,80,20,67,91,8,10]c) [10,20,30, 50, 5, 15, 30]
![Page 70: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/70.jpg)
Codificação
Transformando uma árvore binária de busca em AVL ...
![Page 71: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/71.jpg)
Codificação
Transformando uma árvore binária de busca em AVL ...
baixem o seguinte código:
https://sites.google.com/site/skosta/teaching/2011-2/sif-120/arquivos/arvore_binaria.c?attredirects=0&d=1
![Page 72: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/72.jpg)
Rotações
Os algoritmos de rotação serão os primeiros a serem codificados:
● rotação a esquerda● rotação a diretia
![Page 73: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/73.jpg)
Rotação a esquerda
![Page 74: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/74.jpg)
BTNode* leftRotation (BTNode* r) {BTNode* aux = getRight(r);setRight(r, getLeft(aux));setLeft(aux, r);return aux;
}
Rotação a esquerda
![Page 75: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/75.jpg)
BTNode* leftRotation (BTNode* r) {BTNode* aux = getRight(r);setRight(r, getLeft(aux));setLeft(aux, r);return aux;
}
Rotação a esquerda
r
10
20
30
5
40
15
![Page 76: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/76.jpg)
BTNode* leftRotation (BTNode* r) {BTNode* aux = getRight(r);setRight(r, getLeft(aux));setLeft(aux, r);return aux;
}
Rotação a esquerda
r
10
20
30
5
40
15
![Page 77: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/77.jpg)
BTNode* leftRotation (BTNode* r) {BTNode* aux = getRight(r);setRight(r, getLeft(aux));setLeft(aux, r);return aux;
}
Rotação a esquerda
r
10
20
30
5
40
15
aux
![Page 78: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/78.jpg)
BTNode* leftRotation (BTNode* r) {BTNode* aux = getRight(r);setRight(r, getLeft(aux));setLeft(aux, r);return aux;
}
Rotação a esquerda
r
10
20
30
5
40
15
aux
![Page 79: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/79.jpg)
BTNode* leftRotation (BTNode* r) {BTNode* aux = getRight(r);setRight(r, getLeft(aux));setLeft(aux, r);return aux;
}
Rotação a esquerda
r
10
20
30
5
40
15
aux
![Page 80: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/80.jpg)
BTNode* leftRotation (BTNode* r) {BTNode* aux = getRight(r);setRight(r, getLeft(aux));setLeft(aux, r);return aux;
}
Rotação a esquerda
r
10
20
30
5
40
15
aux
![Page 81: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/81.jpg)
BTNode* leftRotation (BTNode* r) {BTNode* aux = getRight(r);setRight(r, getLeft(aux));setLeft(aux, r);return aux;
}
Rotação a esquerda
r
10
20
30
5
40
15
aux
![Page 82: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/82.jpg)
BTNode* rightRotation (BTNode* r) {BTNode* aux = getLeft(r);setLeft(r, getRight(aux));setRight(aux, r);return aux;
}
Rotação a esquerda
![Page 83: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/83.jpg)
Rotações duplas
// rotação dupla a direitaBTNode* rightDoubleRotation (BTNode* r) {
setLeft(r, leftRotation(getLeft(r)));return rightRotation (r);
}
// rotação dupla a esquerdaBTNode* leftDoubleRotation (BTNode* r) {
setRight(r, rightRotation(getRight(r)));
return leftRotation (r);}
![Page 84: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/84.jpg)
BTNode* balance (BTNode* r) {int fb;if (r == NULL) return NULL;fb = height (getLeft(r)) - height (getRight(r));
if (fb < -1) { if (height( getRight (getRight(r))) > height( getLeft (getRight(r))))
return leftRotation (r);else
return leftDoubleRotation (r);}else if (fb > 1) {
if (height( getLeft (getLeft(r))) > height( getRight (getLeft(r))))return rightRotation (r);
elsereturn rightDoubleRotation (r); }
return r;}
![Page 85: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/85.jpg)
Como usar o algoritmo de balanceamento ?
![Page 86: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/86.jpg)
Nas operações de inserção e remoção
// inserçãoBTNode *BSTinsert (BTNode *r, int x) { if (r == NULL) r = Node (x, NULL, NULL); else if (x < getElement(r) ) setLeft( r, BSTinsert(getLeft(r), x ) ); else setRight( r, BSTinsert(getRight(r), x ) ); return balance(r);}
![Page 87: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/87.jpg)
Qual o problema SÉRIO com este nosso algoritmo ?
![Page 88: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/88.jpg)
Qual o problema SÉRIO com este nosso algoritmo ?
A operação que calcula a altura da árvore não está eficiente.
Sua complexidade é linear, como torná-la constante ?
![Page 89: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/89.jpg)
Uma verdadeira AVL
A codificação de uma AVL necessita que o cálculo da altura seja constante, caso contrário ela será eficiente na busca porém MUITO ineficiente nas inserções e remoções.
![Page 90: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/90.jpg)
AVLtypedef struct AVL {
int e;int height;struct AVL *l;struct AVL *r;
} AVL;
int height (AVL* r) {if ( r == NULL ) return -1;else return r->height;
}
adiciona mais uma variavel a estrutura
a função altura agora tem complexidade constante
![Page 91: Árvores balanceadas - AVL](https://reader033.vdocuments.com.br/reader033/viewer/2022052412/5588829fd8b42a64538b461f/html5/thumbnails/91.jpg)
AVL
Contudo, teremos atualizar a altura para cada:
● inserção● remoção● rotações