Você está na página 1de 18

16/11/2023

classificação e
pesquisa árvores binárias de busca balanceadas

de dados balanceamento:  nó n, hsae(n) – hsad(n)  1

criada por Adelson-Velsky e Landis (1962)

inserção, remoção e busca  (lg n)

empregam um fator de balanceamento

rotações mantém o balanceamento


1 2

Considere ABB NÃO balanceadas Considere ABB NÃO balanceadas


50 30 20 90 40 75 98 35 50 98 35 40 90 20 75 30
Custo máximo
da busca? 50
50

30 90
35 98
Custo máximo
40 90
da busca?
20
20 40 75 98

30 75
35

4 5
16/11/2023

Considere ABB NÃO balanceadas Considere ABB NÃO balanceadas


98

50 98 35 90 75 40 30 20 98 90 75 50 40 35 30 20 90

50
75

35 98 50

Custo máximo 40
Custo máximo
40 90
da busca? da busca?
35
30 75
30

20 20

6 7

Considere ABB NÃO balanceadas Considere ABB NÃO balanceadas


98 75 90 80 88 85 98 98 75 90 80 88 85 98
Questão
75 75
Dados 3 valores distintos,
90 90
de quantas formas tais
Custo máximo valores podem ser
Problema da busca? Problema inseridos em uma ABB?
80 80
Altura da ABB é definida Altura da ABB é definida
pela ordem de inserção 88 pela ordem de inserção 88

85 85

8 9
16/11/2023

10 20 30 30 20 10 30 10 20 10 30 20 É possível alterar estas 4 configurações para “gerar”


10 30 30 10
a configuração abaixo?
h=2 10 30 30 10
20 20 10 30
20 20 10 30
30 10 20 20
30 10 20 20

20 10 30 20 30 10
20 20 20
h=1
10 30 10 30 10 30

10 11

É possível alterar estas 4 configurações para “gerar” É possível alterar estas 4 configurações para “gerar”
a configuração abaixo? a configuração abaixo?
10 30 30 10 20 30 30 10

20 20 10 30 10 30 20 10 30

30 10 20 20 10 20 20

20 20

10 30 10 30

12 13
16/11/2023

É possível alterar estas 4 configurações para “gerar” É possível alterar estas 4 configurações para “gerar”
a configuração abaixo? a configuração abaixo?
20 30 30 10 20 20 30 10

10 30 20 10 30 10 30 10 30 10 30

10 20 20 20 20

20 20

10 30 10 30

14 15

É possível alterar estas 4 configurações para “gerar” É possível alterar estas 4 configurações para “gerar”
a configuração abaixo? a configuração abaixo?
20 20 30 10 20 20 30 10

10 30 10 30 10 30 10 30 10 30 20 30

20 20 10 20

20 20

10 30 10 30

16 17
16/11/2023

É possível alterar estas 4 configurações para “gerar” É possível alterar estas 4 configurações para “gerar”
a configuração abaixo? a configuração abaixo?
20 20 30 10 20 20 20 10

10 30 10 30 20 30 10 30 10 30 10 30 30

10 20 20

20 20

10 30 10 30

18 19

É possível alterar estas 4 configurações para “gerar” É possível alterar estas 4 configurações para “gerar”
a configuração abaixo? a configuração abaixo?
20 20 20 10 20 20 20 10

10 30 10 30 10 30 30 10 30 10 30 10 30 20

20 30

20 20

10 30 10 30

20 21
16/11/2023

É possível alterar estas 4 configurações para “gerar” É possível alterar estas 4 configurações para “gerar”
a configuração abaixo? a configuração abaixo?
20 20 20 10 20 20 20 20

10 30 10 30 10 30 20 10 30 10 30 10 30 10 30

30

20 20

10 30 10 30

22 23

E se houver mais de 3 nós na árvore? E se houver mais de 3 nós na árvore?


0
Temos que analisar o
20 20
fator de 2
balanceamento -1
10 30 10 30
-1 0 -1
5 25 40 5 25 40
0 0
6 50 6 50

24 25
16/11/2023

E se houver mais de 3 nós na árvore? E se houver mais de 3 nós na árvore?


0 -1
20 20
2 -1 0 -1
10 30 6 30
-1 0 -1 0 0 -1
5 25 40 5 10 25 40
0 0 0
6 50 50

28 29

Relembrando... o que é uma árvore AVL? fb = hsae – hsad = {-1, 0, 1}  (balanceada)


Árvore Binária de Busca balanceada
balanceamento baseado nas alturas das sub-árvores 3-2=1
50
uso de um fator de balanceamento  fb 1-2=-1 1-1=0
30 90

nó regulado  fb = {-1, 0, 1} 0-0=0 1-0=1 0-0=0 0-0=0


20 40 75 98

balanceamento:  nó n, hsae(n) – hsad(n)  1 0-0=0


35

30 31
16/11/2023

fb = hsae – hsad  -1 ≤ fb ≤ 1 (balanceada) Qual o fb de cada nó?


1
10
1 0 1
50 5 20
-1 0 1 -1 0
30 90 4 7 12
0 1 0 0 0 0
20 40 75 98 2 8
0
35

32 33

Qual o fb de cada nó? inserção pode causar desbalanceamento


2 0
10
Inserir 10 50
1 0 1 0
5 20 30 90
1 0 0 0 0
4 7 20 75 98
0
2

34 35
16/11/2023

inserção pode causar desbalanceamento inserção pode causar desbalanceamento


1 0
50 50
2 0 1 0
30 90 30 90

1 0 0 0 0 0
20 75 98 20 75 98
0
10

36 37

inserção pode causar desbalanceamento inserção pode causar desbalanceamento


1
50 1 1
2
2 0
30 30
30 90
0 inserir 10 0
1
-1 0 0 20 20 L
20 75 98 0
0 L
10
25
LL-imbalance

38 39
16/11/2023

inserção pode causar desbalanceamento inserção pode causar desbalanceamento


Rotação Simples Rotação Simples
R a DIREITA R a DIREITA
1 2 2 1 2 0
30 30 LL-rotation 30 30 30 LL-rotation 20
0 inserir 10 1 1 0 inserir 10 1
0 0
20 20 L 20 20 20 L
10 30
0 0 0
L L
10 10 10

LL-imbalance LL-imbalance

40 41

inserção pode causar desbalanceamento Informe o fator de balanceamento de cada nó na


árvore.
Rotação Simples
2 a DIREITA Insira o valor 10 na árvore:
2
A R B
01
A
1 50
1 A 12 0
B C LL-rotation B D
C 30 90
E C 01 0 0
D E
D E 20 75 98
LL-imbalance Invariante 0
Invariante D<B<E<A<C
10
D<B<E<A<C

42 43
16/11/2023

Informe o fator de balanceamento de cada nó na inserção pode causar desbalanceamento


árvore.
Insira o valor 10 na árvore: -1
0 10
50 0 inserir 30
0 0
20
20 90
0 0 0
0
10 30 75 98

44 45

inserção pode causar desbalanceamento inserção pode causar desbalanceamento


Rotação Simples a
ESQUERDA
-1 -2
1 -1 -2 -2
10 10
10 10 10
0 inserir 30 -01 0 inserir 30 -1 L
-1
R 20 R 20
20 20 20
RR-rotation
R 30 0 R 30 0 30 0
RR-imbalance RR-imbalance

46 47
16/11/2023

inserção pode causar desbalanceamento inserção pode causar desbalanceamento


Rotação Simples a
ESQUERDA Rotação Simples
-1 -2 0 -2 a ESQUERDA
-2 B
10 10
20 A L
0 inserir 30 -1 L -1 A
0 0 A
R -1
20 20
10 30
C B RR-rotation E
RR-rotation C B
C D
R 30 0 D E
D E
RR-imbalance RR-imbalance Invariante
Invariante C<A<D<B<E
C<A<D<B<E

48 49

Informe o fator de balanceamento de cada nó na Informe o fator de balanceamento de cada nó na


árvore. árvore.
Insira o valor 60 na árvore: Insira o valor 60 na árvore:
1
-2 -1
20 20
0 1
-2 0 -1
6 30 6 30
0 0 -1
2 0 0 0
5 10 25 40 5 10 25 50
-01 0 0
50 40 60
0
60

50 51
16/11/2023

inserção pode causar desbalanceamento inserção pode causar desbalanceamento


Rotação Dupla
LR ESQUERDA-DIREITA

1 1
2 1 2 2
30 30 30 30 LR-rotation 30
0 inserir 20 -01 0 inserir 20 -1 -1
10 10 L 10 10 L 10

0 0 0
R 20 R 20 20

LR-imbalance LR-imbalance

52 53

inserção pode causar desbalanceamento inserção pode causar desbalanceamento


Rotação Dupla Rotação Dupla
LR ESQUERDA-DIREITA LR ESQUERDA-DIREITA

1 2 2 1 2 0
30 30 LR-rotation 30 30 30 LR-rotation 20
0 inserir 20 -1 1 0 inserir 20 -1
0 0
10 10 L 20 10 10 L 30
10
0 0
0
R 20 10 R 20

LR-imbalance LR-imbalance

54 55
16/11/2023

inserção pode causar desbalanceamento inserção pode causar desbalanceamento


Rotação Dupla
RL DIREITA-ESQUERDA
-1 2
-1 -1 -2 -2
10 10 10
10 10 RL-rotation
1
0 1 1
0 inserir 20 0 inserir 20
R 30 R 30 30
30 30

0 L 0 L
20 20 20
0
RL-imbalance RL-imbalance

56 57

inserção pode causar desbalanceamento inserção pode causar desbalanceamento


Rotação Dupla Rotação Dupla
RL DIREITA-ESQUERDA RL DIREITA-ESQUERDA
-1 -2 -2 -1 -2 -2
10 10 10 10
10 RL-rotation 10 RL-rotation
1 -1 1 -1
0 inserir 20 0 inserir 20
R 30 20 R 30 20
30 30
0 0
0 L 0 L
20 30 20 30

RL-imbalance RL-imbalance

58 59
16/11/2023

inserção pode causar desbalanceamento remoção pode causar desbalanceamento


Rotação Dupla
RL DIREITA-ESQUERDA
-1 -2 0 Procedimento:
10 20
10 RL-rotation encontre o elemento na árvore
1 0 0
0 inserir 20
R 30 10 30 remova o nó que possui o elemento
30

0 L remoção na SAE
20

RL-imbalance
remoção na SAD

60 61

remoção na sub-árvore a direita remoção na sub-árvore a direita


rotação a direita: fb(n) = 2 e fb(sae(n)) = 1 rotação a direita: fb(n) = 2 e fb(sae(n)) = 1
1 2 1 2
50 50 50 30
1 0 1 1 0 1
30 90 30 30 90
20 50
0 0 0 0
20 20 20

LL-imbalance LL-imbalance
Situação 1 Situação 1

62 63
16/11/2023

remoção na sub-árvore a direita remoção na sub-árvore a direita


rotação a direita: fb(n) = 2 e fb(sae(n)) = 1 rotação a direita: fb(n) = 2 e fb(sae(n)) = 0
1 0 1 2 -1
50 30 50
1 1 0 50 30
0 0 0
0 0 1
30 90 30 90
20 50 30
20 50
0 0
0 0 0
20 20 40 40
20 0
40
LL-imbalance
Situação 1 LL-imbalance Situação 2

64 65

remoção na sub-árvore a direita remoção na sub-árvore a esquerda


rotação dupla a direita: fb(n) = 2 e fb(sae(n)) = -1 rotação a esquerda: fb(n) = -2 e fb(sad(n)) = -1
1 -1 -2
2 0 0
10 10
50
0 0 -1
50 40
0 -1 -1
20
0 0 0 0
30 90 30 20 20
30
30 50 10 30
0 0
40 40 30 0 30 0

LR-imbalance Situação 3 RR-imbalance Situação 1

66 67
16/11/2023

remoção na sub-árvore a esquerda remoção na sub-árvore a esquerda


rotação a esquerda: fb(n) = -2 e fb(sad(n)) = 0 rotação a esquerda: fb(n) = -2 e fb(sad(n)) = 1
-1 -2 1 -1 -2

0
60 60 80 0
60 60 1
0 0 0
-1 0
50 80 80 50 80 80
60 90
0 0 0 0
0 0
70 90 70 90 70
70 0 70

RR-imbalance Situação 2 RR-imbalance Situação 3

69 70

remoção na sub-árvore a esquerda Insira em uma árvore AVL os seguintes valores:


rotação a esquerda: fb(n) = -2 e fb(sad(n)) = 1 30, 40, 24, 58, 48, 26, 11, 13, 14, 28, 16, 15, 20, 17.
-1 -2 0 Para cada valor inserido, desenhe a árvore resultante.
0
60
0
60 -1 70 Caso ocorra alguma rotação, indique o tipo de
0 0
50 80 80 rotação com os respectivos desenhos da árvore
0 0 60 80
(antes e depois da rotação).
70
70
Remova os valores 28, 26 e 40 e mostre as árvores
resultantes após cada remoção.
RR-imbalance Situação 3

71 72
16/11/2023

Mostre, passo a passo, o resultado de remover as Remova os seguintes valores 30, 24, 20, 26 e 16,
chaves 85, 34 e 45, nessa ordem, da árvore AVL redesenhando a árvore AVL
abaixo.
63

27 85

15 34 81 97

5 45 99

73 74

Remova os seguintes valores 27, 63, 34 e 30,


redesenhando a árvore AVL
63

27 85

15 34 81 97

5 19 30 45 99

75

Você também pode gostar