Árvores Balanceadas (AVL) Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com 1.

Post on 07-Apr-2016

219 views 0 download

Transcript of Árvores Balanceadas (AVL) Prof. Luiz José Hoffmann Filho ljhfilho@gmail.com 1.

Árvores Árvores Balanceadas Balanceadas

(AVL) (AVL) Prof. Luiz José Hoffmann Filho

ljhfilho@gmail.com

1

RoteiroRoteiro• Contextualização

• Árvores Balanceadas (AVL)

• Operações de Balanceamento

2

RoteiroRoteiro• Contextualização

• Árvores Balanceadas (AVL)

• Operações de Balanceamento

3

ContextualizaçãoContextualização• As ABP estudadas têm uma séria desvantagem que

pode afetar o tempo necessário para recuperar um item armazenado.

• A desvantagem é que o desempenho da ABP depende da ordem em que os elementos são inseridos.

4

1, 2, 3, 4, 5, 6, 7 4, 6, 2, 5, 1, 7, 31

2

3

4

5

67

2

4

6

1 3 5 7

ContextualizaçãoContextualização• Idealmente, deseja-se que a árvore esteja

balanceada, para qualquer nó p da árvore.• Como saber se a árvore está balanceada ? • Para cada nó p da árvore a altura da sua sae

é aproximadamente igual à altura da sua sad.

5

RoteiroRoteiro• Contextualização

• Árvores Balanceadas (AVL)

• Operações de Balanceamento

6

Árvores Balanceadas (AVL)Árvores Balanceadas (AVL)• O nome AVL vem de seus criadores Adelson Velsky e

Landis (1962).

• Uma árvore binária de pesquisa T é denominada AVL se:o Para todos nós de T, as alturas de suas duas sub-

árvores diferem no máximo de uma unidade.

• Operações de consulta, inserção e remoção de nós tem custo O(log2n).

7

130

100 150

120 20080

110

120

100

11080

130

200

150

Como reconhecer uma árvore desbalanceada? Como reconhecer uma árvore desbalanceada?

(1/2)(1/2)

• Como saber se a árvore está desbalanceada ?o Verificando se existe algum nodo “desregulado”.

• Como saber se um nodo está desregulado ? o Subtraindo-se as alturas das suas sub-árvores.

• Por questões de eficiência, estas diferenças são pré-calculadas e armazenadas nos nós correspondentes, sendo atualizadas durante as operações.

8

Como reconhecer uma árvore desbalanceada?Como reconhecer uma árvore desbalanceada?

(2/2)(2/2)

• Possíveis valores de diferença para cada nó em uma árvore balanceada: -1, 0, 1.

• Fator de Balanceamento (FB) de cada nó da árvoreo FB(p) = h(sad(p)) – h(sae(p))

9

Exemplos de cálculos de FBExemplos de cálculos de FB

10

1

2

3

4

5

67

+6+5

+4+3

+2+1

0

Inserção: 1, 2, 3, 4, 5, 6 e 7

2

4

6

1 3 5 70 0

0

0 0

00

Inserção: 4, 2, 3, 6, 5, 1 e 7

4

1 6

3

2

5 7

-1

0

00

+2

-1

0

Inserção: 4, 1, 3, 6, 5, 2 e 7

Operação: InserçãoOperação: Inserção

11

2

4

6

1 3 5 70 0

0

0 0

00

Op. de balanceamento4

1 6

3

2

5 7

0

00

+2

-1

0

Inserção: 4, 6, 1, 7, 5, 3 e 2. -1

Operação: RemoçãoOperação: Remoção

12

4

6

7

+2

0+1Remover nó 2

4

6

70

0

0Op. de balanceamento4

2 6

7

+1

0

+10

Inserção: 4, 6, 2 e 7.

RoteiroRoteiro• Contextualização

• Árvores Balanceadas (AVL)

• Operações de Balanceamento

13

Operações de Inserção e RemoçãoOperações de Inserção e Remoção• A inserção ou remoção de um nó em uma árvore

AVL pode ou não provocar seu desbalanceamento.

• Se a árvore AVL ficar desbalanceada, a restauração do seu balanceamento é realizado através de ROTAÇÕES.

14

Tipos de RotaçõesTipos de Rotações• Rotação Simples:

o Rotação a Esquerdao Rotação a Direita

• Rotação Dupla:o Rotação a Esquerdao Rotação a Direita

15

Exemplos de Rotação SimplesExemplos de Rotação Simples• Suponha que nós queiramos inserir o nó 3 na árvore

inicial abaixo

3

16

08

4 10

2 6

00 0

-18

4 10

2 6

3

-1 0+1 0

-2

0

Rotação a direita (nó 8)0

0

0 0

4

2 8

1063

+1 0

A inserção do nó 3 produziu um desbalanço no nó 8 verificado pelo FB = -2 neste nó. Neste caso, como os sinais dos FB são os mesmos (nó 8 com FB = -2 e nó 4 com FB = -1) significa que precisamos fazer apenas uma ROTAÇÃO SIMPLES.

Exemplo de Rotação Dupla Exemplo de Rotação Dupla (1/2)(1/2)

• Suponha que queiramos inserir o nó 5 na árvore abaixo

17

08

4 10

2 6

00 0

-1

0

8

4 10

2 6

50

0-1

+1

-2

(a)8

6 10

4

52

00

0

0-2-2

Observe que o nó 8 tem FB = -2 e tem um filho com FB = +1 (sinais opostos). Neste caso, o balanceamento é alcançado com duas rotações. Primeiro: (a) rotação simples sobre o nó 4 (com FB = +1) para a esquerda.

Exemplo de Rotação Dupla Exemplo de Rotação Dupla (2/2)(2/2)

18

8

6 10

4

52

00

0

0-2-2

Logo após da rotação a esquerda: (b) rotaciona-se o nó 8 (FB = -2) na direção oposta (direita neste caso).

(b) 6

4 8

2 105

0

00

00+1

Pseudo-Código: Rotações Pseudo-Código: Rotações SimplesSimples

• Rotação Simples a Esquerda

p aponta para o nó desbalanceado q = right(p); hold = left(q); left(q) = p; right(p) = hold; p = q;

• Rotação Simples a Direita p aponta para o nó desbalanceado q = left(p); hold = right(q); right(q) = p; left(p) = hold; p = q;

19

10

12

157

30

21

+2

0

+10

+10

10 15 12 7 21 30

2

10

1

154

7

0

0

0

-1

-1

-2 10 15 4 2 1 7

Pseudo-Código: Busca e InserçãoPseudo-Código: Busca e Inserção• Busca e Inserção

o Procurar pseudo-código no livro do Tenembaum “Estrutura de Dados Usando C”. pags: 531, 532, 533 e 534.

20

ConclusõesConclusões• Balanceamento de árvores busca minimizar o

número médio de comparações necessárias para localizar qualquer dado.

• Operações de inserção e remoção de nós tendem a tornar as árvores desbalanceadas.

• Há um custo extra de processamento.

• Compensado quando os dados armazenados precisam ser recuperados muitas vezes.

21

AVL Tree AppletAVL Tree Applet• http://www.qmatica.com/DataStructures/Trees/AV

L/AVLTree.html• http://people.ksp.sk/~kuko/bak/

22

ExercíciosExercícios• Insira em uma árvore AVL, itens com as chaves

apresentadas nos itens a seguir (na ordem em que aparecem). Desenhe a árvore resultante da inserção, sendo que uma nova árvore deve ser desenhada quando houver uma rotação. Indique qual a rotação que foi executada.

a)30, 40, 24, 58, 48, 26, 11, 13, 14b)20, 15, 25, 10, 30, 24, 17, 12, 5, 3c) 40, 30, 50, 45, 55, 52d)20, 15, 25, 12, 17, 24, 30, 10, 14, 13e)20, 15, 25, 12, 17, 30, 26f) 35, 39, 51, 20, 13, 28, 22, 32, 25, 33

23

ExercíciosExercícios• Dadas as seguintes chaves M, G, B, H, S, P, F, C

como entrada (nesta ordem), desenhe a respectiva árvore AVL (balanceando-a quando for necessário).

24

ExercíciosExercícios

25

Nesta questão, você deverá executar duas inserções e duas remoções na árvore AVL acima, desenhe cada uma das operações necessárias.

Insira 105Insira 20Remova 99Remova 36