Sunteți pe pagina 1din 15

05/06/2013

Resumo
rvores Balanceadas
Andr Pimenta Freire

Definio de balanceamento em rvores


Balanceamento global e local
Balanceamento global com algoritmo DSW
Balanceamento local com rvores AVL

GCC109 Algoritmos e Estrutura de Dados III

Universidade Federal de Lavras

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

Uma rvore binria dita de altura balanceada (ou


simplesmente balanceada) se as alturas de duas
sub-rvores quaisquer de qualquer n diferem por
no mximo 1. Ou seja, a diferena entre a alturas
das sub-rvores de qualquer n sempre 1 ou 0.
Uma rvore dita perfeitametne balanceada se
ela for balanceada e todos os ns-folha estiverem
no mesmo nvel.

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.

rvores Binrias Balanceadas


O balanceamento de uma rvore pode ser feito
segundo duas estratgias:
Global envolvendo toda a rvore
Exemplo: Algoritmo DSW
Local envolvendo apenas uma parte da rvore
Exemplo: rvores AVL ou rvores Rubronegras

05/06/2013

Balanceamento Global

Algoritmo DSW

No balanceamento global a rvore balanceada


pode ser construda a partir de uma estrutura
externa;

O problema da estratgia de balanceamento global


a necessidade de uma estrutura externa rvore
Uma soluo para esse problema apresentada
atravs do algoritmo DSW (Colin Day, Quentin
Stout e Bette Warren)
No algoritmo DSW o que se faz transformar a
rvore em uma espinha dorsal (rvore com formato
de lista) e depois reconstruir a rvore, sempre com
operaes de rotao

Nesse caso o algoritmo relativamente simples,


bastando criar uma lista ordenada com o contedo
da rvore (antes ou mesmo depois da existncia
da rvore);
Dessa lista constri-se a rvore j balanceada.

Balanceamento e rotaes

Rotao direita

O principal componente para transformaes de rvores


no algoritmo DSW a rotao.

H dois tipos de rotao: rotao direita e rotao


esquerda, que so simtricas.

A rotao de uma rvore ocorre em torno de sua raiz.

Nas rotaes a seguir, sempre sero feitas rotaes de um


n filho ao redor do seu pai. Filhos esquerda so
rotacionados para a direita em torno do pai, e filhos
direita so rotacionados para a esquerda em torno do pai.

Av

Av

Filho

Pai

Pai

Filho
R

rvore antes da rotao

Rotao direita - exemplo


14

19
2

16
15

rvore depois da rotao

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

rvore antes da rotao

Q
rvore depois da rotao

05/06/2013

Rotao esquerda - exemplo


24

24

10

35

15

28

12

Passos do algoritmo DSW

35

15
40

28

18

10

O algoritmo DSW envolve dois passos para a criao de


uma rvore perfeitamente balanceada.

O primeiro passo transforma uma rvore desbalanceada


em uma espinha dorsal. A espinha dorsal simplesmente
uma lista linear ordenada que contm os elementos da
ABB.

A segunda etapa converte a espinha dorsal em uma rvore


perfeitamente balanceada por meio da realizao de uma
srie de rotaes. O nmero de rotaes dado em
funo do nmero de ns e na altura da rvore final.

40

18
12

6
14

14

rvore antes da rotao


do 15 ao redor de 10

rvore aps a rotao


presenva as propriedades de
ABB

Pseudocdigo Etapa 1

Exemplo etapa 1

// Cria a espinha dorsal de uma rvore desbalanceada


criarEspinhaDorsal(raiz, n)
{
tmp = raiz;
while (tmp != null)
if tmp tem um filho esquerda
rotacionar o filho ao redor de tmp; //rotao
direita
defina tmp como o filho que acabou de virar
o pai;
else defina tmp como o filho direita;
}

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

Algoritmo DSW Etapa 2

40

28

Na segunda fase, a espinha transformada em uma


rvore, mas perfeitamente balanceada com folhas
somente em nveis adjacentes.
Em cada passo em direo abaixo na espinha, todo
segundo n rotacionado ao redor do pai.
Cada passo reduz o tamanho da espinha pela metade.
Somente a primeira rodada pode no atingir o fim. Neste
caso, utiliza-se a aproximao mais prxima possvel do
nmero de ns para uma rvore balanceada, com o
nmero de 2lg(n+1)-1 ns. Os demais so tratados
separadamente..

40

05/06/2013

Etapa 2 - Pseudocdigo

DSW segunda etapa exemplo

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.

Espinha inicial. Valor


de N = 9. Valor de m=
7 com , 2lg(n+1) -1 =
2lg(9+1) -1 = 23-1 =
7. Ento, n-m = 9-7

25
25

28
28

= 2, portanto, duas
rotaes iniciais

2.

30

rvore depois
das duas
rotaes iniciais

30

40

40

DSW segunda etapa exemplo

DSW segunda etapa exemplo


20

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

DSW segunda etapa exemplo


10

23

28
28

3.

15

25

25

40

Algoritmos desse tipo podem ser representados


pelas rvores AVL ou rvores Rubronegras.

rvore final
balanceada

05/06/2013

rvores AVL

rvores AVL

Recebem esse nome em homenagem aos seus criadores,


os matemticos russos Adelson-Velskii e Landis, 1962.
Uma rvore AVL uma rvore binria de pesquisa onde a
diferena em altura entre as subrvore esquerda e direita
no mximo 1 (positivo ou negativo).

Assim, para cada n podemos definir um fator de


balanceamento (FB), que vem a ser um nmero inteiro
igual a:
FB(n p) = altura(subrvore direita p) - altura(subrvore
esquerda p)

Quando a diferena chega a 2 ou 2, deve ser refeito o


balanceamento atravs de rotaes.

O FB de um n folha ser
sempre 0.

Chamamos essa diferena de fator de balanceamento.

rvores AVL

rvores AVL

FB(nodo p) = altura(subrvore direita p) - altura(subrvore


esquerda p)

FB(nodo p) = altura(subrvore direita p) - altura(subrvore


esquerda p)

alt_d = 2
alt_e = 3
FB = 2 3 = -1

FB = -1

2
12

12

rvores AVL

rvores AVL

FB(nodo p) = altura(subrvore direita p) - altura(subrvore


esquerda p)
FB = -1

4
3

FB(nodo p) = altura(subrvore direita p) - altura(subrvore


esquerda p)
FB = -1

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

FB(nodo p) = altura(subrvore direita p) - altura(subrvore


esquerda p)
FB = -1

6
FB = 1

Os nmeros nos ns representam o FB para cada


n.
Para uma rvore ser AVL os fatores de balano
devem ser necessariamente -1, 0, ou 1.

FB = 1

FB = -1

12

FB = 0

FB = 0

3
FB = 0

Exemplos de rvores AVL

Exemplos de rvores no-AVL

-2
0

-1

-1
0

0
0

-2

-1

+2

-1
-1

0
0

-1

+1

0
0

Balanceamento de rvores AVL


Inicialmente inserimos um novo n na rvore.
A insero deste novo n pode ou no violar a propriedade
de balanceamento.

Exemplos de
Balanceamento de rvores AVL
Vamos considerar a seguinte rvore (os nmeros ao lado dos ns
so o FB de cada n):
-1

Caso a insero do novo n no viole a propriedade de


balanceamento podemos ento continuar inserindo novos
ns.
Caso contrrio precisamos nos preocupar em restaurar o
balano da rvore. A restaurao deste balano efetuada
atravs do que denominamos ROTAES na rvore.

0
0

10

4
0

A rvore acima est balanceada, como podemos observar pelos


FB de cada n.

05/06/2013

Exemplos de
Balanceamento de rvores AVL

Dicas
Para identificarmos quando uma rotao simples ou dupla,
observamos os sinais de FB:

Existem 2 casos possveis de desbalanceamento da


rvore:

se o sinal for igual, a rotao simples.

Tipo 1: necessrio fazer uma rotao dupla para manter a


rvore balanceada

Se FB+ rotao para esquerda


Se FB- rotao para direita

Tipo 2: necessrio fazer uma rotao simples para manter


a rvore balanceada

se o sinal for diferente a rotao dupla.


Mais detalhes na tabela de Descrio de Rotaes

Exemplos de
Balanceamento de rvores AVL

Exemplos de
Balanceamento de rvores AVL
Tipo 1: Ao inserir o nmero 5 na rvore.

Tipo 1: Ao inserir o nmero 5 na rvore.


-1
-1

8
0
0

8
0

10

10

4
-1

-2

-2

8
0

10

10

4
-1

6
5

6
0

Soluo para manter o balanceamento:


Como os sinais dos FB so diferentes, efetuar duas rotaes, tambm
denominada ROTAO DUPLA.

Exemplos de
Balanceamento de rvores AVL

Exemplos de
Balanceamento de rvores AVL

Tipo 2: Ao inserir o nmero 3 na rvore.

Tipo 2: Ao inserir o nmero 3 na rvore.


-1

-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

Soluo para manter o balanceamento:


Como os sinais dos FB so os mesmos, efetuar uma rotao, tambm
denominada ROTAO SIMPLES.

05/06/2013

Descrio das rotaes


Diferena de altura
de um n

-2

Diferena de altura do n filho


do n desbalanceado

Descrio das rotaes

Tipo de rotao

Diferena de altura
de um n

Simples esquerda

Simples esquerda

-1

Dupla com filho para a


direita e pai para a
esquerda

Dupla com filho para a


esquerda e pai para a
direita

0
-1

Simples esquerda

Simples esquerda

-1

Dupla com filho para a


direita e pai para a
esquerda

Dupla com filho para a


esquerda e pai para a
direita

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

Diferena de altura do n filho


do n desbalanceado

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

Descrio das rotaes


Diferena de altura
de um n

Diferena de altura do n filho


do n desbalanceado

Simples esquerda

Simples esquerda

-1

Dupla com filho para a


direita e pai para a
esquerda

Dupla com filho para a


esquerda e pai para a
direita

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

Descrio das rotaes

14
-1
rvore Balanceada
1

14
-2

12
0

10

11

14

Diferena de altura do n filho


do n desbalanceado

Tipo de rotao

Simples esquerda

Simples esquerda

-1

Dupla com filho para a


direita e pai para a
esquerda

Dupla com filho para a


esquerda e pai para a
direita

Simples direita

-1

Simples direita

11

05/06/2013

Rotao dupla com filho para a direita


e pai para a esquerda
rvore Balanceada

rvore Desbalanceada

Rotao dupla com filho para a direita


e pai para a esquerda
rvore Balanceada

6
0

+7

6
-1

+7

8
0

rvore Desbalanceada

-1

8
0

N
desbalanceado

Filho do n
desbalanceado

Rotao dupla com filho para a direita


e pai para a esquerda
rvore Balanceada

rvore Desbalanceada

Rotao dupla com filho para a direita


e pai para a esquerda
rvore Balanceada

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

Rotao dupla com filho para a direita


e pai para a esquerda
rvore Balanceada

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

Rotao dupla com filho para a direita


e pai para a esquerda

0
0

8
rvore Desbalanceada

10

05/06/2013

Rotao dupla com filho para a


esquerda e pai para a direita

Descrio das rotaes


Diferena de altura
de um n

Diferena de altura do n filho


do n desbalanceado

-2

Tipo de rotao

rvore Balanceada

Simples esquerda

Simples esquerda

-1

Dupla com filho para a


direita e pai para a
esquerda

Dupla com filho para a


esquerda e pai para a
direita

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

Rotao dupla com filho para a


esquerda e pai para a direita

-2

+5

3
0

rvore Desbalanceada

-2

+5

1
0

rvore Desbalanceada

Rotao dupla com filho para a


esquerda e pai para a direita
rvore Balanceada

1
0

Filho do n
desbalanceado

Rotao dupla com filho para a


esquerda e pai para a direita
6

3
0

+5

-2

+5

-2

Rotao dupla com filho para a


esquerda e pai para a direita
6

rvore Desbalanceada

-2
Rotao para a
direita no n
desbalanceado

-1
0

5
rvore Desbalanceada

11

05/06/2013

Rotao dupla com filho para a


esquerda e pai para a direita
rvore Balanceada

rvore Desbalanceada

+5
1

-2

-1
0

5
-2

rvore Balanceada

10

-1

Dupla com filho para a


direita e pai para a
esquerda

Dupla com filho para a


esquerda e pai para a
direita

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

Diferena de altura do n filho


do n desbalanceado

3
0

rvore Balanceada
0

Diferena de altura
de um n

-2

6
0

Descrio das rotaes

8
rvore Balanceada
0

6
-1

10
0

12

05/06/2013

Exemplos de Balanceamento
Rotao simples direita

Descrio das rotaes


Diferena de altura
de um n

Diferena de altura do n filho


do n desbalanceado

-2

Tipo de rotao

rvore Balanceada

Simples esquerda

Simples esquerda

-1

Dupla com filho para a


direita e pai para a
esquerda

Dupla com filho para a


esquerda e pai para a
direita

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

Pseudo-cdigo do algoritmo para


construo de uma rvore AVL
1. Insira o novo n normalmente (da mesma maneira que inserimos numa rvore
binria de pesquisa);
2. Iniciando com o n pai do n recm-inserido, teste se a propriedade AVL
violada neste n (ou seja, teste se o FB deste n >1 ou < -1). Existe 2
possibilidades:
2.1 A condio AVL foi violada

2.1.1 Execute as operaes de rotao conforme for o caso (vide tabela de


descries)
2.1.2 Volte ao passo 1

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

2.2 A condio AVL no foi violada

6
0

Se o n recm-testado no tem pai, ou seja, o n raiz da rvore, volte para


inserir novo n (Passo 1)

13

05/06/2013

Exemplo
Construir uma rvore AVL com os seguintes dados:

Exemplo
A insero dos 3 primeiros nmeros resulta na seguinte rvore:

Inserir inicialmente 10, 20, 30


Se necessrio fazer balanceamento.
Inserir 25 e 27
Se necessrio fazer balanceamento

Exemplo
O passo seguinte inserir os ns 25 e 27. A rvore fica
desbalanceada apenas aps a insero do n 27.

Aps a insero do elemento 30 a rvore fica desbalanceada. Para


balancear a rvore acima, necessrio apenas uma rotao. Fazemos
uma rotao para a esquerda no n com FB 2. A rvore resultante fica:

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:

Neste caso, para manter a rvore balanceada, necessrio fazer


um rotao dupla.

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.

e a rvore est balanceada.

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.

Baseado nos slides da Profa. Lvia Naiara de


Andrade

15

S-ar putea să vă placă și