Top Banner
Aula 17: ´ Arvores AVL David D´ eharbe Programa de P´ os-gradua¸c˜ ao em Sistemas e Computa¸ ao Universidade Federal do Rio Grande do Norte Centro de Ciˆ encias Exatas e da Terra Departamento de Inform´ atica e Matem´ atica Aplicada 20 de abril de 2015 Download me from http://ufrn.academia.edu/DavidDeharbe. 1 / 33
41

Árvores AVL

Apr 01, 2023

Download

Documents

Letícia Malloy
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Árvores AVL

Aula 17: Arvores AVL

David DeharbePrograma de Pos-graduacao em Sistemas e Computacao

Universidade Federal do Rio Grande do NorteCentro de Ciencias Exatas e da Terra

Departamento de Informatica e Matematica Aplicada

20 de abril de 2015

Download me from http://ufrn.academia.edu/DavidDeharbe.

1 / 33

Page 2: Árvores AVL

Plano da aula

5(0)

3(0)

5(0)

8(−1)

7(0)

Introducao

Propriedades

Operacoes

2 / 33

Page 3: Árvores AVL

Arvores AVLIntroducao

I Em 1962, Adelson-Velskii e Landis inventaram essa estruturade dados:

I busca em O(lg n),I remocao em Θ(lg n) eI insercao em Θ(lg n)

I uma arvore AVL e uma arvore binaria de busca+restricao estrutural: altura das sub-arvores

I apos insercao e remocao, a arvore pode se auto-balancearcaso medio: Θ(1), pior caso: Θ(lg n)

I a altura da arvore e Θ(lg〈numero de nos〉)

3 / 33

Page 4: Árvores AVL

Arvores AVLEspecificacao

avl(x) ≡ bst(x)∧( x = Nil∨

( |α(x . left)− α(x .right)| ≤ 1 ∧avl(x . left) ∧ avl(x .right) ) )

I arvore binaria de busca, e

I arvore vazia, ou

I para qualquer sub-arvore, a diferenca de altura entre as duassub-arvores nao ultrapassa um (1).

4 / 33

Page 5: Árvores AVL

Implementacao

I x .bal ∈ {−1, 0, 1}: balanco da arvore enraizada em x

I x .bal = α(x .right)− α(x . left)

5 / 33

Page 6: Árvores AVL

Ilustracao

Colecao: 2, 3, 5, 5, 7, 8

I Uma arvore AVL

5

3

2 5

7

8

6 / 33

Page 7: Árvores AVL

Ilustracao

Colecao: 2, 3, 5, 5, 7, 8

I Uma arvore binaria de busca que nao e AVL

2

3

7

5

5

8

6 / 33

Page 8: Árvores AVL

Exercıcio

1. Desenhar a estrutura de arvores AVL com o menor numero denos possıvel com alturas de 0 ate 5.

2. Como definir a relacao entre a altura e o menor numero denos possıvel? e o maior?

7 / 33

Page 9: Árvores AVL

Propriedade de altura

φ =1 +√

5

2

(numero de ouro)

TeoremaUma arvore AVL, enraizada em x, e com n nos tem a sua altura talque

α(x) ≤ logφ(√

5 · (n + 2))− 2 ≈ 1, 44 ln(n + 1)− 0, 328

8 / 33

Page 10: Árvores AVL

Propriedade de altura

Demonstracao.

(Esbouco) Seja min a funcao que a uma dada altura a associa onumero mınimo de nos em uma arvore AVL de altura a:

min 0 = 0,min 1 = 1,min n = 1 + min(n − 1) + min(n − 2)

As propriedades da funcao min tem como consequencia o teoremaenunciado. Nao entraremos mais em detalhes sobre esteassunto.

8 / 33

Page 11: Árvores AVL

Operacao de busca

I A busca nao modifica a arvore.

I O algoritmo de busca em arvores AVL e o mesmo da buscaem arvores binarias de busca qualquer.

9 / 33

Page 12: Árvores AVL

Operacao de insercao

1. insercao em arvore binaria de busca

2. se necessario, re-balanceamento

10 / 33

Page 13: Árvores AVL

Re-balanceamentoInsercao

aparece desequilibro quando:

I ha pelo menos um no entre a raiz e o no criado tal |n.bal | > 1apos a insercao

I seja n o no de maior nıvel (mais proximo do no inserido) comdesequilibro

I antes da insercao: n.bal = 1 ou n.bal = −1.

I n possui pelo uma sub-arvore

I com altura maior que a outra sub-arvoreI logo nao e vazia

I analise por caso:

1. sub-arvore esquerda E , ou2. sub-arvore direita D

11 / 33

Page 14: Árvores AVL

Insercao em ERe-balanceamento

α(E ) = α(D) + 1, E 6= Nila : α(D) (e α(E ) = a + 1),

ne : a raiz de E ,EE : a sub-arvore esquerda de ne ,ED : a sub-arvore direita de ne .

Logo, a e a altura da sub-arvore mais alta entre EE e ED.

1. insercao: em EE , ou

2. insercao: em ED.

12 / 33

Page 15: Árvores AVL

Insercao em EERe-balanceamento

α(E ) = α(D) + 1, E 6= Nila : α(D) (e α(E ) = a + 1),

ne : a raiz de E ,EE : a sub-arvore esquerda de ne ,ED : a sub-arvore direita de ne .

insercao em EE

I altura de EE antes: a

I altura de EE depois: a + 1

I altura de ED antes: a ou a− 1

I se fosse a− 1, ne estaria desbalanceadoI contradiz hipotese que n e o no desbalanceado de maior nıvelI altura de ED e a

13 / 33

Page 16: Árvores AVL

Insercao em EE : ilustracaoRe-balanceamento

6

?

a + 1

rnee

�������

CCCCCCC

EE ′

6c

r

�������

CCCCCCC

ED

6

?

a

r

�������

CCCCCCC

D

6

?

a���

@@@rne

E��

���

PPPP

PrnS

rotacao simples a direita

14 / 33

Page 17: Árvores AVL

Rotacao simples a direitaRemanejamento

6

?

a + 1

r

������

CCCCCC

EE ′

6c

r

������

CCCCCC

ED

6

?

a

r

������

CCCCCC

D

6

?

a��@@rne����

PPPP

rn6

?

a + 1

r

������

CCCCCC

EE ′

6c

6

?

a

r

������

CCCCCC

ED

r

������

CCCCCC

D

6

?

a + 1

�� PPrn ```

rne

Antes Depois

15 / 33

Page 18: Árvores AVL

Rotacao simples a direita: algoritmoRemanejamento

Rotate-Simple-Right(n)

1 ne = n. left2 n. left = ne.right3 ne.right = n4 ne.bal = 05 n.bal = 06 return ne

I o parametro e a raiz da sub-arvore a remanejar

I o resultado e a raiz da sub-arvore apos o remanejamento

Θ(1) operacoes.

16 / 33

Page 19: Árvores AVL

Rotacao simples a direita: algoritmoRemanejamento

Rotate-Simple-Right(n)

1 ne = n. left2 n. left = ne.right3 ne.right = n4 ne.bal = 05 n.bal = 06 return ne

Exercıcio:

1. termine o algoritmo com calculo de .up.

2. argumente que a arvore resultante e uma arvore binaria debusca

16 / 33

Page 20: Árvores AVL

Insercao em EDRe-balanceamento

α(E ) = α(D) + 1, E 6= Nila : α(D) (e α(E ) = a + 1),

ne : a raiz de E ,EE a sub-arvore esquerda de ne ,ED a sub-arvore direita de ne .

insercao em ED

I altura de ED antes: a

I altura de ED depois: a + 1

I altura de EE antes: a ou a− 1

I se fosse a− 1, ne estaria desbalanceadoI contradiz hipotese que n e o no desbalanceado de maior nıvelI altura de EE e a

17 / 33

Page 21: Árvores AVL

Insercao em EDRe-balanceamento

6

?

a

r

�������

CCCCCCC

EE

rned

�������

CCCCCCC

ED ′

6c

6

?

a + 1

r

�������

CCCCCCC

D

6

?

a���

@@@rne

E��

����

PPPP

PPrnS

rotacao dupla a direita

18 / 33

Page 22: Árvores AVL

Rotacao dupla a direitaRemanejamento

6

?

a

r

������

CCCCCC

EE

6

?

a

r

������

CCCCCC

EDE ′

6c

r

������

CCCCCC

EDD ′

6

?

a− 1

r

������

CCCCCC

D

6

?

a

�� PPrned ```

rne������ XXXXXX

rn

antes

6

?

a

r

������

CCCCCC

EE

6

?

a

r

������

CCCCCC

EDE ′

�� PPrne

6

?

a− 1

r

������

CCCCCC

EDD ′

6

?

a

r

������

CCCCCC

D

�� PPrn��

��PP

PPrned

depois

19 / 33

Page 23: Árvores AVL

Rotacao dupla a direita: algoritmoRemanejamento

Rotate-Double-Right(n)

ne = n. leftned = ne.rightn. left = ned .rightne.right = ned . leftned . left = nened .right = n

if ned .bal == 1n.bal = 0ne.bal = −1

else if ned .bal == 0n.bal = 0ne.bal = 0

elsen.bal = 1ne.bal = 0ned .bal = 0return ned

I o parametro e a raiz da sub-arvore a remanejarI o resultado e a raiz da sub-arvore apos o remanejamento

Θ(1) operacoes.20 / 33

Page 24: Árvores AVL

Rotacao dupla a direita: algoritmoRemanejamento

Rotate-Double-Right(n)

ne = n. leftned = ne.rightn. left = ned .rightne.right = ned . leftned . left = nened .right = n

if ned .bal == 1n.bal = 0ne.bal = −1

else if ned .bal == 0n.bal = 0ne.bal = 0

elsen.bal = 1ne.bal = 0ned .bal = 0return ned

Exercıcio:

1. termine o algoritmo com calculo de .up.2. argumente que a arvore resultante e uma arvore binaria de

busca 20 / 33

Page 25: Árvores AVL

Insercao em DRe-balanceamento

I A situacao e simetrica a insercao em E .

I A analise e similar.

I O tratamento e simetrico, com 2 sub-casos (DD e DE ).

21 / 33

Page 26: Árvores AVL

Insercao em DD: ilustracaoRe-balanceamento

?

6

a + 1

r

CCCCCCC

�������

DD

6c

rnde

CCCCCCC

�������

DE

6

?

a

r

CCCCCCC

�������

D

6

?

a@@@

���

rnd

DPP

PPP

�����rn

S

rotacao simples a esquerda

22 / 33

Page 27: Árvores AVL

Insercao em DERe-balanceamento

6

?

a

rndd

CCCCCCC

�������

DD

r

CCCCCCC

�������

DE ′

6c

6

?

a + 1

r

CCCCCCC

�������

E

6

?

a@

@@

���rnd

DPP

PPPP

����

��rnS

rotacao dupla a esquerda

23 / 33

Page 28: Árvores AVL

Insercao: algoritmo

n : raiz da sub-arvore onde a insercao ocorrera (ref)v : valor a inserir→ Booleano indicando se a altura aumentou

Insert(n, v)

1 if n == Nil2 n = Make-Avl-Node(v ,Nil,Nil, 0)3 return True4 if n.val == v5 return False6 if v < n.val7 inc = Insert(n. left, v)8 if inc

〈tratamento de incremento de altura na sub-arvore 〉9 else · · ·

24 / 33

Page 29: Árvores AVL

Insercao: algoritmo

n : raiz da sub-arvore onde a insercao ocorrera (ref)v : valor a inserir→ Booleano indicando se a altura aumentou

1 if inc2 if n.bal == 03 n.bal = −14 return True5 elseif n.bal == 116 n.bal = 07 return False8 else9 if n. left.bal == −1

10 n = Rotate-Simple-Right(n)11 else n = Rotate-Double-Right(n)12 return False13 else 〈Insercao na sub-arvore direita〉

24 / 33

Page 30: Árvores AVL

Insercao: algoritmo

n : raiz da sub-arvore onde a insercao ocorrera (ref)v : valor a inserir→ Booleano indicando se a altura aumentou

Exercıcios:

1. escrever o tratamento correspondente a v > n.val .

2. verifique que, quando ha remanejamento, a altura da arvoreapos a insercao e a mesma da altura antes da insercao.

24 / 33

Page 31: Árvores AVL

RemocaoIntroducao

I remove valor como em arvore binaria de busca

I reequilibrar a arvore para reestabelecer a propriedade AVL

I mais de uma rotacao pode ser necessariaO(lg n) no pior caso

25 / 33

Page 32: Árvores AVL

RemocaoExemplo

47(1)q���� XXXX32(−1)q��@@

68(−1)q��@@5(1)q

CCCC

40(0)q 60(−1)q����

CCCC

88(1)qCCCC15(0)q 54(−1)q

����

61(0)q 90(0)q50(0)q

40(1)q����� XXXXX32(−2)q�

��

68(−1)q�

��

@@@5(1)q

CCCCC

60(−1)q�����

CCCCC

88(1)qCCCCC15(0)q 54(−1)q

�����

61(0)q 90(0)q50(0)q

(1) arvore inicial (2) apos remocao de 47

26 / 33

Page 33: Árvores AVL

RemocaoExemplo

40(1)q���� XXXX32(−2)q��

68(−1)q��@@5(1)q

CCCC

60(−1)q����

CCCC

88(1)qCCCC15(0)q 54(−1)q

����

61(0)q 90(0)q50(0)q

40(2)q���� XXXX15(0)q��@@

68(−1)q��@@5(0)q 32(0)q 60(−1)q

����

CCCC

88(1)qCCCC54(−1)q

����

61(0)q 90(0)q50(0)q

apos remocao de 47 apos rotacao dupla a direita de 32

27 / 33

Page 34: Árvores AVL

RemocaoExemplo

40(2)q���� XXXX15(0)q��@@

68(−1)q��@@5(0)q 32(0)q 60(−1)q

����

CCCC

88(1)qCCCC54(−1)q

����

61(0)q 90(0)q50(0)q 5(0)q 32(0)q 50(0)q 90(0)q

15(0)q����

CCCC

54(−1)q����

61(0)q 88(1)qCCCC

40(0)q��@@

68(1)q��@@

60(0)q���� XXXX

rotacao dupla a direita de 32 rotacao dupla a esquerda de 40

28 / 33

Page 35: Árvores AVL

Algoritmo de remocaoPrincipais etapas

Entradas: a raiz n de uma arvore AVL, um valor v

1. encontrar o valor v em n

2. se a busca for mal sucedida: termino

3. remover o no m com o valor vI no folha: remover no mI no interno com uma sub-arvore vazia: remover no mI no interno sem sub-arvore vazia: remover no com valor mınimo

v ′ da sub-arvore direita, substituir v por v ′ em m.

4. possivelmente reequilibrar a arvore

algoritmos auxiliares:

I Remove-Min

I Balance-Right, Balance-Left: rebalanceamento dasub-arvore direita, esquerda

29 / 33

Page 36: Árvores AVL

Algoritmo de remocaoPrincipais etapas

Entradas: a raiz n de uma arvore AVL, um valor v

1. encontrar o valor v em n

2. se a busca for mal sucedida: termino

3. remover o no m com o valor vI no folha: remover no mI no interno com uma sub-arvore vazia: remover no mI no interno sem sub-arvore vazia: remover no com valor mınimo

v ′ da sub-arvore direita, substituir v por v ′ em m.

4. possivelmente reequilibrar a arvore

algoritmos auxiliares:

I Remove-Min

I Balance-Right, Balance-Left: rebalanceamento dasub-arvore direita, esquerda

29 / 33

Page 37: Árvores AVL

Remocao

n : raiz da sub-arvore cujo valor mınimo deve ser removido (ref)v : valor a remover→ Booleano indicando se a altura diminuiu

30 / 33

Page 38: Árvores AVL

Remocao

Remove(n, v)

1 if n = = Nil2 return False3 if v < n.val4 return Balance-Left(n,Remove(n. left))5 if v > n.val6 return Balance-Right(n,Remove(n.right))7 if n. left = = Nil8 tmp = n9 n = n.right

10 Free-AVL-Node(tmp)11 return True12 if n.right = = Nil13 tmp = n14 n = n. left15 Free-AVL-Node(tmp)16 return True17 return Balance-Right(n,Remove-Min(n.right, n.val))

30 / 33

Page 39: Árvores AVL

Remocao do no com valor mınimo

n : raiz da sub-arvore cujo valor mınimo deve ser removido (ref)v : variavel onde o valor mınimo sera armazenado (ref)→ Booleano indicando se a altura diminuiu

Remove-Min(n, v)

1 if n. left == Nil2 v = n.val3 tmp = n4 n = n.right5 Free-AVL-Node(tmp)6 return True7 else8 return Balance-Left(n,Remove-Min(n. left, v), n)

31 / 33

Page 40: Árvores AVL

Rebalanceamento da sub-arvore direita

n : a sub-arvore direita de n sofreu remocao (ref)dec : indica se a altura diminuiu na remocao na sub-arvore

→ indica se a altura diminuiu na remocao em n

Balance-Right(n, dec)

1 if not dec2 return False3 if n.bal = = −1 // desequilibro em n4 if n. left.bal = = −1 or n. left.bal = = 05 n = Rotate-Simple-Right(n)6 else n = Rotate-Double-Right(n)7 return True8 elseif n.bal = = 09 n.bal = −1

10 return False11 else n.bal = 012 return True

32 / 33

Page 41: Árvores AVL

Exercıcios

1. Escrever o algoritmo Balance-Left

2. Aplicar repetidamente o algoritmo de remocao a arvore inicialdo exemplo ate ter removido todos os valores da arvore:

I em ordem decrescente de valorI em ordem crescente de valorI escolhendo sempre o valor mediano da colecao representada

33 / 33