Escolar Documentos
Profissional Documentos
Cultura Documentos
AVL
Prof: Sergio Souza Costa
Sobre mim
Srgio Souza Costa
Professor - UFMA
Doutor em Computao Aplicada (INPE)
prof.sergio.costa@gmail.com
https://sites.google.com/site/profsergiocosta/home
http://www.slideshare.net/skosta/presentations?order=popular
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
Introduo
Introduo
Introduo
Introduo
Insiram os seguintes valores em uma rvore
binria de busca (ABB):
1, 2, 3, 4, 5, 6, 7
4, 6, 2, 5, 1, 7, 3
Introduo
A desvantagem que o desempenho da ABB depende
da ordem em que os elementos so inseridos.
Introduo
A desvantagem que o desempenho da ABB depende
da ordem em que os elementos so inseridos.
Idealmente, deseja-se que a rvore esteja balanceada,
para qualquer n p da rvore.
Introduo
A desvantagem que o desempenho da ABB depende
da ordem em que os elementos so inseridos.
Idealmente, deseja-se que a rvore esteja balanceada,
para qualquer n p da rvore.
Como saber se a rvore est balanceada ?
Introduo
A altura dos ns
um importante
A desvantagem que o desempenho dadado.
ABB depende
da ordem em que os elementos so inseridos.
Idealmente, deseja-se que a rvore esteja balanceada,
para qualquer n p da rvore.
Como saber se a rvore est balanceada ?
AVL
b)
20
30
10
35
30
10
40
20
35
40
AVL
Como saber se a rvore est
desbalanceada?
AVL
Como saber se a rvore est
desbalanceada?
Verificando se existe algum nodo desregulado.
AVL
Como saber se a rvore est
desbalanceada?
Verificando se existe algum nodo desbalanceado.
AVL
Como saber se a rvore est
desbalanceada?
Verificando se existe algum nodo desbalanceado.
Fator de balanceamento
Ou,
Fator de balanceamento
Ou,
20
30
10
40
35
20
2
0
30
10
1
-1
-1
-1
40
0
35
-1
-1
-1
20
2
30
10
1
-1
-1
-1
40
0
35
-1
-1
-1
0 - 2 = -2
20
2
0
30
10
1
-1
-1
-1
40
0
35
-1
-1
-1
0 - 2 = -2
20
2
0
30
10
1
-1
-1
-1
40
0
35
-1
-1
-1
-1 - 1 = -2
2
0
30
10
1
-1
-1
-1
40
0
35
-1
-1
-1
-1 - 1 = -2
2 (-2)
0
30
10
1
-1
-1
-1
40
0
35
-1
-1
-1
0 (0)
30
10
1 (1)
-1
-1
-1
40
0 (0)
35
-1
-1
-1
20
2 (-2)
0 (0)
30
10
1 (1)
-1
-1
-1
40
0 (0)
35
-1
-1
-1
20
2 (-2)
0 (0)
30
10
1 (1)
-1
-1
-1
40
0 (0)
35
-1
-1
-1
Atividades
Insira os seguintes valores em uma rvore
binria, coloque os fatores de balanceamento e
diga se ou no 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]
Como balancear ?
Como balancear ?
Atravs de operaes de
rotaes!!!!
Rotaes
Existem quatro operaes de rotaes:
Rotao simples Esquerda
Rotao simples Direita
Rotao Dupla Esquerda
Rotao Dupla Direita
Rotaes
Existem quatro operaes de
As duplas so
derivadas das
simples
rotaes:
Rotaes
Na insero de um elemento
e na remoo de um elemento
Rotaes e balanceamento
Vamos ver primeiro as operaes de rotao e
depois usa-las para balanceamento.
Rotaes
Rotao a direita
Rotao a direita
Rotao a esquerda
Rotao a direita
Rotao a direita
30
20
10
Imagine a seguinte
rvore....
Rotao a direita
Imagine a seguinte
rvore....
20
30
20
10
10
30
Rotao a direita
Imagine a seguinte
rvore....
20
30
20
10
10
30
Rotao a direita
Atividades
Insiram 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]
Rotao a esquerda
Rotao a esquerda
Atividades
Insiram 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]
Balanceamento
Ao inserir um novo elemento em uma rvore,
pode ser que um dos seus ns ascendentes se
torne desbalanceado, av, bisav ...
Balanceamento
Algoritmo:
A cada insero, checa-se os ns ascedentes.
Balanceamento
Algoritmo:
Aplica-se, o mesmo algoritmo de insero
da rvore binria de busca.
A cada insero, checa-se os ns
ascedentes.
Caso o n esteja desbalanceado, existem
quatro diferentes configuraes, como
veremos a seguir.
Para cada configrao, existe uma rotao indicada.
Exemplo
[
10
Exemplo
[10,
10
FB: -1 - 0 = -1 OK
20
20, 30]
Exemplo
[10, 20,
10
20
30
30]
Exemplo
[10, 20,
30]
10
20
FB: -1 - 0 = -1 OK
30
Exemplo
[10, 20,
30]
10
20
30
Exemplo
[10, 20,
30]
10
20
30
Exemplo
[10, 20,
30]
10
20
30
Exemplo
20
10
30
Exemplo
[10, 20, 30,
20
10
30
40
40]
Exemplo
[10, 20, 30, 40
20
10
30
40
35
, 35]
Exemplo
[10, 20, 30, 40
, 35]
20
10
30
40
35
Exemplo
[10, 20, 30, 40
, 35]
20
10
30
35
Exemplo
[10, 20, 30, 40
, 35]
20
10
30
Rotao dupla a
esquerda.
35
Exemplo
[10, 20, 30, 40
20
rotao
direita
10
30
40
35
, 35]
Exemplo
[10, 20, 30, 40
20
10
30
35
40
, 35]
Exemplo
[10, 20, 30, 40
rotao
esquerda
20
10
30
35
40
, 35]
Exemplo
[10, 20, 30, 40
20
FB: 0 - 1 = -1 OK
continua a checagem com o no
ascendente.
35
10
30
, 35]
40
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]
Codificao
Transformando uma rvore binria de
busca em AVL ...
Codificao
Transformando uma rvore binria de
busca em AVL ...
baixem o seguinte cdigo:
https://sites.google.com/site/skosta/teaching/2011-2/sif120/arquivos/arvore_binaria.c?attredirects=0&d=1
Rotaes
Os algoritmos de rotao sero os primeiros a
serem codificados:
rotao a esquerda
rotao a diretia
Rotao a esquerda
Rotao a esquerda
10
20
30
15
40
Rotao a esquerda
10
20
30
15
40
Rotao a esquerda
aux
10
20
30
15
40
Rotao a esquerda
aux
10
20
30
15
40
Rotao a esquerda
aux
10
20
30
15
40
Rotao a esquerda
aux
10
20
30
15
40
Rotao a esquerda
30
10
40
15
Rotao a esquerda
Rotao a esquerda
Rotaes duplas
// rotao dupla a direita
BTNode* rightDoubleRotation (BTNode* r) {
setLeft(r, leftRotation(getLeft(r)));
return rightRotation (r);
}
// rotao dupla a esquerda
BTNode* leftDoubleRotation (BTNode* r) {
setRight(r, rightRotation(getRight
(r)));
return leftRotation (r);
}
AVL
AVL
Contudo, teremos atualizar a altura para cada:
insero
remoo
rotaes
Atividades
Acessem