27
1 Árvores de Busca Katia Guimarães

1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

Embed Size (px)

Citation preview

Page 1: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

1

Árvores de Busca

Katia Guimarães

Page 2: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

2

Dissemos anteriormente que a capacidade de alocação

dinâmica é muito desejável em muitos casos.

Mas vimos que as estruturas lineares, como listas ligadas, têm um problema por exigir acesso seqüencial.

Usando Estruturas Dinâmicas

Page 3: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

3

Uma solução para este problema podeser através do uso de estruturas nãolineares. Ex: Dividir a lista em duas.

Estruturas não Lineares

X

Menores que X

Maiores que X

Page 4: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

4

O problema de dividir a lista em duas é que isto apenas “divide o problema em dois”.

Estruturas não Lineares

X

Menores que X

Maiores que X

Page 5: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

5

Estruturas não Lineares

X

Uma solução mais robusta consiste em dividir a lista a cada elemento.

X< Y

Y< X

X< Y< Z

X<Z< Y

Y<Z<X

Z< Y<X

Page 6: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

6

Árvores: Estruturas dinâmicas com:

Folhas: nós sem filhos

Raiz

pai

filho à dir.filho à esq.

ancestral

descendente

Page 7: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

7

Árvores binárias onde os elementos são organizados de forma que:

Árvore de Busca Binária

• Todos os elementos na sub-árvore esquerda de cada nó k têm valor menor ou igual ao valor no nó k.

• Todos os elementos na sub-árvore direita de cada nó k têm valor maior do que o valor no nó k.

Page 8: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

8

Árvore binária onde os elementos são organizados de forma que:

Árvore de Busca Binária

y < x z > x

x

Page 9: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

9

Exemplo: 50, 20, 39, 8, 79, 26, 58, 15, 88, 4, 85, 96, 71, 42, 53.

Árvore de Busca Binária

50

20

8

4 15

39

26 42

79

58

53 71

88

85 96

Page 10: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

10

Estrutura de dados dinâmica, com recuperação em tempo logarítmico.

Árvore de Busca Binária

1

2

3

4

Page 11: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

11

Ocorre sempre em uma folha.

Inserção em Árvores de Busca

Procedimento Inclui (raiz, x): Se raiz então

se elemento na raiz > x então Inclui (esquerda, x) senão Inclui (direita, x) senão { aloque espaço para um nó;

coloque x neste nó; retorne apontador novo nó}

Page 12: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

12

Exemplo: 50, 20, 39, 8, 79, 26, 58, 15, 88, 4, 85, 96, 71, 42, 53.

Árvore de Busca Binária

50

20

8

4 15

39

26 42

79

58

53 71

88

85 96

Page 13: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

13

Nem sempre ocorre em uma folha.

Remoção em Árvore de Busca

Procedimento Remove (raiz, x) EndNó Busca (x);

Se ¬EndNó então relate insucesso

Page 14: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

14

Exemplo: Remove (raiz, 60)

Remoção em Árvore de Busca

50

20

8

4 15

39

26 42

79

58

53 71

88

85 96

raiz

Page 15: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

15

Nem sempre ocorre em uma folha.

Remoção em Árvores de Busca

Procedimento Remove (raiz, x) EndNó Busca (x);

Se ¬EndNó então relate insucesso senão se EndNó é folha (¬esq AND ¬dir )

então apague apontador pai;

Page 16: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

16

Exemplo: Remove (raiz, 53)

Remoção em Árvore de Busca

50

20

8

4 15

39

26 42

79

58

53 71

88

85 96

raiz

Page 17: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

17

Exemplo: Remove (raiz, 53)

Remoção em Árvore de Busca

50

20

8

4 15

39

26 42

79

58

71

88

85 96

raiz

Page 18: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

18

Remoção em Árvores de Busca

Procedimento Remove (raiz, x) EndNó Busca (x);

Se ¬EndNó então relate insucesso senão se EndNó é folha (¬esq AND ¬dir )

então apague apontador pai; senão se ¬esq XOR ¬dir então

faça pai de x apontar para filho x

Page 19: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

19

Exemplo: Remove (raiz, 58)

Remoção em Árvore de Busca

50

20

8

4 15

39

26 42

79

58

71

88

85 96

raiz

Page 20: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

20

Exemplo: Remove (raiz, 58)

Remoção em Árvore de Busca

50

20

8

4 15

39

26 42

79

71

88

85 96

raiz

Page 21: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

21

Remoção em Árvores de Busca

Procedimento Remove (raiz, x) EndNó Busca (x);

Se ¬EndNó então relate insucesso senão se EndNó é folha (¬esq AND ¬dir )

então apague apontador pai; senão se ¬esq OR ¬dir então

faça pai de x apontar para filho x

senão substitua x pelo seu sucessor

Page 22: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

22

Exemplo: Remove (raiz, 20)

Remoção em Árvore de Busca

50

20

8

4 15

39

26 42

79

71

88

85 96

raiz

Onde está o sucessor de 20?

Page 23: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

23

Onde está o sucessor de um elemento cujo nó tem filho à direita?

Remoção em Árvore de Busca

50

20

8

4 15

39

26 42

raiz

Um passo à direita.

Tantos passos à esquerda quantos sejam necessários.

Note que o nó deste elemento não tem filho à esquerda.

Page 24: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

24

Exemplo: Remove (raiz, 20)

Remoção em Árvore de Busca

50

26

8

4 15

39

42

raiz

O pai do sucessor apontará para o filho à direita do nó do sucessor.

Page 25: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

25

Exemplo: 50, 20, 27, 42, 40 ...

Possível Problema

50

20

27

42

A árvore binária pode degenerar para uma estrutura próxima a uma lista ligada, e o tempo de acesso deixa de ser logarítmico.

40

Page 26: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

26

Procurar manter todas as folhas mais ou menos na mesma altura.

Solução

PROPRIEDADE AVL: Para todo nó | altura(dir) - altura(esq) | < 2

Page 27: 1 Árvores de Busca Katia Guimarães. 2 Dissemos anteriormente que a capacidade de alocação dinâmica é muito desejável em muitos casos. Mas vimos que as

27

Exemplo: 50, 20, 10, ...

Possível Problema

50

20

Após a inserção do elemento 10, a árvore binária perde a propriedade AVL.

SOLUÇÃO: (Próxima aula)

10