Árvores AVL Algoritmos e Estruturas de Dados - IF672

20
[email protected] Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo Arrais de Souza Murilo Raphael de Souza Lira Rafael Alberto Gomes Pereira Lima Rafael Brandão Lobo Rafael Loureiro de Carvalho Tiago Carneiro Pessoa Canto Vinicius Miranda Cesar

description

Árvores AVL Algoritmos e Estruturas de Dados - IF672. Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo Arrais de Souza. Murilo Raphael de Souza Lira Rafael Alberto Gomes Pereira Lima - PowerPoint PPT Presentation

Transcript of Árvores AVL Algoritmos e Estruturas de Dados - IF672

Page 1: Árvores AVL Algoritmos e Estruturas de Dados - IF672

[email protected]

Adriana Libório Fernandes LinsArthur Cavalcanti AlemÁtila Valgueiro Malta MoreiraFlavio Juvenal da Silva JúniorGustavo Cauê Silva BotelhoMatheus Bispo Arrais de Souza

Murilo Raphael de Souza LiraRafael Alberto Gomes Pereira LimaRafael Brandão LoboRafael Loureiro de CarvalhoTiago Carneiro Pessoa CantoVinicius Miranda Cesar

Page 2: Árvores AVL Algoritmos e Estruturas de Dados - IF672

Árvore AVLEm 1962, os matemáticos Russos G.M. Adelson-

Velskki e E. M. Landis descreveram procedimentos para inserção e eliminação de nós em árvores: os algoritmos de balanceamento são chamados algoritmos AVL e as árvores são chamadas árvores AVL.

Uma árvore AVL é uma árvore binária de busca (ABB), auto-balenceada, construída de tal modo que a altura de sua subárvore direita difere da altura da subárvore esquerda de no máximo 1.

balance(nó) = | altura(dir) - altura(esq) | ≤ 1

Page 3: Árvores AVL Algoritmos e Estruturas de Dados - IF672

Representação do nó

Page 4: Árvores AVL Algoritmos e Estruturas de Dados - IF672

BalanceamentoUma árvore AVL é dita balanceada quando, para

cada nó da árvore, a diferença entre as alturas das suas sub-árvores (direita e esquerda) não é maior do que um. Caso a árvore não esteja balanceada é necessário seu rebalanceamento através de rotação simples ou rotação dupla.

O rebalanceamento pode ser requerido para as operações de inserção e remoção de elementos.

Page 5: Árvores AVL Algoritmos e Estruturas de Dados - IF672

InserçãoEm Árvores AVL uma inserção sempre cria

uma nova folha, tal fato pode alterar a altura da árvore e por conseqüência desbalancear a mesma, exigindo um rebalanceamento para restauração da propriedade AVL.

Qualquer que seja a inserção em uma Árvore AVL, será necessário no máximo uma rotação para restauração do equilíbrio.

Page 6: Árvores AVL Algoritmos e Estruturas de Dados - IF672

RotaçõesHá diversos casos de inserção que não

requerem rotação. Caso seja necessário fazer alguma rotação, há quatro situações diferentes a considerar. Supondo que A é o nó crítico, B é o seu filho à esquerda e C seu filho à direita, temos:

Balance de A

Lado da inserção

Sub-árvore do filho

Tipo de rotação

-1 esquerda

de A esquerda

de BSIMPLES 

+1 direita de

A direita de C SIMPLES 

-1 esquerda

de A direita de B DUPLA 

+1 direita de

A esquerda

de CDUPLA 

A

CB

Page 7: Árvores AVL Algoritmos e Estruturas de Dados - IF672

Rotação simples para direitaInserção dos elementos 50, 30 e 20:

50

30

20

30

20

0

0

-1

0

-1

-20

0 0

Page 8: Árvores AVL Algoritmos e Estruturas de Dados - IF672

Rotação simples para esquerdaInserção dos elementos 50, 60 e 70:

50

70

60

70

60

0

0

1

0

1

2

0

0

0

Page 9: Árvores AVL Algoritmos e Estruturas de Dados - IF672

Rotação dupla para direita(Rotação simples para esquerda + Rotação simples para direita)

Inserção dos elementos 40, 20 e 30:

30

2030

20

40

0-1

0

0

1

-2

-1

0

0

00

Page 10: Árvores AVL Algoritmos e Estruturas de Dados - IF672

Rotação dupla para esquerda(Rotação simples para direita + Rotação simples para esquerda)

Inserção dos elementos 50, 70 e 60:

50

70

60

70

60

0

0

1

0

-1

2

0

10

0

0

Page 11: Árvores AVL Algoritmos e Estruturas de Dados - IF672

Rotação simples – de novo

X

Y

a b

c

-2

-1

h+1 h

h+2 h

a

Page 12: Árvores AVL Algoritmos e Estruturas de Dados - IF672

Rotação simples – de novo

b

h

X

c

h

Y

h+1

a

0

0

h+1

Page 13: Árvores AVL Algoritmos e Estruturas de Dados - IF672

Rotação dupla – de novoX

Y

b

d

-2

1

h

h

aZ

c

h+1

-1/0/1

h(b)

h(c)

Bal(z) = -1 h h-1

Bal(z) = 0 h h

Bal(z) = 1 h-1 h

Max( h(b) , h(c) ) = h

h+2

Page 14: Árvores AVL Algoritmos e Estruturas de Dados - IF672

Rotação dupla – de novoX

Y

b

d

-2

1

h

h

aZ

c

h+1

-1

h(b)

h(c)

Bal(z) = -Bal(z) = -11

hh h-1h-1

Bal(z) = 0 h h

Bal(z) = 1 h-1 h

Max( h(b) , h(c) ) = h

h+2

h h-1

Page 15: Árvores AVL Algoritmos e Estruturas de Dados - IF672

Rotação dupla – de novoX

Y

b

d

-2

1

h

h

aZ

c

h+1

1

h(b)

h(c)

Bal(z) = -1 h h-1

Bal(z) = 0 h h

Bal(z) = Bal(z) = 11

h-1h-1 hh

Max( h(b) , h(c) ) = h

h+2

h-1 h

Page 16: Árvores AVL Algoritmos e Estruturas de Dados - IF672

Rotação dupla – de novoX

Y

b

d

-2

1

h

h

aZ

c

h+1

0

h(b)

h(c)

Bal(z) = -1 h h-1

Bal(z) = Bal(z) = 00

hh hh

Bal(z) = 1 h-1 h

Max( h(b) , h(c) ) = h

h+2

h h

Page 17: Árvores AVL Algoritmos e Estruturas de Dados - IF672

Rotação dupla – de novoX

Y

b

d

-2

1

h

h

aZ

c

h+1

-1/0/1

h(b)

h(c)

Bal(z) = -1 h h-1

Bal(z) = 0 h h

Bal(z) = 1 h-1 h

Max( h(b) , h(c) ) = h

h+2

Page 18: Árvores AVL Algoritmos e Estruturas de Dados - IF672

Rotação dupla – de novoX

d

h

Y

h

aZ

b c

h(b)

h(c)

Bal(z) = -1 h h-1

Bal(z) = 0 h h

Bal(z) = 1 h-1 h

Max( h(b) , h(c) ) = h

h / h-1 h / h-1

0/-1 0/1

h+1 h+1

0

Page 19: Árvores AVL Algoritmos e Estruturas de Dados - IF672

RemoçãoEm Árvores AVL a retirada de um nó é uma

operação mais complexa que a inserção e pode resultar no desbalanceamento da árvore.

Em situações específicas durante uma remoção podem ser necessárias log(n) rotações para restauração da propriedade AVL(uma para cada nível da árvore).

Page 20: Árvores AVL Algoritmos e Estruturas de Dados - IF672

40

45

Considere a Árvore AVL acima.

Ela está balanceada???

50 7

038

30

39

45

35

20

15

25

42

17

32

60

75

65

55

80

90

99

88

77

74

+1+1

+1+1

-1-1

00

+1+1

-1-1+1+1

-1-1

+1+1 00

+1+1 -1-1

00

00

00

0000

+1+1

-1-1

-1-1

-1-1

-1-1

-1-1

O que acontece se removermos o nó 39 ???

42

00

-2-2

Nó 40 fica desbalanceado (rde)Nó 38 fica desbalanceado (rse)

56

76

78

79

89

54

57

64

00 00

00

00 +1+1

+1+1 0000

73

40

-1-1

+1+1+200

Outras rotações são necessárias até a árvore recuperar a propriedade AVL