Documente Academic
Documente Profesional
Documente Cultură
Resumo
rvores Balanceadas
Andr Pimenta Freire
Objetivos da aula
Ao final desta aula, espera-se que os alunos sejam
capazes de
Explicar como definir a importncia de efetuar
balanceamentos em rvores
Explicar as diferenas entre balanceamento global e local,
e quando so mais adequados
Explicar como efetuar rotaes a esquerda e direita
Explicar o funcionamento do algorito DSW e suas fases
para balanceamento global
Explicar as definies de rvores AVL e as operaes
necessrias para mante-las balanceadas.
rvores Balanceadas
rvores Balanceadas
Para que uma rvore seja, de fato, um mecanismo
eficiente, preciso que os seus elementos estejam
distribudos de forma relativamente homognea
pela estrutura (sub-rvores);
Como as operaes de insero e remoo so
aleatrias, preciso ter um operador capaz de
manter os elementos distribudos de forma
homognea entre as sub-rvores;
Esse o operador de balanceamento.
05/06/2013
Balanceamento Global
Algoritmo DSW
Balanceamento e rotaes
Rotao direita
Av
Av
Filho
Pai
Pai
Filho
R
19
2
16
15
Av
Av
1
20
Rotao esquerda
14
16
Filho
Pai
S
0
15
19
18
Pai
Filho
18
20
17
rvore antes da rotao
de 16 em torno do 19
17
Q
rvore aps a rotao
preserva as propriedades de
ABB
Q
rvore depois da rotao
05/06/2013
24
10
35
15
28
12
35
15
40
28
18
10
40
18
12
6
14
14
Pseudocdigo Etapa 1
Exemplo etapa 1
tmp
10
10
10
tmp
20
20
30
15
25
23
28
25
23
20
30
15
40
15
30
40
25
28
23
Exemplo etapa 1
5
10
10
10
15
20
tmp
20
20
30
25
23
15
15
28
40
23
23
25
25
30
28
30
40
28
40
28
40
05/06/2013
Etapa 2 - Pseudocdigo
10
criarArvoreBalanceada(n)
m = 2lg(n+1) -1; //n o nmero de ns
//realizar rotaes esquerda
fazer n-m rotaes comeando pelo topo
//Fazer o restante das rotaes
necessrias
while (m > 1)
m = m/2;
fazer m rotaes comeando pelo
primeiro filho direita do topo;
10
20
15
23
15
20
23
1.
25
25
28
28
= 2, portanto, duas
rotaes iniciais
2.
30
rvore depois
das duas
rotaes iniciais
30
40
40
10
20
20
5
10
20
15
10
23
10
23
15
25
25
M comea com 7. Ao
entrar no loop, o valor
definido como 3
(7/2 = 3). Trs
rotaes so feitas.
30
30
4.
40
Depois da primeira
rotao do 20 ao
redor do 10
20
15
23
10
30
28
7.
20
Voltando no loop
m = m/2, logo m =
3/1 = 1
40
8.
15
28
30
28
40
5.
Depois da rotao
do 25 em torno do
23
6.
Depois da terceira
rotao do 30 ao
redor do 28
Balanceamento Local
O balanceamento local faz uso de algoritmos que
trabalham apenas em parte da rvore, a cada
insero ou remoo;
30
23
23
40
40
25
25
15
28
30
23
28
28
3.
15
25
25
40
rvore final
balanceada
05/06/2013
rvores AVL
rvores AVL
O FB de um n folha ser
sempre 0.
rvores AVL
rvores AVL
alt_d = 2
alt_e = 3
FB = 2 3 = -1
FB = -1
2
12
12
rvores AVL
rvores AVL
4
3
alt_d = 2
alt_e = 1
FB = 2 1 = 1
6
2
alt_d = 1
alt_e = 0
FB = 1 0 = 1
FB = 1
6
2
12
alt_d = 0
alt_e = 0
FB = 0 0 = 0
FB = 1
12
FB = 0
05/06/2013
rvores AVL
rvores AVL
6
FB = 1
FB = 1
FB = -1
12
FB = 0
FB = 0
3
FB = 0
-2
0
-1
-1
0
0
0
-2
-1
+2
-1
-1
0
0
-1
+1
0
0
Exemplos de
Balanceamento de rvores AVL
Vamos considerar a seguinte rvore (os nmeros ao lado dos ns
so o FB de cada n):
-1
0
0
10
4
0
05/06/2013
Exemplos de
Balanceamento de rvores AVL
Dicas
Para identificarmos quando uma rotao simples ou dupla,
observamos os sinais de FB:
Exemplos de
Balanceamento de rvores AVL
Exemplos de
Balanceamento de rvores AVL
Tipo 1: Ao inserir o nmero 5 na rvore.
8
0
0
8
0
10
10
4
-1
-2
-2
8
0
10
10
4
-1
6
5
6
0
Exemplos de
Balanceamento de rvores AVL
Exemplos de
Balanceamento de rvores AVL
-1
8
0
0
8
0
-1
10
4
0
10
4
0
2
3
-2
-2
8
0
-1
10
4
0
10
4
0
6
3
05/06/2013
-2
Tipo de rotao
Diferena de altura
de um n
Simples esquerda
Simples esquerda
-1
0
-1
Simples esquerda
Simples esquerda
-1
Simples direita
Simples direita
Simples direita
-1
Simples direita
-2
Exemplos de Balanceamento
Rotao simples esquerda
rvore Desbalanceada
rvore Balanceada
6
0
+ 12
Tipo de rotao
1
2
Exemplos de Balanceamento
Rotao simples esquerda
rvore Balanceada
rvore Desbalanceada
+ 12
12
12
N
desbalanceado
Filho do n
desbalanceado
Exemplos de Balanceamento
Rotao simples esquerda
Exemplos de Balanceamento
Rotao simples esquerda
rvore Balanceada
rvore Balanceada
rvore Desbalanceada
1
0
+ 12
6
0
rvore Desbalanceada
+ 12
12
0
Rotao simples
para a esquerda
rvore Balanceada
12
8
0
12
05/06/2013
Exemplos de Balanceamento
Rotao simples esquerda
Simples esquerda
Simples esquerda
-1
Simples direita
-1
Simples direita
-2
10
0
10
-6
0
N
desbalanceado
14
11
14
0
0
14
10
-6
0
0
11
12
12
11
rvore Desbalanceada
10
0
14
11
rvore Balanceada
12
11
12
Exemplos de Balanceamento
Rotao simples esquerda
12
12
rvore Desbalanceada
10
-6
Exemplos de Balanceamento
Rotao simples esquerda
rvore Balanceada
rvore Desbalanceada
10
1
2
rvore Balanceada
Tipo de rotao
14
Rotao simples
para a esquerda
11
14
Filho do n
desbalanceado
Exemplos de Balanceamento
Rotao simples esquerda
rvore Balanceada
10
rvore Desbalanceada
10
-6
0
0
12
0
11
Diferena de altura
de um n
2
0
12
14
-1
rvore Balanceada
1
14
-2
12
0
10
11
14
Tipo de rotao
Simples esquerda
Simples esquerda
-1
Simples direita
-1
Simples direita
11
05/06/2013
rvore Desbalanceada
6
0
+7
6
-1
+7
8
0
rvore Desbalanceada
-1
8
0
N
desbalanceado
Filho do n
desbalanceado
rvore Desbalanceada
6
0
+7
6
-1
8
0
+7
Rotao para a
direita no filho
do n
desbalanceado
rvore Desbalanceada
-1
8
0
6
7
0
rvore Desbalanceada
rvore Balanceada
7
rvore Desbalanceada
6
rvore Balanceada
-1
+7
7
Rotao para a
esquerda no n
desbalanceado
-1
rvore Desbalanceada
rvore Desbalanceada
+7
0
0
8
rvore Desbalanceada
10
05/06/2013
-2
Tipo de rotao
rvore Balanceada
Simples esquerda
Simples esquerda
-1
Simples direita
-1
Simples direita
rvore Balanceada
rvore Desbalanceada
rvore Balanceada
Rotao para a
esquerda no filho
do n
desbalanceado
N
desbalanceado
rvore Balanceada
-2
-1
0
6
0
rvore Desbalanceada
6
1
-2
+5
1
rvore Desbalanceada
3
0
-2
+5
3
0
rvore Desbalanceada
-2
+5
1
0
rvore Desbalanceada
1
0
Filho do n
desbalanceado
3
0
+5
-2
+5
-2
rvore Desbalanceada
-2
Rotao para a
direita no n
desbalanceado
-1
0
5
rvore Desbalanceada
11
05/06/2013
rvore Desbalanceada
+5
1
-2
-1
0
5
-2
rvore Balanceada
10
-1
Simples direita
-1
Simples direita
rvore Balanceada
-2
rvore Desbalanceada
-1
8
N
desbalanceado
Filho do n
desbalanceado
Exemplos de Balanceamento
Rotao simples direita
rvore Balanceada
10
10
- 14
rvore Balanceada
-2
10
14
Exemplos de Balanceamento
Rotao simples direita
rvore Desbalanceada
-1
Rotao simples
para a direita
10
- 14
-2
14
6
0
rvore Desbalanceada
-1
0
6
0
-2
14
6
0
10
- 14
10
- 14
14
Simples esquerda
Exemplos de Balanceamento
Rotao simples direita
rvore Desbalanceada
-1
0
Simples esquerda
5
rvore Desbalanceada
Tipo de rotao
Exemplos de Balanceamento
Rotao simples direita
10
3
0
rvore Balanceada
0
Diferena de altura
de um n
-2
6
0
8
rvore Balanceada
0
6
-1
10
0
12
05/06/2013
Exemplos de Balanceamento
Rotao simples direita
-2
Tipo de rotao
rvore Balanceada
Simples esquerda
Simples esquerda
-1
Simples direita
-1
Simples direita
8
0
rvore Balanceada
rvore Desbalanceada
-1
0
-1
0
-1
0
rvore Desbalanceada
-1
8
0
-2
-1
6
0
rvore Balanceada
rvore Desbalanceada
-1
-2
8
0
+2
-1
6
0
rvore Balanceada
0
0
Rotao simples
para a direita
Filho do n
desbalanceado
Exemplos de Balanceamento
Rotao simples direita
+2
N
desbalanceado
rvore Balanceada
Exemplos de Balanceamento
Rotao simples direita
-2
+2
-2
+2
Exemplos de Balanceamento
Rotao simples direita
8
rvore Desbalanceada
-1
6
0
13
05/06/2013
Exemplo
Construir uma rvore AVL com os seguintes dados:
Exemplo
A insero dos 3 primeiros nmeros resulta na seguinte rvore:
Exemplo
O passo seguinte inserir os ns 25 e 27. A rvore fica
desbalanceada apenas aps a insero do n 27.
Exemplo
O n 30 tem FB -2 e o seu n filho tem FB 1. Precisamos
efetuar uma rotao dupla, ou seja, uma rotao simples
esquerda do n 25, resultando:
Exemplo
Seguida de uma rotao simples direita do n 30, resultando:
Exerccio 1
Considere a insero dos seguintes valores (nesta ordem)
em uma rvore AVL: 5,3,8,2,4,7,10,1,6,9,11. Para essas
inseres nenhuma rotao necessria. Desenhe a
rvore AVL resultante e determine o fator de
balanceamento de cada n.
14
05/06/2013
Exerccio 2
Determinado sistema armazena registros por chaves
numricas em uma rvore AVL. Nessa rvore so
inseridos os seguintes valores: 20,10,5,30,25,27 e 28
nessa ordem.
Apresente passo a passo como a rvore vai sendo
construda. Realize as rotaes necessrias e indique
qual rotao foi realizada em cada caso.
Objetivos da aula
Ao final desta aula, espera-se que os alunos sejam
capazes de
Explicar como definir a importncia de efetuar
balanceamentos em rvores
Explicar as diferenas entre balanceamento global e local,
e quando so mais adequados
Explicar como efetuar rotaes a esquerda e direita
Explicar o funcionamento do algorito DSW e suas fases
para balanceamento global
Explicar as definies de rvores AVL e as operaes
necessrias para mante-las balanceadas.
Referncias Utilizadas
Livro:
ASCENCIO, A. F. G.; ARAJO, G. S. Estruturas de
dados: algoritmos, anlise da complexidade e
implementaes em Java e C/C++. So Paulo:
Pearson Prentice Hall, 2010.
15