34
INF 1010 Estruturas de Dados Avançadas 26/09/16 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 1

INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

INF 1010Estruturas de Dados Avançadas

26/09/16 © 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1 1

Page 2: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

voltando ao tempo de CPU

26/09/16 2© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1

P1 P2 P3 P1 P3 P1 P2 P3 P1

tempo

Page 3: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

medidas de tempo

c1 = clock();

...

c1 = clock() = c1;

não precisamos dividir por ”número de ticks porsegundo”, pois só estamos interessados emcomparar coisas, não em obter tempos absolutos!

26/09/16 3© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1

Page 4: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

questões comuns

• medidas com TAM muito pequeno

• computador é muito rápido (ainda bemJ)

Page 5: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

questões comuns – árvore binária

• problemas na remove (1)

remove (m, chave):if (chave < m->chave)desce subárvore à esquerda

else if (chace > m->chave)desce subárvore à direita

else/* encontrou *//* tratar casos distintos *//* folha, filho único, dois filhos */

Page 6: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

questões comuns – árvore binária

• problemas na remove (2)

remove (m, chave):…/* dois filhos */ procura filho mais à esquerda em sa à direita”troca” com nó correntelibera filho

Page 7: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

questões comuns – árvore binária

• problemas na remove (3)

remove (m, chave):…/* dois filhos */sucessor = m->dir;while (sucessor->esq != NULL) {sucessor = sucessor->esq;

}aux = m;m = sucessor;sucessor = aux;free(aux);m->dir = remove(m->dir, chave);

100

140

183

50

12117 61

270170

Page 8: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

questões comuns – árvore binária

• problemas na remove (3)

remove (m, chave):…/* dois filhos */while (sucessor->esq != NULL)

sucessor = sucessor->esq;

m->chave = sucessor->chave; /* troca as chaves */sucessor->chave = chave;

m->dado = sucessor->dado;

free(sucessor);0

100

140

183

50

12117 61

270170

Page 9: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

questões comuns – árvore binária

• problemas na remove (3)

remove (m, chave):…/* dois filhos */aux = m->esq;while(aux->dir != NULL)

aux = aux->dir;m->dado = aux->dado;m->chave – aux->chave;m->esq = removeNo(m->esq, aux->chave);

100

140

183

50

12117 61

270170

Page 10: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

questões comuns – árvore binária

• problemas na remove (3)

remove (m, chave):…/* dois filhos */Mapa *temp = m->dir; Mapa *tempAnterior = NULL;while(temp->esq != NULL) { //Caminha mais à esquerda possível com

tempAnterior = temp;temp = temp->esq;

}... acerta a árvore diretamente pois tem ponteiro p/ anterior

100

140

183

50

12117 61

270170

Page 11: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

outro comentário

• fazer uma debug_mostra_mapa que

mostre de fato!100

140

183

50

12117 61

270

Page 12: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

100, 50, 17, 61, 140, 121, 183, 270

100

140

183

50

12117 61

270100

140

183

50

12117

61

270

Page 13: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

(100 (50 (17 () ()) (61()()))(140 (121()())(183 ()(270()()))))

100

140

183

50

12117 61

270

100

140

183

50

12117

61

270

(100 (50 (17 (61()()) ()) ())(140 (121(183()())())(270()()))))

Page 14: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

árvores AVL

100

140

183

50

12117 61

270

Page 15: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

remoção

• voltamos a precisar de ajustes

• só que podemos precisar de váriosajustes

Page 16: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

remoção árvore AVL

100

140

183

50

12117 61

2 197

Page 17: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

remoção árvore AVL

100

140

183

50

12117 61

2 197

Page 18: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

remoção árvore AVL

100

140

183

50

12117

2 197

Page 19: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

remoção árvore AVL: um ajuste

100

140

183

17

1212

197

50

Page 20: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

remoção árvore AVL – outro exemplo

100

140

183

50

12161

197

300

h=4h=4

h=3

Page 21: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

remoção árvore AVL – outro exemplo

100

140

183

50

12161

197

300

h=4h=4

h=3

Page 22: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

remoção árvore AVL – outro exemplo

100

140

183

50

61

197

300

h=4h=4

h=3

Page 23: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

remoção árvore AVL – outro exemplo

100

183

140

50

61 197

300

h=4h=4

h=2

Page 24: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

Exemplo: Remove 8

26/09/16 24

5

3

82

1 7 10

9 116

5

3

72

1 6 10

9 11

© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1

Page 25: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

Exemplo: Remove 6

26/09/16 25

5

3

72

1 6 10

9 11

5

3

72

1 10

9 11

© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1

Page 26: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

Exemplo: Remove 6

26/09/16 26

5

3

72

1 6 10

9 11

5

3

72

1 10

9 11

rotação à esquerda

5

3 7

2

1

10

9

11

© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1

Page 27: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

Problemas com as Árvores AVL

•Problema:• Nem sempre uma ÚNICA rotação

(simples ou dupla) resolve o problema de desbalanceamento dos nós

• Há casos em que O(log n) rotações são necessárias para tornar a árvore balanceada

•Exemplo (a seguir):• exclusão do nó provoca diversas rotações

26/09/16 27© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1

Page 28: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

remove 3

Múltiplas Rotações na Árvore AVL

26/09/16 28

5

4

93

1 8 11

10 1272

6

5

93

1 8 11

10 1272

6

© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1

Page 29: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

rotação dupla

Múltiplas Rotações na Árvore AVL

26/09/16 29

5

4

93

1 8 11

10 1272

6

5

93

1 8 11

10 1272

6

5

9

31 8 11

10 127

2

6

© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1

Page 30: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

rotação duplaMúltiplas Rotações na Árvore AVL

26/09/16 30

5

4

93

1 8 11

10 1272

6

5

93

1 8 11

10 1272

6

5

9

31 8 11

10 127

2

6

5

9

31 8 11

10 127

2

6

rotação dupla 5 9

31

8

11

10 12

72

6

© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1

Page 31: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

Esboço do algoritmo de remoção

•Pesquise o nó que contém a chave procurada,

aplicando recursivamente o algoritmo de remoção

•Quando achar o nó

• faça a remoção

(semelhante à remoção em árvore de busca binária)

• analise o balanceamento

• Se o nó estiver desbalanceado ( |fb| >1 ),

faça as devidas rotações

•Recursivamente, reporte uma mudança na altura de um nó

ao seu pai para que ele faça as devidas correções

26/09/16 31© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1

Page 32: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

Esboço do algoritmo de remoção

•Pontos adicionais da remoção

(que não ocorrem na inserção)

• tratar todos os casos possíveis de altura nas

rotações

• analisar quando uma sub-árvore muda de altura

para reportar esta informação ao pai

26/09/16 32© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1

Page 33: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

Casos de rotação à esquerda (a s.a.e. perdeu altura)

26/09/16 33

2r

t

T4

1

T1

m

rotação à esquerda

0r

t

T4

0

T1 m

2r

t

T4

0

T1

m

rotação à esquerda

1r

t

T4

-1

T1 m

2r

t

T4

-1

T1

s

T2 T3

rotação dupla

© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1

Page 34: INF 1010 Estruturas de Dados Avançadasnoemi/eda-16.2/comentarios.pdf · 2016. 9. 28. · remoção • voltamosa ... 2 197. remoçãoárvore AVL 100 140 183 50 17 121 2 197. remoçãoárvore

Rotação dupla direita-esquerda (fb=2)

26/09/16 34

2r

t

T4

-1

T1

s

T2 T3

0

2r

t

T4

-1

T1

s

T2 T3

-1

2r

t

T4

-1

T1

s

T2 T3

1

r t

T4T1

s

T2 T3

0

10r t

T4T1

s

T2 T3

0

0-1r t

T4T1

s

T2 T3

0

00

© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1