Aula 4 Arvores Balanceadas Handout

15
05/06/2013 1 Árvores Balanceadas André Pimenta Freire GCC109 Algoritmos e Estrutura de Dados III Universidade Federal de Lavras Resumo Definição de balanceamento em árvores Balanceamento global e local Balanceamento global com algoritmo DSW Balanceamento local com árvores AVL Objetivos da aula Ao final desta aula, espera-se que os alunos sejam capazes de Explicar como definir a importância de efetuar balanceamentos em árvores Explicar as diferenças entre balanceamento global e local, e quando são mais adequados Explicar como efetuar rotações a esquerda e direita Explicar o funcionamento do algorito DSW e suas fases para balanceamento global Explicar as definições de árvores AVL e as operações necessárias para mante-las balanceadas. Árvores Balanceadas Para que uma árvore seja, de fato, um mecanismo eficiente, é preciso que os seus elementos estejam distribuídos de forma relativamente homogênea pela estrutura (sub-árvores); Como as operações de inserção e remoção são aleatórias, é preciso ter um operador capaz de manter os elementos distribuídos de forma homogênea entre as sub-árvores; Esse é o operador de balanceamento. Árvores Balanceadas Uma árvore binária é dita de altura balanceada (ou simplesmente balanceada) se as alturas de duas sub-árvores quaisquer de qualquer nó diferem por no máximo 1. Ou seja, a diferença 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 nós-folha estiverem no mesmo nível. Árvores Binárias Balanceadas O balanceamento de uma árvore pode ser feito segundo duas estratégias: Global envolvendo toda a árvore Exemplo: Algoritmo DSW Local envolvendo apenas uma parte da árvore Exemplo: árvores AVL ou árvores Rubronegras

description

Arvores balanceadas Handout

Transcript of Aula 4 Arvores Balanceadas Handout

Page 1: Aula 4 Arvores Balanceadas Handout

05/06/2013

1

Árvores Balanceadas André Pimenta Freire

GCC109 – Algoritmos e Estrutura de Dados III

Universidade Federal de Lavras

Resumo

• Definição de balanceamento em árvores

• Balanceamento global e local

• Balanceamento global com algoritmo DSW

• Balanceamento local com árvores AVL

Objetivos da aula

• Ao final desta aula, espera-se que os alunos sejam capazes de – Explicar como definir a importância de efetuar

balanceamentos em árvores

– Explicar as diferenças entre balanceamento global e local, e quando são mais adequados

– Explicar como efetuar rotações a esquerda e direita

– Explicar o funcionamento do algorito DSW e suas fases para balanceamento global

– Explicar as definições de árvores AVL e as operações necessárias para mante-las balanceadas.

Árvores Balanceadas

• Para que uma árvore seja, de fato, um mecanismo eficiente, é preciso que os seus elementos estejam distribuídos de forma relativamente homogênea pela estrutura (sub­árvores);

• Como as operações de inserção e remoção são

aleatórias, é preciso ter um operador capaz de

manter os elementos distribuídos de forma

homogênea entre as sub­árvores;

• Esse é o operador de balanceamento.

Árvores Balanceadas

• Uma árvore binária é dita de altura balanceada (ou simplesmente balanceada) se as alturas de duas sub-árvores quaisquer de qualquer nó diferem por no máximo 1. Ou seja, a diferença 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 nós-folha estiverem no mesmo nível.

Árvores Binárias Balanceadas

O balanceamento de uma árvore pode ser feito

segundo duas estratégias:

Global – envolvendo toda a árvore

Exemplo: Algoritmo DSW

Local – envolvendo apenas uma parte da árvore

Exemplo: árvores AVL ou árvores Rubronegras

Page 2: Aula 4 Arvores Balanceadas Handout

05/06/2013

2

Balanceamento Global

• No balanceamento global a árvore balanceada

pode ser construída a partir de uma estrutura

externa;

• Nesse caso o algoritmo é relativamente simples,

bastando criar uma lista ordenada com o conteúdo

da árvore (antes ou mesmo depois da existência

da árvore);

• Dessa lista constrói­se a árvore já balanceada.

Algoritmo DSW

• O problema da estratégia de balanceamento global

é a necessidade de uma estrutura externa à árvore

• Uma solução para esse problema é apresentada

através 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

operações de rotação

Balanceamento e rotações

• O principal componente para transformações de árvores no algoritmo DSW é a rotação.

• Há dois tipos de rotação: rotação à direita e rotação à esquerda, que são simétricas.

• A rotação de uma árvore ocorre em torno de sua raiz.

• Nas rotações a seguir, sempre serão feitas rotações de um nó filho ao redor do seu pai. Filhos à esquerda são rotacionados para a direita em torno do pai, e filhos à direita são rotacionados para a esquerda em torno do pai.

Rotação à direita

Avô

Pai

Filho

R

Q P

S

Árvore antes da rotação

Avô

Pai

Filho

R Q

P

S

Árvore depois da rotação

Rotação à direita - exemplo

Árvore antes da rotação

de 16 em torno do 19

14

1

0 2

19

16 20

18 15

17

14

1

0 2 19

16

20 18

15

17

Árvore após a rotação –

preserva as propriedades de

ABB

Rotação à esquerda

Avô

Pai

Filho

R

Q P

S

Árvore antes da rotação

Avô

Pai

Filho

R Q

P

S

Árvore depois da rotação

Page 3: Aula 4 Arvores Balanceadas Handout

05/06/2013

3

Rotação à esquerda - exemplo

Árvore antes da rotação

do 15 ao redor de 10

24

35

40 28

10

15 6

12 18

14

24

35

40 28 10

15

6 12

18

14

Árvore após a rotação –

presenva as propriedades de

ABB

Passos do algoritmo DSW

• O algoritmo DSW envolve dois passos para a criação 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 contém os elementos da ABB.

• A segunda etapa converte a espinha dorsal em uma árvore perfeitamente balanceada por meio da realização de uma série de rotações. O número de rotações é dado em função do número de nós e na altura da árvore final.

Pseudocódigo – 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; //rotação

à direita

defina tmp como o filho que acabou de virar

o pai;

else defina tmp como o filho à direita;

}

Exemplo – etapa 1

10

5

23

40

20

30 15

25

28

tmp

10

5

23

40

20

30 15

25

28

tmp

10

5

15

20

23

40

30

25

28

Exemplo – etapa 1

10

5

15

20

23

40

30

25

28

tmp

10

5

15

20

23

40

30

25

28

10

5

15

20

25

23

40

30

28

Algoritmo DSW – Etapa 2

• Na segunda fase, a espinha é transformada em uma árvore, mas perfeitamente balanceada com folhas somente em níveis adjacentes.

• Em cada passo em direção 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 não atingir o fim. Neste

caso, utiliza-se a aproximação mais próxima possível do número de nós para uma árvore balanceada, com o número de 2lg(n+1)-1 nós. Os demais são tratados separadamente..

Page 4: Aula 4 Arvores Balanceadas Handout

05/06/2013

4

Etapa 2 - Pseudocódigo

criarArvoreBalanceada(n)

m = 2lg(n+1) -1; //n é o número de nós

//realizar rotações à esquerda

fazer n-m rotações começando pelo topo

//Fazer o restante das rotações

necessárias

while (m > 1)

m = m/2;

fazer m rotações começando pelo

primeiro filho à direita do topo;

DSW – segunda etapa -

exemplo

10

5

15

20

25

23

28

30

1. Espinha inicial. Valor

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

2lg(9+1) -1 = 23-1 =

7. Então, n-m = 9-7

= 2, portanto, duas rotações iniciais

40

10

5

15

20

25

23

28

30 2. Árvore depois

das duas rotações iniciais

40

DSW – segunda etapa -

exemplo 10

5

15

20

25

23

28

30 3. M começa com 7. Ao

entrar no loop, o valor

é definido como 3

(7/2 = 3). Três

rotações são feitas. 40

10

5 15

20

25

23

28

30

4. Depois da primeira

rotação do 20 ao redor do 10

40

DSW – segunda etapa -

exemplo

10

5 15

20

25

23 28

30

5. Depois da rotação

do 25 em torno do 23

40

6. Depois da terceira

rotação do 30 ao redor do 28

10

5 15

20

25

23

28

30

40

DSW – segunda etapa -

exemplo

10

5 15

20

25

23

28

30

40

7. Voltando no loop

m = m/2, logo m = 3/1 = 1

8. Árvore final balanceada

10

5 15

20

25

23 28

30

40

Balanceamento Local

• O balanceamento local faz uso de algoritmos que

trabalham apenas em parte da árvore, a cada

inserção ou remoção;

• Algoritmos desse tipo podem ser representados

pelas árvores AVL ou árvores Rubronegras.

Page 5: Aula 4 Arvores Balanceadas Handout

05/06/2013

5

Árvores AVL

• Recebem esse nome em homenagem aos seus criadores,

os matemáticos russos Adelson­Velskii e Landis, 1962.

• Uma árvore AVL é uma árvore binária de pesquisa onde a

diferença em altura entre as subárvore esquerda e direita é

no máximo 1 (positivo ou negativo).

• Quando a diferença chega a 2 ou –2, deve ser refeito o

balanceamento através de rotações.

• Chamamos essa diferença de “fator de balanceamento”.

Árvores AVL

Assim, para cada nó podemos definir um fator de

balanceamento (FB), que vem a ser um número inteiro

igual a:

FB(nó p) = altura(subárvore direita p) - altura(subárvore

esquerda p)

O FB de um nó folha será sempre 0.

Árvores AVL

FB(nodo p) = altura(subárvore direita p) - altura(subárvore

esquerda p)

6

2 8

1 4

3

12

alt_d = 2

alt_e = 3

FB = 2 – 3 = -1

Árvores AVL

FB(nodo p) = altura(subárvore direita p) - altura(subárvore

esquerda p)

6

2 8

1 4

3

12

FB = -1 alt_d = 1

alt_e = 0

FB = 1 – 0 = 1

Árvores AVL

FB(nodo p) = altura(subárvore direita p) - altura(subárvore

esquerda p)

6

2 8

1 4

3

12

FB = -1

FB = 1

alt_d = 0

alt_e = 0

FB = 0 – 0 = 0

Árvores AVL

FB(nodo p) = altura(subárvore direita p) - altura(subárvore

esquerda p)

6

2 8

1 4

3

12

FB = -1

FB = 1

FB = 0

alt_d = 2

alt_e = 1

FB = 2 – 1 = 1

Page 6: Aula 4 Arvores Balanceadas Handout

05/06/2013

6

Árvores AVL

FB(nodo p) = altura(subárvore direita p) - altura(subárvore

esquerda p)

6

2 8

1 4

3

12

FB = -1

FB = 1

FB = 0

FB = 1

FB = 0

FB = 0

FB = -1

Árvores AVL

• Os números nos nós representam o FB para cada

nó.

• Para uma árvore ser AVL os fatores de balanço

devem ser necessariamente -1, 0, ou 1.

Exemplos de Árvores AVL

1

1

0

0

0

-1

-1

0

0

-1

0 0

0 0

-1

Exemplos de Árvores não-AVL

0

0

+2

-1

-2

+1

0

0

-2

-1

Balanceamento de Árvores AVL

• Inicialmente inserimos um novo nó na árvore.

• A inserção deste novo nó pode ou não violar a propriedade de balanceamento.

• Caso a inserção do novo nó não viole a propriedade de balanceamento podemos então continuar inserindo novos nós.

• Caso contrário precisamos nos preocupar em restaurar o balanço da árvore. A restauração deste balanço é efetuada através do que denominamos ROTAÇÕES na árvore.

Exemplos de

Balanceamento de Árvores AVL • Vamos considerar a seguinte árvore (os números ao lado dos nós

são o FB de cada nó):

• A árvore acima está balanceada, como podemos observar pelos FB de cada nó.

8

4

2 6

10 0

0

0 0

-1

Page 7: Aula 4 Arvores Balanceadas Handout

05/06/2013

7

Exemplos de

Balanceamento de Árvores AVL

• Existem 2 casos possíveis de desbalanceamento da árvore:

– Tipo 1: é necessário fazer uma rotação dupla para manter a árvore balanceada

– Tipo 2: é necessário fazer uma rotação simples para manter a árvore balanceada

Dicas

• Para identificarmos quando uma rotação é simples ou dupla, observamos os sinais de FB:

– se o sinal for igual, a rotação é simples.

• Se FB+ rotação para esquerda

• Se FB- rotação para direita

– se o sinal for diferente a rotação é dupla.

– Mais detalhes na tabela de “Descrição de Rotações”

Exemplos de

Balanceamento de Árvores AVL

• Tipo 1: Ao inserir o número 5 na árvore.

8

4

2 6

10 0

0

0 0

-1

8

4

2 6

10 0

1

0 -1

-2

5 0

Exemplos de

Balanceamento de Árvores AVL • Tipo 1: Ao inserir o número 5 na árvore.

8

4

2 6

10 0

0

0 0

-1

8

4

2 6

10 0

1

0 -1

-2

5 0

Solução para manter o balanceamento: Como os sinais dos FB são diferentes, efetuar duas rotações, também

denominada ROTAÇÃO DUPLA.

Exemplos de

Balanceamento de Árvores AVL

• Tipo 2: Ao inserir o número 3 na árvore.

8

4

2 6

10 0

0

0 0

-1

8

4

2 6

10 0

-1

1 0

-2

3 0

Exemplos de

Balanceamento de Árvores AVL

• Tipo 2: Ao inserir o número 3 na árvore.

8

4

2 6

10 0

0

0 0

-1

8

4

2 6

10 0

-1

1 0

-2

3 0

Solução para manter o balanceamento: Como os sinais dos FB são os mesmos, efetuar uma rotação, também

denominada ROTAÇÃO SIMPLES.

Page 8: Aula 4 Arvores Balanceadas Handout

05/06/2013

8

Descrição das rotações

Diferença de altura de um nó

Diferença de altura do nó filho do nó desbalanceado

Tipo de rotação

2

1 Simples à esquerda

0 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

0 Simples à direita

-1 Simples à direita

Descrição das rotações

Diferença de altura de um nó

Diferença de altura do nó filho do nó desbalanceado

Tipo de rotação

2

1 Simples à esquerda

0 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

0 Simples à direita

-1 Simples à direita

Exemplos de Balanceamento Rotação simples à esquerda

6

8 0

1

Árvore Balanceada

6

8 1

2

Árvore Desbalanceada

12 0

+ 12

Exemplos de Balanceamento Rotação simples à esquerda

6

8 0

1

Árvore Balanceada

6

8 1

2

Árvore Desbalanceada

+ 12

12 0

Nó desbalanceado

Filho do nó desbalanceado

Exemplos de Balanceamento

Rotação simples à esquerda

6

8 0

1

Árvore Balanceada

6

8 1

2

Árvore Desbalanceada

12 0

+ 12

Rotação simples para a esquerda

Exemplos de Balanceamento

Rotação simples à esquerda

6

8 0

1

Árvore Balanceada

6

8 1

2

Árvore Desbalanceada

12 0

+ 12

8 0

0

6 12 0

Árvore Balanceada

Page 9: Aula 4 Arvores Balanceadas Handout

05/06/2013

9

Descrição das rotações

Diferença de altura de um nó

Diferença de altura do nó filho do nó desbalanceado

Tipo de rotação

2

1 Simples à esquerda

0 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

0 Simples à direita

-1 Simples à direita

Exemplos de Balanceamento

Rotação simples à esquerda Árvore Balanceada Árvore Desbalanceada

- 6

12 0

1

14 0

10

11

6

0

0 12

0

2

14 0

10

11 0

Exemplos de Balanceamento Rotação simples à esquerda

Árvore Balanceada Árvore Desbalanceada

- 6

12 0

1

14 0

10

11

6

0

0 12

0

2

14 0

10

11 0

Nó desbalanceado

Filho do nó desbalanceado

Exemplos de Balanceamento Rotação simples à esquerda

Árvore Balanceada Árvore Desbalanceada

- 6

12 0

1

14 0

10

11

6

0

0 12

0

2

14 0

10

11 0

Rotação simples para a esquerda

Exemplos de Balanceamento

Rotação simples à esquerda Árvore Balanceada Árvore Desbalanceada

- 6

12 0

1

14 0

10

11

6

0

0 12

0

2

14 0

10

11 0

Árvore Balanceada 12

-1

14 0

10 1

11 0

Descrição das rotações

Diferença de altura de um nó

Diferença de altura do nó filho do nó desbalanceado

Tipo de rotação

2

1 Simples à esquerda

0 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

0 Simples à direita

-1 Simples à direita

Page 10: Aula 4 Arvores Balanceadas Handout

05/06/2013

10

Rotação dupla com filho para a direita e pai para a esquerda

6

8 0

1

Árvore Balanceada

6

8 -1

2

Árvore Desbalanceada

7 0

+ 7 6

8 0

1

Árvore Balanceada

6

8 -1

2

Árvore Desbalanceada

7 0

+ 7

Nó desbalanceado

Filho do nó desbalanceado

Rotação dupla com filho para a direita e pai para a esquerda

6

8 0

1

Árvore Balanceada

6

8 -1

2

Árvore Desbalanceada

7 0

+ 7

Rotação dupla com filho para a direita e pai para a esquerda

Rotação para a direita no filho do nó desbalanceado

6

8 0

1

Árvore Balanceada Árvore Desbalanceada

6

8 -1

2

7 0

+ 7

Rotação dupla com filho para a direita e pai para a esquerda

6

7 1

2

8 0

Árvore Desbalanceada

6

8 0

1

Árvore Balanceada Árvore Desbalanceada

6

8 -1

2

7 0

+ 7

Rotação dupla com filho para a direita e pai para a esquerda

Rotação para a esquerda no nó desbalanceado

6

7 1

2

8 0

Árvore Desbalanceada

6

8 0

1

Árvore Balanceada Árvore Desbalanceada

6

8 -1

2

7 0

+ 7

Rotação dupla com filho para a direita e pai para a esquerda

6

7 0

0 8 0

Árvore Balanceada

6

7 1

2

8 0

Árvore Desbalanceada

Page 11: Aula 4 Arvores Balanceadas Handout

05/06/2013

11

Descrição das rotações

Diferença de altura de um nó

Diferença de altura do nó filho do nó desbalanceado

Tipo de rotação

2

1 Simples à esquerda

0 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

0 Simples à direita

-1 Simples à direita

Rotação dupla com filho para a esquerda e pai para a direita

6

3 0

1

Árvore Balanceada Árvore Desbalanceada

+ 5 6

3 1

-2

5 0

Rotação dupla com filho para a esquerda e pai para a direita

6

3 0

1

Árvore Balanceada Árvore Desbalanceada

+ 5 6

3 1

-2

5 0

Nó desbalanceado

Filho do nó desbalanceado

Rotação dupla com filho para a esquerda e pai para a direita

6

3 0

1

Árvore Balanceada Árvore Desbalanceada

+ 5 6

3 1

-2

5 0

Rotação para a esquerda no filho do nó desbalanceado

Rotação dupla com filho para a esquerda e pai para a direita

6

3 0

1

Árvore Balanceada Árvore Desbalanceada

+ 5 6

3 1

-2

5 0

Árvore Desbalanceada

6

5 -1

-2

3 0

6

3 0

1

Árvore Balanceada Árvore Desbalanceada

+ 5 6

3 1

-2

5 0

Árvore Desbalanceada

Rotação para a direita no nó desbalanceado

6

5 -1

-2

3 0

Rotação dupla com filho para a esquerda e pai para a direita

Page 12: Aula 4 Arvores Balanceadas Handout

05/06/2013

12

Rotação dupla com filho para a esquerda e pai para a direita

6

3 0

1

Árvore Balanceada Árvore Desbalanceada

+ 5 6

3 1

-2

5 0

Árvore Desbalanceada

6

5 -1

-2

3 0

Árvore Balanceada

6

5 0

0

3

0

Descrição das rotações

Diferença de altura de um nó

Diferença de altura do nó filho do nó desbalanceado

Tipo de rotação

2

1 Simples à esquerda

0 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

0 Simples à direita

-1 Simples à direita

Exemplos de Balanceamento Rotação simples à direita

Árvore Balanceada Árvore Desbalanceada

- 14

14

0

-1

8 0

10

2

6

0

0

-2

8 0

10

2

6

0

0

Exemplos de Balanceamento Rotação simples à direita

Árvore Balanceada Árvore Desbalanceada

- 14

14

0

-1

8 0

10

2

6

0

0

-2

8 0

10

2

6

0

0

Nó desbalanceado

Filho do nó desbalanceado

Exemplos de Balanceamento

Rotação simples à direita Árvore Balanceada Árvore Desbalanceada

- 14

14

0

-1

8 0

10

2

6

0

0

-2

8 0

10

2

6

0

0

Rotação simples para a direita

Exemplos de Balanceamento

Rotação simples à direita Árvore Balanceada Árvore Desbalanceada

- 14

14

0

-1

8 0

10

2

6

0

0

-2

8 0

10

2

6

0

0

Árvore Balanceada

0

10 -1

8

2

6

0

1

Page 13: Aula 4 Arvores Balanceadas Handout

05/06/2013

13

Descrição das rotações

Diferença de altura de um nó

Diferença de altura do nó filho do nó desbalanceado

Tipo de rotação

2

1 Simples à esquerda

0 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

0 Simples à direita

-1 Simples à direita

Exemplos de Balanceamento

Rotação simples à direita

8

6 0

-1

Árvore Balanceada Árvore Desbalanceada

+ 2 8

6 -1

-2

2 0

Exemplos de Balanceamento Rotação simples à direita

8

6 0

-1

Árvore Balanceada Árvore Desbalanceada

+ 2 8

6 -1

-2

2 0

Nó desbalanceado

Filho do nó desbalanceado

Exemplos de Balanceamento Rotação simples à direita

8

6 0

-1

Árvore Balanceada Árvore Desbalanceada

+ 2 8

6 -1

-2

2 0

Rotação simples para a direita

Exemplos de Balanceamento

Rotação simples à direita

8

6 0

-1

Árvore Balanceada Árvore Desbalanceada

+ 2 8

6 -1

-2

2 0

Árvore Balanceada

0

8

6 0

2 0

Pseudo-código do algoritmo para construção de uma árvore AVL

1. Insira o novo nó normalmente (da mesma maneira que inserimos numa árvore binária de pesquisa);

2. Iniciando com o nó pai do nó recém-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 condição AVL foi violada

2.1.1 Execute as operações de rotação conforme for o caso (vide tabela de descrições)

2.1.2 Volte ao passo 1

2.2 A condição AVL não foi violada

Se o nó recém-testado não tem pai, ou seja, é o nó raiz da árvore, volte para inserir novo nó (Passo 1)

Page 14: Aula 4 Arvores Balanceadas Handout

05/06/2013

14

Exemplo

Construir uma árvore AVL com os seguintes dados:

– Inserir inicialmente 10, 20, 30

– Se necessário fazer balanceamento.

– Inserir 25 e 27

– Se necessário fazer balanceamento

Exemplo

A inserção dos 3 primeiros números resulta na seguinte árvore:

Após a inserção do elemento 30 a árvore fica desbalanceada. Para balancear a árvore acima, é necessário apenas uma rotação. Fazemos uma rotação para a esquerda no nó com FB 2. A árvore resultante fica:

Exemplo

• O passo seguinte é inserir os nós 25 e 27. A árvore fica desbalanceada apenas após a inserção do nó 27.

• Neste caso, para manter a árvore balanceada, é necessário fazer um rotação dupla.

Exemplo

• O nó 30 tem FB -2 e o seu nó filho tem FB 1. Precisamos efetuar uma rotação dupla, ou seja, uma rotação simples à esquerda do nó 25, resultando:

Exemplo

• Seguida de uma rotação simples à direita do nó 30, resultando:

e a árvore está balanceada.

Exercício 1

• Considere a inserção dos seguintes valores (nesta ordem) em uma árvore AVL: 5,3,8,2,4,7,10,1,6,9,11. Para essas inserções nenhuma rotação é necessária. Desenhe a árvore AVL resultante e determine o fator de balanceamento de cada nó.

Page 15: Aula 4 Arvores Balanceadas Handout

05/06/2013

15

Exercício 2

Determinado sistema armazena registros por chaves numéricas em uma árvore AVL. Nessa árvore são inseridos os seguintes valores: 20,10,5,30,25,27 e 28 nessa ordem.

Apresente passo a passo como a árvore vai sendo construída. Realize as rotações necessárias e indique qual rotação foi realizada em cada caso.

Objetivos da aula

• Ao final desta aula, espera-se que os alunos sejam capazes de – Explicar como definir a importância de efetuar

balanceamentos em árvores

– Explicar as diferenças entre balanceamento global e local, e quando são mais adequados

– Explicar como efetuar rotações a esquerda e direita

– Explicar o funcionamento do algorito DSW e suas fases para balanceamento global

– Explicar as definições de árvores AVL e as operações necessárias para mante-las balanceadas.

Referências Utilizadas

• Livro:

ASCENCIO, A. F. G.; ARAÚJO, G. S. Estruturas de

dados: algoritmos, análise da complexidade e

implementações em Java e C/C++. São Paulo:

Pearson Prentice Hall, 2010.

• Baseado nos slides da Profa. Lívia Naiara de

Andrade