1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

52
1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas

Transcript of 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

Page 1: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

1

Estruturas de Dados com Jogos

Capítulo 9

Árvores Balanceadas

Page 2: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

2

• Entender o conceito de Balanceamento, e sua importância para a eficiência das Árvores Binárias de Busca;

• Desenvolver habilidade para elaborar algoritmos sobre Árvores Binárias de Busca Balanceadas, e para adaptar a lógica do Balanceamento a novas situações, se necessário.

Seus Objetivos neste Capítulo

Page 3: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

3

Exercício 9.1 Inserir Sequencia de Valores

Sequencia (A): 50, 20, 40, 12, 90, 75, 120

Sequencia (B): 12, 20, 40, 50, 75, 90, 120

Page 4: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

4

Exercício 9.1 Inserir Sequencia de Valores

Sequencia (A): 50, 20, 40, 12, 90, 75, 120

Sequencia (B): 12, 20, 40, 50, 75, 90, 120

Page 5: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

5

Árvore Binária de Busca Balanceada – ABBB:

Para cada Nó da Árvore, as alturas de suas Subárvores diferem de, no máximo, 1.

Estão balanceadas?

Page 6: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

6

Estratégia para Manter uma ABB Balanceada:

Alterar algoritmos de inserção e eliminação para:

•Monitorar o Balanceamento da Árvore; e

•Desencadear ações de rebalanceamento, sempre que necessário.

Page 7: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

7

Como Monitorar Objetivamente?Fator de Balanceamento: Bal = Hd - He Altura da Subárvore Direita menos a altura da Subárvore Esquerda.

Qual o Bal de cada nó?

Page 8: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

8

Fator de Balanceamento: Bal = Hd - He Altura da Subárvore Direita menos a altura da

Subárvore Esquerda.

Page 9: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

9

Monitorando o Balanceamento ao Inserir Elementos na Subárvore

Esquerda

Page 10: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

10

Monitorando o Balanceamento ao Inserir Elementos na Subárvore

Esquerda

Page 11: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

11

Monitorando o Balanceamento ao Inserir Elementos na Subárvore

Esquerda

Page 12: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

12

A inserção de...

25 40 9 13 17 21

Monitorando o Balanceamento:

Exercício 9.4 Causaria Desbalanceamento?

Page 13: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

13

Como Rebalancear?

Page 14: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

14

Casos de Rebalanceamento:Caso 1 - Rotação Simples EE

(insere)

Page 15: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

15

Caso 1 - Rotação Simples EE - Insere

(a) Inseriu e Desbalanceou

Page 16: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

16

Caso 1 - Rotação Simples EE - Insere

(a) Inseriu e Desbalanceou (b) Achar os Três Nós Principais

Page 17: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

17

Caso 1 - Rotação Simples EE - Insere

(c) Reposicionar os Três Nós(b) Achar os Três Nós Principais

Page 18: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

18

Caso 1 - Rotação Simples EE - Insere

(c) Reposicionar os Três Nós(b) Achar os Três Nós Principais

Page 19: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

19

Caso 1 - Rotação Simples EE - Insere

(d) Reposicionar os Demais Nós

Page 20: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

20

Para Rebalancear uma Árvore Manualmente

Passo 1: Identificar os Três Nós Principais.

Passo 2: Reposicionar os Três Nós Principais.

Passo 3: Reposicione os demais valores, respeitando o critério que define uma ABB.

Passo 4: Atualize o Fator de Balanceamento de Cada Nó.

Page 21: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

21

(a)

(c)

(b)

(d)

Caso 1 - Rotação Simples

EE - Insere

Page 22: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

22

Generalização do Caso 1: Rotação Simples EE - Insere

Page 23: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

23

Algoritmo - Caso 1: Rotação Simples EE -

Insere

Variavel Filho do tipo NodePtr; Filho = R→Esq; // 'A'R→Esq = Filho→Dir; // S2 Filho→Dir = R; // 'B‘

R→Bal = 0;

Filho→Bal = 0; .

R = Filho; // 'A' MudouAltura = Falso; // H(S1) + 2.

Filho

Page 24: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

24

Como Rebalancear?

(a)

Page 25: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

25

(c)

(b)

(d)

Exercício 9.7Caso 2 - Rotação

Simples DD - Insere

094

09

15

R

+1

+2

29

41

72+1

-1

Page 26: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

26

Exercício 9.8 Diagrama - Caso 2: Rotação Simples DD

Exercício 9.9 Algoritmo - Caso 2: Rotação Simples DD

Exercícios – DD Insere

Page 27: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

27

Como Rebalancear?

(a)

Page 28: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

28

Caso 3 - Rotação Dupla ED - Insere

(a) Inseriu e Desbalanceou

Page 29: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

29

Caso 3 - Rotação Dupla ED - Insere

(a) Inseriu e Desbalanceou (b) Achar os Três Nós Principais

Page 30: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

30

Caso 3 - Rotação Dupla ED - Insere

(c) Reposicionar os Três Nós(b) Achar os Três Nós Principais

Page 31: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

31

Caso 3 - Rotação Dupla ED - Insere

(c) Reposicionar os Três Nós(b) Achar os Três Nós Principais

Page 32: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

32

Caso 3 - Rotação Dupla ED - Insere

(d) Reposicionar os Demais Nós

Page 33: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

33

(c)

(b)

(d)

Exercício 9.11Caso 3 -

Rotação Dupla ED - Insere

Page 34: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

34

Generalização do Caso 3: Rotação Dupla ED - Insere

Page 35: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

35

Generalização do Caso 3: Rotação Dupla ED - Insere

Page 36: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

36

variavel Filho do tipo NodePtr;variavel Neto do tipo NodePtr;Filho = R→Esq; // 'A'Neto = Filho→Dir; // 'B'

Filho→Dir = Neto→Esq; // S2Neto→Esq = Filho; // 'A'

R→Esq = Neto→Dir; // S3Neto→Dir = R; // 'C '

Caso Neto→Bal for -1 : { R→Bal = 1; // inseriu X1 Filho→Bal = 0; Neto→Bal = 0; } +1 : { R→Bal = O; // inseriu X2 Filho→Bal = -1; Neto→Bal = 0; } 0 : { R→Bal = 0; // inseriu 'B' Filho→Bal = 0; Neto→Bal = 0; } R = Neto; // 'B'MudouAltura = Falso; // H(S1) + 2.

Page 37: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

37

(c)

(b)

(d)

Exercícios 9.12 a 9.14 Exemplos,

Diagrama e Algoritmo - Caso 4:

DE Insere

(a)

Page 38: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

38

Para Manter uma ABB Balanceada:Alterar algoritmos de inserção e eliminação para:

•Monitorar o Balanceamento da Árvore; e

•Desencadear ações de rebalanceamento, sempre que necessário.

Page 39: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

39

Insere (parâmetro por referência R do tipo ABB, parâmetro X do tipo Inteiro, parâmetro por referência Ok do tipo Boolean);

Variável P do tipo NodePtr;  

Se (R == Null) Então { P = NewNode; // Caso 1: Achou o lugar; insere e acaba

P→Info = X;P→Dir = Null;P→Esq = Null;R = P;

P = Null;Ok = Verdadeiro; }

Senão { Se (X == R→Info) Então Ok = Falso; // Caso 2: X já está na árvore; não insere; Senão { Se (R→Info> X)

Então Insere (R→Esq, X , Ok) // Caso 3: tenta na Es Senão Insere(R→Dir, X, Ok); // Caso 4: tenta na Dir

} // fim senão } // fim senão} // fim Insere ABB

Exercício 9.15 Adaptar o Algoritmo Insere - ABB para ABBB

Page 40: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

40

Insere (parâmetro por referência R do tipo ABB, parâmetro X do tipo Inteiro, parâmetro por referência Ok do tipo Boolean);

Variável P do tipo NodePtr;  

Se (R == Null) Então { P = NewNode; P→Info = X; P→Dir = Null; P→Esq = Null; R = P; P = Null; Ok = Verdadeiro; P→Bal = 0; }Senão { Se (X == R→Info)

Então Ok = Falso; Senão { Se (R→Info> X)

Então { Insere (R→Esq, X , Ok); // Monitora balanceamento voltando de inserir // na Subárvore Esquerda de R. Se for // preciso, desencadeia Rebalanceamento }

Senão { Insere(R→Dir, X, Ok); // monitora balanceamento voltando de inserir // na Subárvore Direita de R. Se for // preciso, desencadeia Rebalanceamento }

} }}

Exercício 9.15 Insere - ABBB

Page 41: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

41

Insere (R→Esq, X , Ok);Se MudouAltura // Se a Subárvore esq cresceu..Então Caso R→Bal for: +1: { R→Bal = 0; MudouAltura = Falso;}

0: R→Bal= -1; // MudouAltura continua Verdadeiro

-1: /* É preciso rebalancear! */ { Filho = R→Esq; Se (Filho→Bal == +1) Então RotDuplaEDInsere; Senão RotSimplesEEInsere; }

Monitora balanceamento voltando de inserir na Esquerda...

Page 42: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

42

Insere (R→Dir, X , Ok);Se MudouAltura // Se a Subárvore Direita cresceu..Então Caso R→Bal for:Se MudouAltura // se a Subárvore Direita cresceu...então Caso R→Bal for: -1: { R→Bal = 0; MudouAltura = Falso; };

0: R→Bal=1; // MudouAltura continua Verdadeiro

+1: { Filho = R→Dir; // É preciso rebalancear!! Se (Filho→Bal = -1) Então RotDuplaDEInsere; Senão RotSimplesDDInsere;}

Monitora balanceamento voltando de inserir na Subárvore Direita. Se for preciso, desencadeia Rebalanceamento

Page 43: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

43

Insere em ABBB: Exemplo de Execução

Page 44: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

44

Monitorando o Balanceamento ao Remover Elementos na Subárvore

Direita

Page 45: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

45

Monitorando o Balanceamento ao Remover Elementos na Subárvore

Direita

Page 46: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

46

Monitorando o Balanceamento ao Remover Elementos na Subárvore

Direita

Page 47: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

47

Caso 1 - Rotação Simples EE - Remove

(a) Caso EE mas MudouAltura não será atualizada para Falso, como no Insere

(Filho -> Bal = -1)

Page 48: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

48

Caso 1 - Rotação Simples EE - Remove

(b) Caso EE mas Fatores de Balanceamento não serão atualizados para Zero, como no Insere

(Filho -> Bal = 0)

Page 49: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

49

Caso 1 - Rotação Simples EE - Remove

(c) Caso ED mas MudouAltura não será atualizada para Falso, como no Insere

(Filho -> Bal = +1)

Page 50: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

50

Exercícios

Exercícios 9.16 e 9.17 Remove ABBB - Rebalanceamento Manual casos EE e ED

Exercícios 9.18 a 9.21 Generalização dos Casos 5, 6, 7 e 8 EE, DD, ED e DE do Remove - Diagrama e Algoritmo

Exercício 9.22 Algoritmo Remove para uma Árvore Binária de Busca Balanceada – ABBB (ajustar o Remove de ABB)

Exercício 9.23 Implemente uma Árvore Binária de Busca Balanceada - ABBB em uma Linguagem de Programação

Page 51: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

51

Avanço de Projeto

Exercício 8.12 Discutir Aplicações de Árvores em Jogos

Exercício 8.13 Avançar o Projeto do Desafio 4: Defina Regras, Escolha um Nome e Inicie o Desenvolvimento do Seu Jogo

Page 52: 1 Estruturas de Dados com Jogos Capítulo 9 Árvores Balanceadas.

52

Estruturas de Dados com JogosAprender a programar pode ser divertido!

Dê personalidade e inteligência ao seu jogo! Mostre para os seus amigos!

Comece a Desenvolver

Seu Jogo Agora!