Você está na página 1de 29

AVL

Equipe 2:
Amanda de Paula
Joeline Dutra
Rebeca Nunes
Contedo
Histria
Conceito
Fator de Balanceamento
Aplicao
Estrutura de dados
Rotao
Simples
Dupla
Qual rotao usar?
Insero
Remoo
Histria
Foi proposta em 1962.
Os matemticos Georgy Adelson-Velsky e Evgenii Landis so
os seus criadores.
A ideia era de uma rvore binria balanceada dinamicamente.
Ou seja, enquanto o dado est sendo inserido.
Este tipo de rvore ficou conhecida como rvore AVL, pelas
iniciais dos nomes dos seus inventores
Histria
Georgy Maximovich Adelson-
Velsky
(1922-2014)
Evgenii Mikhailovich Landis
(1921-1997)
Conceito
O diferencial da rvore AVL que seu balanceamento feito
enquanto se adiciona.

O balanceamento feito por rotaes, que podem ser simples
ou duplas, para a direita ou para a esquerda.

A complexidade da rvore no pior caso de 1,44 log n

Essa complexidade se deve ao fato de que a rvore
balanceada dinamicamente.

Conceito
O fator chave da AVL balanceamento.

Balanceamento relacionado ao equilbrio da rvore.

Se ela est maior para um lado do que para o outro,
dependendo de seu tipo, pode no estar em equilbrio.

Como verificar se uma rvore est balanceada? Com o fator
de balanceamento.

Fator de balanceamento
Enquanto para ns algo visual, a mquina apenas processa
dados. Logo o fator de balanceamento se torna necessrio.
O fator de balanceamento (FB) para uma rvore AVL s pode
ser 1, 0 ou -1.
O fator de balanceamento de uma folha sempre 0.
FB=hD-hE
0
0
+1
0
-1
+1
0
hD
hE
Fator de balanceamento
rvores desbalanceadas:






9
8
4
6
5
5
1
3
9
7
2
Aplicao
Redes de comunicao:
Na reconstruo de mensagens
Ordenando os pacotes
Descartando os repetidos

Codificao de Huffman:
Compresso e descompresso de arquivos

Estrutura de dados
typedef struct no {
int chave;
int fb;

struct no *Pai; //Opcional
struct no *FilhoEsquerdo
struct no *FilhoDireito
} no;
Rotao
Existem 4 tipos de rotao para a rvore AVL.

Elas so:
Rotao para a esquerda ou Esquerda simples (RE)
Rotao para a direita ou Direita simples (RD)
Dupla rotao para a esquerda ou Rotao Direita-Esquerda (RDE)
Dupla rotao para a direita ou Rotao Esquerda-Direita (RED)

Rotao para a esquerda
Balanceando:
a
b
Insere c
c
a
b
FB(c)=0
FB(b)=+1
FB(a)=+2
c a
b
c
a
b Rotaciona
FB(a)=0
FB(c)=0
FB(b)=0
Passo a passo
Ap = P;
Af = Ap->FilhoDireito; (F)
Ap->FilhoDireito= Af->FilhoEsquerdo;
Af->FilhoEsquerdo = Ap;
Ap = Af;
P
F
P
F
Rotao para a direita
Balanceando:
Insere a
a
c
b
FB(a)=0
FB(b)=-1
FB(c)=-2
c a
b
a
c
b
Rotaciona
c
b
FB(a)=0
FB(c)=0
FB(b)=0
Passo a passo
Ap = P;
Af = Ap->FilhoEsquerdo; (F)
Ap->FilhoEsquerdo = Af->FilhoDireito;
Af->FilhoDireito = Ap;
Ap = Af;
P
F
P
F
Dupla rotao para a esquerda
Balanceando:
Primeiro a sub-rvore
a
c
Insere b
b
a
c
FB(c)=0
FB(b)=+1
FB(a)=+2
c
b
b
c
Resultando
c
a
b
FB(b)=0
FB(c)=-1
FB(a)=+2
Rotao para
a direita
Dupla rotao para a esquerda
Voltando para a rvore:
c a
b
c
a
b
Rotao
para a
esquerda
FB(a)=0
FB(c)=0
FB(b)=0
Passo a passo
Ap = P;
Af = Ap->FilhoDireito; (F)
An = Af->FilhoEsquerdo; (N)
Af->FilhoEsquerdo = An->FilhoDireito;
An->FilhoDireito = Af;
Ap->FilhoDireito = An->FilhoEsquerdo;
An->FilhoEsquerdo = Ap;
Ap = An;
N
P
F
N
P F
Dupla rotao para a direita
Balanceando:
Primeiro a sub-rvore
Insere b
FB(b)=0
FB(a)=+1
FB(c)=-2
c
a
b
c
a
FB(c)=0
FB(b)=-1
FB(a)=-2
b
a
a
b
Resultando
Rotao para
a esquerda
a
c
b
Dupla rotao para a direita
Voltando para a rvore:
c a
b
Rotao
para a
direita
FB(a)=0
FB(c)=0
FB(b)=0
a
c
b
Passo a passo
Ap = P;
Af = Ap->FilhoEsquerdo; (F)
An = Af->FilhoDireito; (N)
Af->FilhoDireito = An->FilhoEsquerdo;
An->FilhoEsquerdo = Af;
Ap->FilhoEsquerdo = An->FilhoDireito;
An->FilhoDireito = Ap;
Ap = An;
N
P
F
N
P F
Qual rotao usar?
Diferena de
altura de um n
Diferena de altura do n
filho do n desbalanceado
Tipo de rotao
2
1 Simples esquerda
-1
Dupla com filho para a
direita e pai para a
esquerda
-2
1
Dupla com filho para a
esquerda e pai para a
direita
-1 Simples direita
Insero
Do mesmo modo que na rvore binria.
Inserir e calcular o FB.
Se FB for diferente de -1, 0 e 1, fazer rotao at que esteja
novamente balanceada.

Exemplo:

Remoo
Remoo normal como em ABB
Rebalanceamento
Dvidas?
Referncias
Geral:
WALKER, Julienne. AVL trees. Disponvel em:
http://www.eternallyconfuzzled.com/tuts/datastructures/jsw_tut
_avl.aspx
Criadores da AVL:
WIKIPEDIA. Evgenii Landis. Disponvel em:
http://en.wikipedia.org/wiki/Evgenii_Landis
WIKIPEDIA. Georgy Adelson-Velsky. Disponvel em:
http://en.wikipedia.org/wiki/Georgy_Adelson-Velsky
Fator de balanceamento:
rvore AVL. Disponvel em:
http://www.passeidireto.com/arquivo/2536633/arvore-avl
Referncias
Complexidade e aplicao:
TOFFOLO, Tlio. rvores AVL. Disponvel em:
http://www.decom.ufop.br/toffolo/site_media/uploads/2011-
1/bcc202/slides/25._arvores_%28parte_2%29.pdf
Codificao de Huffman:
BORGES, Henrique. Algoritmo de Huffman. Disponvel em:
http://www.youtube.com/watch?v=2yWfo50jZiw
COSTA, Jean. Algoritmo de Huffman. Disponvel em:
http://www.youtube.com/watch?v=MXI4LWgDucA
WIKIPDIA. Codificao de Huffman. Disponvel em:
http://pt.wikipedia.org/wiki/Codifica%C3%A7%C3%A3o_de_Huff
man

Referncias
Estrutura de dados:
DUTRA, Caio. rvore Binria AVL. Disponvel em:
http://www.vivaolinux.com.br/script/Arvore-binaria-AVL
Rotao:
ANDRADE, Lvia. rvores AVL. Disponvel em:
http://www.passeidireto.com/arquivo/1012626/aula-5_arvore-
avl
HARGROVE, John. The AVL Tree Rotations Tutorial. Disponvel em:
http://pages.cs.wisc.edu/~paton/readings/liblitVersion/AVL-Tree-
Rotations.pdf
NASCIMENTO, Edson. rvore AVL. Disponvel em:
http://colabweb.ufam.edu.br/pluginfile.php/14107/mod_resourc
e/content/3/aed2_10_Arvore%20AVL.pdf
Referncias
Insero e Remoo:
BUENO, Letcia. rvores AVL. Disponvel em:
http://professor.ufabc.edu.br/~leticia.bueno/classes/aed2/materi
ais/avl.pdf
MORRIS, John. AVL trees. Disponvel em:
https://www.cs.auckland.ac.nz/software/AlgAnim/AVL.html