• Nenhum resultado encontrado

Problemas com ABP Desbalanceamento progressivo

N/A
N/A
Protected

Academic year: 2021

Share "Problemas com ABP Desbalanceamento progressivo"

Copied!
23
0
0

Texto

(1)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Á

Á

rvores

rvores

Balanceadas

Balanceadas

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Á

Á

rvores Bin

rvores Bin

á

á

rias de Pesquisa

rias de Pesquisa

• Apresentam uma relação de ordem

• A ordem é definida pela chave

• Operações:

– inserir

– consultar

– excluir

500

300

800

150

400

600

900

Problemas com ABP

Problemas com ABP

Exemplo:

– Inserção: 10, 5, 15, 20, 25, 30, 35

– Inserção: 1, 13, 24, 27, 56

Problemas com ABP

Problemas com ABP

• Desbalanceamento progressivo

• Exemplo:

– inserção: 1, 13, 24, 27, 56

1

13

24

27

56

Alternativa de solução:

• Árvores balanceadas

• AVL

(2)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Balanceamento de

Balanceamento de

Á

Á

rvores

rvores

• Distribuição equilibrada dos nós

– otimizar as operações de consulta

– diminuir o número médio de comparações

• Distribuição

– uniforme

– não uniforme

• chaves mais solicitadas mais perto da raiz

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Por Freq

Por Freq

ü

ü

ência

ência

• Por freqüência de acesso

– Pressupõe distribuição não uniforme de acessos

500

800

400

900

600

550

50%

12%

25%

4%

5%

4%

Balanceamento por distribuição

de acessos!

Uma árvore binária é

completamente balanceada

se a distância média dos nodos até a raiz for mínima

Á

Á

rvores balanceadas por ALTURA

rvores balanceadas por ALTURA

4%

4%

Por

Por

Freq

Freq

ü

ü

ência X Por Altura

ência X Por Altura

500

800

400

900

600

550

50%

12%

25%

4%

5%

4%

800

600

500

900

550

50%

50%

4%

5%

400

(3)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Balanceamento por ALTURA

Balanceamento por ALTURA

220

120

80

100

300

150

260

400

110

130

200

250

270

350

140

Árvore não completamente balanceada

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Á

Á

rvores AVL

rvores AVL

Adelson-Velskii e Landis (1962)

Uma

á

á

rvore AVL

rvore AVL é uma árvore binária

de pesquisa (ABP) construída de tal

modo que a altura de sua subárvore

direita difere da altura da subárvore

esquerda de no

m

m

á

á

ximo 1.

ximo 1

Á

Árvores AVL

rvores AVL

árvores

FATOR(1)

são chamadas

Árvores AVL

¬ AVL

AVL

AVL

Adelson-Velskii e Landis (1962)

Á

Á

rvores balanceadas por altura

rvores balanceadas por altura

HB(k)-Tree

Height-Balanced k -Tree

árvore binária

para qualquer nodo, as alturas de suas duas

subárvores não diferem de mais do que k

unidades

cada uma das subárvores do nodo

apresenta a propriedade FATOR(k)

A

B

C

D

E

G

H

(4)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Á

Á

rvores balanceadas por altura

rvores balanceadas por altura

HB(k)-Tree

Height-Balanced k -Tree

árvore binária

para qualquer nodo, as alturas de suas duas

subárvores não diferem de mais do que k

unidades

cada uma das subárvores do nodo

apresenta a propriedade FATOR(k)

A

B

C

D

E

G

H

I

J

Ex:

Ex:

verificar se a árvore ao lado é

FATOR(1)

FATOR(2)

FATOR(3)

→ Não

→ Não

→ Sim

+3

0

-2

0

-1

0

0

0

0

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Á

Á

rvores AVL

rvores AVL

árvores

FATOR(1)

são chamadas

Árvores AVL

Adelson-Velskii e Landis (1962)

Uma

á

á

rvore AVL

rvore AVL é uma árvore binária

de pesquisa (ABP) construída de tal

modo que a altura de sua subárvore

direita difere da altura da subárvore

esquerda de no

m

m

á

á

ximo 1.

ximo 1

Exerc

Exerc

í

í

cio:

cio:

Verifique quais das ABP são AVL:

130

150

100

200

120

80

110

120

130

100

200

110

80

150

Exerc

Exerc

ício: Resposta

í

cio: Resposta

Verifique quais das ABP são AVL:

130

150

100

200

120

80

110

120

130

100

200

110

80

150

+1

-1

-1

0

0

0

0

0

0

+1

-2

0

-1

(5)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Exerc

Exerc

í

í

cio

cio

Verifique quais das ABP são AVL:

42

88

15

63

27

6

94

20

57

71

42

88

15

63

27

6

94

42

88

15

63

27

20

57

71

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Exerc

Exerc

ício: Resposta

í

cio: Resposta

Verifique quais das ABP são AVL:

42

88

15

63

27

6

94

20

57

71

42

88

15

63

27

6

94

42

88

15

63

27

20

57

71

0

0

0

0

0

0

0

AVL: completamente balanceada

0

0

0

0

+1

-1

0

0

0

0

0

0

0

+1

-2

0

-2

AVL

Não AVL

Opera

Opera

ções

ç

ões

• por exemplo: INSERÇÃO

• deve ser preservada a propriedade AVL

Reestruturar

a árvore

Opera

Operaç

ções

ões

• Como manter uma árvore AVL sempre balanceada

após uma inserção ou exclusão?

• Através de uma operação de ROTAÇÃO

• Característica da operação

• preservar a ordem das chaves

• basta uma execução da operação de rotação para

(6)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Balanceamento de

Balanceamento de

Á

Á

rvore AVL com Rota

rvore AVL com Rota

ç

ç

ão

ão

)

Rotação Dupla

• à direita

• à esquerda

)

Rotação Simples

• à direita

• à esquerda

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Rota

Rota

ç

ç

ão Simples

ão Simples

DIREITA

DIREITA

Toda vez que uma subárvore fica com um

fator:

• positivo e sua subárvore da esquerda

também tem um fator positivo

ROTA

ROTA

Ç

Ç

ÃO SIMPLES

ÃO SIMPLES

À

À

DIREITA

DIREITA

Rota

Rota

ç

ç

ão Direita

ão Direita

120

110

150

100

80

130

200

Rota

Rota

ç

ç

ão Direita

ão Direita

120

110

150

100

80

130

200

+1

0

0

0

+2

+1

0

(7)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Rota

Rota

ç

ç

ão Direita

ão Direita

120

110

150

100

80

130

200

+1

0

0

0

+2

+1

0

Rotação

Direita

?

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Rota

Rota

ç

ç

ão Direita

ão Direita

120

110

Rotação

Direita

150

100

80

130

200

120

100

150

80

110

130

200

+1

+2

+1

0

0

0

0

0

0

0

0

0

0

0

Balanceamento de

Balanceamento de

Á

Á

rvore AVL com Rota

rvore AVL com Rota

ç

ç

ão

ão

p

u

T1

T2

T3

Nó p é a raiz de transformação

T1, T2, T3 e T4 são subárvores

(vazias ou não)

)

Rotação Simples

• à direita

Rota

Rota

ç

ç

ão Direita

ão Direita

42

15

88

6

27

+1

0

0

0

0

Incluir 4

42

15

88

6

27

+2

0

+1

+1

0

4

0

(8)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Rota

Rota

ç

ç

ão Direita

ão Direita

Rotação

Direita

42

15

88

6

27

+2

0

+1

+1

0

4

0

15

6

42

4

27

0

0

+1

0

0

88

0

Ajustado!

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Rota

Rota

ç

ç

ão Direita

ão Direita

p

u

T1

T2

T3

u

p

T2

T3

T1

Rotação

Direita

Rota

Rota

ç

ç

ão Direita

ão Direita

p

u

T1

T2

T3

u

p

T2

T3

T1

Rotação

Direita

procedure rotacao_direita(var pt: pno);

var ptu: pno;

begin

ptu:= pt^.esq;

pt^.esq:= ptu^.dir;

ptu^.dir:= pt;

pt^.bal:= 0;

pt:= ptu;

end;

Rota

Rota

ç

ç

ão Simples

ão Simples

ESQUERDA

ESQUERDA

Toda vez que uma subárvore fica com um

fator:

• negativo e sua subárvore da direita

também tem um fator negativo

ROTA

(9)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Rota

Rota

ç

ç

ão Esquerda

ão Esquerda

120

100

130

150

200

80

110

-1

0

0

0

0

-2

-1

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Rota

Rota

ç

ç

ão Esquerda

ão Esquerda

120

100

130

150

200

80

110

Rotação

Esquerda

?

-1

0

0

0

0

-2

-1

Rota

Rota

ç

ç

ão Esquerda

ão Esquerda

120

100

130

150

200

80

110

Rotação

Esquerda

120

100

150

80

110

130

200

Rota

Rota

ç

ç

ão Esquerda

ão Esquerda

42

15

88

94

67

-1

0

0

0

0

Incluir 90

42

15

88

94

67

-2

-1

0

0

1

90

0

(10)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Rota

Rota

ç

ç

ão Esquerda

ão Esquerda

88

42

94

90

67

0

+1

0

0

0

15

0

42

15

88

94

67

-2

-1

0

0

1

90

0

Rotação

Esquerda

Ajustado!

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Rota

Rota

ç

ç

ão Esquerda

ão Esquerda

z

p

T1

T2

T3

p

z

T2

T3

T1

Rotação

Esquerda

Rota

Rota

ç

ç

ão Esquerda

ão Esquerda

z

p

T1

T2

T3

p

z

T2

T3

T1

Rotação

Esquerda

procedure rotacao_esquerda(var pt: pno);

var ptu: pno;

begin

ptu:= pt^.dir;

pt^.dir:= ptu^.esq;

ptu^.esq:= pt;

pt^.bal:= 0;

pt:= ptu;

end;

Rota

Rota

ç

ç

ão Dupla

ão Dupla

DIREITA

DIREITA

Toda vez que uma subárvore fica com um fator:

• positivo e sua subárvore da esquerda tem um fator

negativo

ROTA

(11)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

120

110

150

80

100

130

200

Rota

Rota

ç

ç

ão Dupla Direita

ão Dupla Direita

+1

+2

-1

0

0

0

0

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

120

110

150

80

100

130

200

Rota

Rota

ç

ç

ão Dupla Direita

ão Dupla Direita

Rotação

Dupla

Direita

?

+1

+2

-1

0

0

0

0

DIREITA

ESQUERDA

120

110

150

80

100

130

200

Rota

Rota

ç

ç

ão Dupla Direita

ão Dupla Direita

120

110

150

100

80

130

200

120

100

150

Rota

Rota

ç

ç

ão Dupla Direita

ão Dupla Direita

p

u

T1

T2

T4

v

p

T3

T4

Rotação

Esquerda

v

T3

u

T1

T2

p

v

T3

T1

T4

u

T2

Rotação

Direita

(12)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Rota

Rota

ç

ç

ão Dupla Direita

ão Dupla Direita

p

u

T1

T2

T4

v

p

T3

T4

Rotação

Dupla

Direita

v

T3

u

T1

T2

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Rota

Rota

ç

ç

ão Dupla Direita

ão Dupla Direita

procedure rotacao_esquerda_direita (var pt: pno);

var ptu, ptv: pno;

begin

ptu:= pt^.esq;

ptv:= ptu^.dir;

ptu^.dir:= ptv^.esq;

ptv^.esq:= ptu;

pt^.esq:= ptv^.dir;

ptv^.dir:= pt;

if ptv^.bal = -1

then pt^.bal:= 1

else pt^.bal:= 0;

if ptv^.bal = 1

then ptu^.bal:= -1;

else ptu^.bal:= 0;

pt:= ptv;

end;

Rota

Rota

ç

ç

ão Dupla Direita

ão Dupla Direita

42

15

88

27

6

+1

0

0

0

0

Incluir 34

42

15

88

27

6

+2

0

-1

-1

0

34

0

Rota

Rota

ç

ç

ão Dupla Direita

ão Dupla Direita

42

15

88

27

6

+2

0

-1

-1

0

34

0

Rotação

Dupla

Direita

0

PASSO 1

Rotação Esquerda

42

27

88

34

15

+2

0

+1

+1

6

0

(13)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Rota

Rota

ç

ç

ão Dupla Direita

ão Dupla Direita

Rotação

Dupla

Direita

PASSO 2

Rotação Direita

42

27

88

34

15

+2

0

+1

+1

0

6

0

27

15

42

34

0

0

+1

0

6

0

88

0

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Rota

Rota

ç

ç

ão Dupla

ão Dupla

ESQUERDA

ESQUERDA

Toda vez que uma subárvore fica com um fator:

• negativo e sua subárvore da direita tem um fator

positivo

ROTA

ROTA

Ç

Ç

ÃO DUPLA

ÃO DUPLA

À

À

ESQUERDA

ESQUERDA

120

100

130

200

150

80

110

Rota

Rota

ç

ç

ão Dupla Esquerda

ão Dupla Esquerda

-1

-2

+1

0

0

0

0

120

100

130

200

150

80

110

Rota

Rota

ç

ç

ão Dupla Esquerda

ão Dupla Esquerda

Rotação

Dupla

Esquerda

?

-1

-2

+1

0

0

0

0

(14)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

DIREITA

120

100

130

200

150

80

110

Rota

Rota

ç

ç

ão Dupla Esquerda

ão Dupla Esquerda

ESQUERDA

120

100

130

150

200

80

110

120

100

150

80

110

130

200

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

120

100

130

200

150

80

110

Rota

Rota

ç

ç

ão Dupla Esquerda

ão Dupla Esquerda

Rotação

Dupla

Esquerda

120

100

150

80

110

130

200

Rota

Rota

ç

ç

ão Dupla Esquerda

ão Dupla Esquerda

p

z

T4

T2

T1

y

T3

ROTAÇÃO

DIREITA

p

y

T2

T2

T1

z

T3

y

z

T3

T4

p

T1

T2

ROTAÇÃO

ESQUERDA

Rota

Rota

ç

ç

ão Dupla Esquerda

ão Dupla Esquerda

p

z

T4

T2

T1

y

z

T3

T4

Rotação

Dupla

Esquerda

y

T3

p

T1

T2

(15)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Rota

Rota

ç

ç

ão Dupla Esquerda

ão Dupla Esquerda

procedure rotacao_direita_esquerda (var pt: pno);

var ptu, ptv: pno;

begin

ptu:= pt^.dir;

ptv:= ptu^.esq;

ptu^.esq:= ptv^.dir;

ptv^.dir:= ptu;

pt^.dir:= ptv^.esq;

ptv^.esq:= pt;

if ptv^.bal = 1

then pt^.bal:= -1

else pt^.bal:= 0;

if ptv^.bal = -1

then ptu^.bal:= 1;

else ptu^.bal:= 0;

pt:= ptv;

end;

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Exemplos de Rota

Exemplos de Rota

ç

ç

ão

ão

• Re-estruturar a árvore fazendo a rotação a partir do nó a

esquerda, imediato a raiz.

– Repetir o procedimento até que a árvore fique balanceada

• não precisa ser AVL

82

50

44

42

27

17

5

Exemplos de Rota

Exemplos de Rota

ç

ç

ão (Esquerda e Direita)

ão (Esquerda e Direita)

• Considere a árvore abaixo, no qual 12 está entre 9 e 15.

– Fazendo a rotação direita em 9, onde ficará 12?

– Terminada a rotação a direita, tente agora a rotação a esquerda

em 15.

15

9

22

4

12

Exemplos de Rota

Exemplos de Rota

ç

ç

ão (dentro da

ão (dentro da

á

á

rvore)

rvore)

• Considere a árvore abaixo:

– Execute a rotação em 15. O que acontece com o nó 42 (que é pai de 15)?

– Execute agora a operação oposta em 42. O que acontece com 15 (que é pai

de 42)?

50

23

42

17

30

43

15

6

(16)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

• Mostre que a árvore abaixo pode ser completamente balanceada usando rotações

a direita e a esquerda.

• Vamos ver quem consegue estruturar a árvore com o caminho mais curto da raiz

até as folhas (altura da árvore)?

– Dica: uma abordagem é fazer o balanceamento sobre a raiz e recursivamente nas suas

subárvores.

82

100

50

42

27

107

98

140

120

166

44

17

5

2

12

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

http://www.cs.queensu.ca/home/jstewart/applets/bst/bst-rotation.html

Exemplos de Rota

Exemplos de Rota

ç

ç

ão

ão

Inser

Inser

ç

ç

ão

ão

de

de

Á

Á

rvores

rvores

AVL

AVL

220

120

80

100

300

150

260

400

110

130

200

250

270

350

500

Excluir 500

Inserir 140

Inser

Inser

ç

ç

ão

ão

de

de

Á

Á

rvores

rvores

AVL

AVL

220

120

80

100

300

150

260

400

110

130

200

250

270

350

140

(17)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

AVL

AVL

árvores

FATOR(1)

são chamadas

Árvores AVL

Adelson-Velskii e Landis (1962)

Uma

á

á

rvore AVL é uma árvore binária

rvore AVL

de pesquisa (ABP) construída de tal

modo que a altura de sua subárvore

direita difere da altura da subárvore

esquerda de no

m

m

á

á

ximo 1.

ximo 1

[-1,1]

FATOR (1)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

AVL

AVL

-

-

Rota

Rota

ç

ç

ões

ões

)

Rotação Dupla

• à direita

• raiz fator positivo

• subárvore fator negativo

• à esquerda

• raiz – fator negativo

• subárvore – fator positivo

)

Rotação Simples

• à direita

• raiz fator positivo

• subárvore fator positivo

• à esquerda

• raiz – fator negativo

• subárvore – fator negativo

Rota

Rota

ç

ç

ão Direita

ão Direita

120

110

Rotação

Direita

150

100

80

130

200

120

100

150

80

110

130

200

+1

+2

+1

0

0

0

0

0

0

0

0

0

0

0

Rota

Rota

ç

ç

ão Esquerda

ão Esquerda

120

100

130

150

200

80

110

Rotação

Esquerda

-1

0

0

0

0

-2

-1

120

100

150

80

110

130

200

0

0

0

0

0

0

0

(18)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

120

110

150

80

100

130

200

Rota

Rota

ç

ç

ão Dupla Direita

ão Dupla Direita

Rotação

Dupla

Direita

?

+1

+2

-1

0

0

0

0

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

DIREITA

ESQUERDA

120

110

150

80

100

130

200

Rota

Rota

ç

ç

ão Dupla Direita

ão Dupla Direita

120

110

150

100

80

130

200

120

100

150

80

110

130

200

120

100

130

200

150

80

110

Rota

Rota

ç

ç

ão Dupla Esquerda

ão Dupla Esquerda

Rotação

Dupla

Esquerda

?

-1

-2

+1

0

0

0

0

DIREITA

120

100

130

200

150

80

110

Rota

Rota

ç

ç

ão Dupla Esquerda

ão Dupla Esquerda

ESQUERDA

120

100

130

150

200

80

110

120

100

150

80

110

130

200

(19)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Exerc

Exerc

í

í

cios

cios

• Inserir em AVL, refazendo a árvore quando tiver

rotação e anotando as rotações realizadas:

–50, 40, 30, 45, 47, 55, 56, 1, 2, 3

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Inser

Inser

ç

ç

ão

ão

de nodo

de nodo

s

s

em

em

á

á

rvores AVL

rvores AVL

Alguns Problemas

Alguns Problemas

• Percorre-se a árvore verificando se a chave já existe ou

não

– Em caso positivo, encerra a tentativa de inserção

– Caso contrário, a busca encontra o local correto de inserção do

novo nó

• Verifica-se se a inclusão tornará a árvore desbalanceada

– Em caso negativo, o processo termina

– Caso contrário, deve-se efetuar o balanceamento da árvore

• Descobre-se qual a operação de rotação a ser executada

• Executa-se a rotação

Inser

Inser

ç

ç

ão

ão

de nodo

de nodo

s

s

em

em

á

á

rvores AVL

rvores AVL

• Como saber se a árvore está balanceada?

– Verificando se existe um nó “desregulado”

• Como saber se um nó está desregulado?

– Determina-se as alturas de suas sub-árvores e subtrai-se uma da

outra

• Procedimento muito lento!

• Como ser mais eficiente?

– Para cada nó v de uma árvore, armazena-se uma variável

balanço, onde

balanço(v) = altura(v

.esq)- altura(v

.dir)

Inser

Inser

ç

ç

ão

ão

de

de

nodo

nodo

s

s

em

em

á

á

rvores AVL

rvores AVL

Alguns problemas...

Alguns problemas...

• Que valores são possíveis para balanço?

– -1, 0, 1

• De novo, como ser eficiente no cálculo do balanço?

– Dado q, como o nodo inserido.

– Se q pertencer à sub-árvore esquerda de v e essa inclusão

resultar em aumento na altura da sub-árvore, então

balanço(v) := balanço(v) + 1

• Se balanço(v) = 2, então v está desregulado

– Se q pertencer à sub-árvore direita de v e essa inclusão resultar

em aumento na altura da sub-árvore, então

balanço(v) := balanço(v) - 1

(20)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Inser

Inser

ç

ç

ão

ão

de

de

nodo

nodo

s

s

em

em

á

á

rvores AVL

rvores AVL

Alguns problemas...

Alguns problemas...

• Mas, quando é que a inclusão de q causa aumento

na altura da sub-árvore v?

• Suponha que q seja incluído na sub-árvore à

esquerda de v.

• Para q incluído na sub-árvore à direita,

considera-se o caso simétrico.

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Inser

Inser

ç

ç

ão

ão

de

de

nodo

nodo

s

s

em

em

á

á

rvores AVL

rvores AVL

INSER

INSER

Ç

Ç

ÃO A DIREITA

ÃO A DIREITA

• Se, antes da inclusão:

Balan

Balan

ç

ç

o(v)= 1

o(v)= 1, então Balanço(v) se tornará 0

• altura da árvore não foi alterada

• Por consequência, altura dos outros nós no caminho até a raiz, não se altera

também.

Balan

Balan

ç

ç

o(v)= 0

o(v)= 0, então Balanço(v) se tornará -1

• altura da árvore foi modificada

• Por consequência, altura dos outros nós no caminho até a raiz, pode ter sido

alterada também.

• Repetir o processo (recursivamente), com v substituído por seu pai.

Balan

Balan

ç

ç

o(v)=

o(v)=

-

-

1

1, então Balanço(v) se tornará -2

• altura da árvore foi modificada e o nó está desregulado

• Rotação correta deve ser empregada.

• Como a árvore será redesenhada, não é necessário verificar os outros nós.

Inser

Inser

ç

ç

ão

ão

de nodo

de nodo

s

s

em

em

á

á

rvores AVL

rvores AVL

INSER

INSER

Ç

Ç

ÃO A DIREITA

ÃO A DIREITA

120

100

150

1

Inser

Inser

ç

ç

ão

ão

de nodo

de nodo

s

s

em

em

á

á

rvores AVL

rvores AVL

INSER

INSER

Ç

Ç

ÃO A DIREITA

ÃO A DIREITA

120

100

150

1

120

100

150

0

(21)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Inser

Inser

ç

ç

ão

ão

de nodo

de nodo

s

s

em

em

á

á

rvores AVL

rvores AVL

INSER

INSER

Ç

Ç

ÃO A DIREITA

ÃO A DIREITA

120

100

150

1

120

100

150

0

155

120

150

0

155

-1

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Inser

Inser

ç

ç

ão

ão

de

de

nodo

nodo

s

s

em

em

á

á

rvores AVL

rvores AVL

INSER

INSER

Ç

Ç

ÃO A ESQUERDA

ÃO A ESQUERDA

• Se, antes da inclusão:

Balan

Balan

ç

ç

o(v)=

o(v)=

-

-

1

1, então Balanço(v) se tornará 0

• altura da árvore não foi alterada

• Por consequência, altura dos outros nós no caminho até a raiz, não se altera

também.

Balan

Balan

ç

ç

o(v)= 0

o(v)= 0, então Balanço(v) se tornará 1

• altura da árvore foi modificada

• Por consequência, altura dos outros nós no caminho até a raiz, pode ter sido

alterada também.

• Repetir o processo (recursivamente), com v substituído por seu pai.

Balan

Balan

ç

ç

o(v)= 1

o(v)= 1, então Balanço(v) se tornará 2

• altura da árvore foi modificada e o nó está desregulado

• Rotação correta deve ser empregada.

• Como a árvore será redesenhada, não é necessário verificar os outros nós.

Inser

Inser

ç

ç

ão

ão

de nodo

de nodo

s

s

em

em

á

á

rvores AVL

rvores AVL

INSER

INSER

Ç

Ç

ÃO A ESQUERDA

ÃO A ESQUERDA

120

100

150

-1

Inser

Inser

ç

ç

ão

ão

de nodo

de nodo

s

s

em

em

á

á

rvores AVL

rvores AVL

INSER

INSER

Ç

Ç

ÃO A ESQUERDA

ÃO A ESQUERDA

120

100

150

-1

120

100

150

0

(22)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Inser

Inser

ç

ç

ão

ão

de nodo

de nodo

s

s

em

em

á

á

rvores AVL

rvores AVL

INSER

INSER

Ç

Ç

ÃO A ESQUERDA

ÃO A ESQUERDA

120

100

150

-1

120

100

150

0

140

120

110

0

100

1

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Inser

Inser

ç

ç

ão

ão

de

de

nodo

nodo

s

s

em

em

á

á

rvores AVL

rvores AVL

Proc InsereAVL (var a:Arvore; x:Info; ok:lógico);

{ Insere nodo em uma árvore AVL, onde A representa a raiz da árvore,

x, a chave a ser inserida e h a altura da árvore }

se a = nil

então início

InicioNo(a,x);

ok:=verdadeiro

fim;

senão

se x = a^.Info então pare

se x < a^.chave então início

InsereAVL(a^.esq,x,ok);

se ok então

caso a^.bal seja

1: a^.bal := 0; ok := falso;

0: a^.bal := -1;

-1: Caso1(a,ok); fim;

senão início

InsereAVL(a^.dir,x,ok);

se ok então

caso a^.bal seja

-1: a^.bal := 0; ok := falso;

0: a^.bal := 1

1: Caso2(a,ok); fim;

fim;

Inser

Inser

ç

ç

ão

ão

de

de

nodo

nodo

s

s

em

em

á

á

rvores AVL

rvores AVL

Proc InícioNo (var a:Arvore, x:Info);

{ Aloca o novo nodo }

início

aloca(a);

a^.esq := nil;

a^.dir := nil;

a^.chave := x;

a^.bal := 0;

fim;

Inser

Inser

ç

ç

ão

ão

de

de

nodo

nodo

s

s

em

em

á

á

rvores AVL

rvores AVL

Proc Caso1 (var a:Arvore, ok:lógico);

{ Faz balanceamento da árvore}

início

ptu = a^.esq;

se ptu^.bal = -1

então início

a^.esq := ptu^.dir; ptu^.dir := a;

a^.bal := 0;

a := ptu;

fim;

senão início

ptv := ptu^.dir;

ptu^.dir := ptv^.esq; ptv^.esq := ptu;

a^.esq := ptv^.dir; ptv^.dir := a;

se ptv^.bal = -1

então a^.bal := 1;

senão a^.bal := 0;

se ptv^.bal = 1

então ptu^.bal := -1;

senão ptu^.bal := 0;

a := ptv;

fim;

a^.bal := 0;

ok := falso;

fim;

(23)

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Inser

Inser

ç

ç

ão

ão

de

de

nodo

nodo

s

s

em

em

á

á

rvores AVL

rvores AVL

Proc Caso2 (var a:Arvore, ok:lógico);

{ Faz balanceamento da árvore}

início

ptu = a^.dir;

se ptu^.bal = 1

então início

a^.dir := ptu^.esq;

ptu^.esq := a;

a^.bal := 0;

a := ptu;

fim;

senão início

ptv := ptu^.esq;

ptu^.esq := ptv^.dir; ptv^.dir := ptu;

a^.dir := ptv^.esq; ptv^.esq := a;

se ptv^.bal = 1

então a^.bal := -1;

senão a^.bal := 0;

se ptv^.bal = -1

então ptu^.bal := 1;

senão ptu^.bal := 0;

a := ptv;

fim;

a^.bal := 0;

ok := falso;

fim;

Renata de Matos Galante, Clesio S. Santos, Nina Edelweiss e Luciana P. Nedel Estruturas de Dados - Àrvores

Remo

Remo

ç

ç

ão

ão

de

de

nodo

nodo

s

s

em

em

á

á

rvores AVL

rvores AVL

• Caso parecido com as inclusões.

• No entanto, nem sempre se consegue solucionar

com uma única rotação...

• http://webpages.ull.es/users/jriera/Docencia/AVL/A

VL%20tree%20applet.htm

Referências

Documentos relacionados

Por conseguinte, o fabricante não assume a responsabilidade por quaisquer efeitos adversos que possam ocorrer com o manuseamento, armazenamento, aplicação, utilização, utilização

Possui pleocroísmo forte castanho-avermelhado (X= absorção fraca, cor marrom pálido; Y, Z= absorção forte, cor marrom escuro) e contém inclusões de opacos ou

Os animais adquiridos somente serão liberados para retirada física e entrega aos senhores compradores, após a assinatura dos contratos e respectiva Nota Promissória e

Ao discorrerem sobre o conhecimento pedagógico, como um desdobramen- to do campo geral de significação da Pedagogia, os professores formadores colocaram em movimento, por meio

1) Houve valorização e reconhecimento da cultura local e dos recursos do ambiente onde vivem os adolescentes. 2) Descobriu-se e se reconheceu adolescentes competentes nas

A .- Neste ato é admitido na sociedade o Sr NEI MONTEIRO FERRElRA, brasileiro, natural do Estado do Rio de Janeiro, nascido em 07 de agosto de 1948, filho de Manoel Ferreira Junior

As equipes têm de 10 a 12 semanas para realizar a pesquisa, desenvolver uma solução inovadora para o problema identificado, elaborar sua apresentação e construir seu robô para

Ao acessar algum livro que seja da Biblioteca Virtual da Pearson, o sistema exigirá um cadastro externo que você deverá fazer. Basta preencher os dados solicitados para criar