1 Árvores de busca katia guimarães. 2 dissemos anteriormente que a capacidade de alocação...
TRANSCRIPT
![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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022081518/552fc142497959413d8df792/html5/thumbnails/27.jpg)
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