62
Heapsort Letícia Rodrigues Bueno UFABC

Heapsort - professor.ufabc.edu.brprofessor.ufabc.edu.br/.../classes/aa/materiais/heapsort.pdf · 1. Um algoritmo de ordenação é estável se preserva ordem relativa de itens com

Embed Size (px)

Citation preview

Heapsort

Letícia Rodrigues Bueno

UFABC

Heaps

• Heaps: lista linear com chaves s1, . . . , sn com propriedadesi ≤ s⌊i/2⌋, para 1 < i < n;

Heaps

• Heaps: lista linear com chaves s1, . . . , sn com propriedadesi ≤ s⌊i/2⌋, para 1 < i < n;

95 60 78 39 28 66 70 331 2 3 4 5 6 7 8

95

60 78

39 28 66 70

33

Heaps

• Heaps: lista linear com chaves s1, . . . , sn com propriedadesi ≤ s⌊i/2⌋, para 1 < i < n;

95 60 78 39 28 66 70 331 2 3 4 5 6 7 8

95

60 78

39 28 66 70

33

Heaps

• Heaps: lista linear com chaves s1, . . . , sn com propriedadesi ≤ s⌊i/2⌋, para 1 < i < n;

95 60 78 39 28 66 70 331 2 3 4 5 6 7 8

95

60 78

39 28 66 70

33

Heaps

• Heaps: lista linear com chaves s1, . . . , sn com propriedadesi ≤ s⌊i/2⌋, para 1 < i < n;

95 60 78 39 28 66 70 331 2 3 4 5 6 7 8

95

60 78

39 28 66 70

33

Heaps

• Heaps: lista linear com chaves s1, . . . , sn com propriedadesi ≤ s⌊i/2⌋, para 1 < i < n;

95 60 78 39 28 66 70 331 2 3 4 5 6 7 8

95

60 78

39 28 66 70

33

Heaps - Aplicações

• Dois tipos: heap mínimo e heap máximo;

Heaps - Aplicações

• Dois tipos: heap mínimo e heap máximo;

• Aplicações: implementação de lista de prioridades;

Heaps - Aplicações

• Dois tipos: heap mínimo e heap máximo;

• Aplicações: implementação de lista de prioridades;

OperaçãoLista Lista

Heapnão-ordenada Ordenada

Seleção O(n) O(1) O(1)Inserção O(1) O(n) O(log n)Remoção O(n) O(1) O(log n)Alteração O(n) O(n) O(log n)Construção O(n) O(n log n) O(n)

Métodos Heap: aumentando prioridade

Método subir:

95

60 78

39 28 66 70

33

Métodos Heap: aumentando prioridade

Método subir:

95

60 78

39 28 66 70

33 98

Métodos Heap: aumentando prioridade

Método subir:

95

60 78

39 28 98 70

33

Métodos Heap: aumentando prioridade

Método subir:

95

60 98

39 28 78 70

33

Métodos Heap: aumentando prioridade

Método subir:

98

60 95

39 28 78 70

33

Métodos Heap: diminuindo prioridade

Método descer:

95

60 78

39 28 66 70

33

Métodos Heap: diminuindo prioridade

Método descer:

95

60 78

39 28 66 70

33

37

Métodos Heap: diminuindo prioridade

Método descer:

37

60 78

39 28 66 70

33

Métodos Heap: diminuindo prioridade

Método descer:

78

60 37

39 28 66 70

33

Métodos Heap: diminuindo prioridade

Método descer:

78

60 70

39 28 66 37

33

Métodos Heap

1 subir(i):2 j = ⌊i/2⌋3 se j ≥ 1 então4 se T [i] > T [j] então5 T [i] ⇔ T [j]6 subir(j)

1 descer(i, n):2 j = 2 ∗ i3 se j ≤ n então4 se j < n então4 se T [j + 1] > T [j] então5 j = j + 16 se T [i] < T [j] então7 T [i] ⇔ T [j]8 descer(j, n)

Métodos Heap

1 subir(i):2 j = ⌊i/2⌋3 se j ≥ 1 então4 se T [i] > T [j] então5 T [i] ⇔ T [j]6 subir(j)

1 descer(i, n):2 j = 2 ∗ i3 se j ≤ n então4 se j < n então4 se T [j + 1] > T [j] então5 j = j + 16 se T [i] < T [j] então7 T [i] ⇔ T [j]8 descer(j, n)

Análise da complexidade:

Métodos Heap

1 subir(i):2 j = ⌊i/2⌋3 se j ≥ 1 então4 se T [i] > T [j] então5 T [i] ⇔ T [j]6 subir(j)

1 descer(i, n):2 j = 2 ∗ i3 se j ≤ n então4 se j < n então4 se T [j + 1] > T [j] então5 j = j + 16 se T [i] < T [j] então7 T [i] ⇔ T [j]8 descer(j, n)

Análise da complexidade:

• Subir: percurso decaminho em árvorebinária completa;

Métodos Heap

1 subir(i):2 j = ⌊i/2⌋3 se j ≥ 1 então4 se T [i] > T [j] então5 T [i] ⇔ T [j]6 subir(j)

1 descer(i, n):2 j = 2 ∗ i3 se j ≤ n então4 se j < n então4 se T [j + 1] > T [j] então5 j = j + 16 se T [i] < T [j] então7 T [i] ⇔ T [j]8 descer(j, n)

Análise da complexidade:

• Subir: percurso decaminho em árvorebinária completa;

• Descer: percurso decaminho em árvorebinária completa;

Métodos Heap

1 subir(i):2 j = ⌊i/2⌋3 se j ≥ 1 então4 se T [i] > T [j] então5 T [i] ⇔ T [j]6 subir(j)

1 descer(i, n):2 j = 2 ∗ i3 se j ≤ n então4 se j < n então4 se T [j + 1] > T [j] então5 j = j + 16 se T [i] < T [j] então7 T [i] ⇔ T [j]8 descer(j, n)

Análise da complexidade:

• Subir: percurso decaminho em árvorebinária completa;

• Descer: percurso decaminho em árvorebinária completa;

• Complexidade:O(log n)

Métodos Heap: inserir, remover e construir

Métodos Heap: inserir, remover e construir

• Inserir: insere em n + 1 e aplica subir(). Complexidade:

Métodos Heap: inserir, remover e construir

• Inserir: insere em n + 1 e aplica subir(). Complexidade:O(log n);

Métodos Heap: inserir, remover e construir

• Inserir: insere em n + 1 e aplica subir(). Complexidade:O(log n);

• Remover: remove posição 1, coloca chave n em 1 eaplica método descer(). Complexidade:

Métodos Heap: inserir, remover e construir

• Inserir: insere em n + 1 e aplica subir(). Complexidade:O(log n);

• Remover: remove posição 1, coloca chave n em 1 eaplica método descer(). Complexidade: O(log n);

Métodos Heap: inserir, remover e construir

• Inserir: insere em n + 1 e aplica subir(). Complexidade:O(log n);

• Remover: remove posição 1, coloca chave n em 1 eaplica método descer(). Complexidade: O(log n);

• Construção: para i = ⌊n/2⌋ até 1 aplique descer(i ,n).

Métodos Heap: inserir, remover e construir

• Inserir: insere em n + 1 e aplica subir(). Complexidade:O(log n);

• Remover: remove posição 1, coloca chave n em 1 eaplica método descer(). Complexidade: O(log n);

• Construção: para i = ⌊n/2⌋ até 1 aplique descer(i ,n).Complexidade:

Métodos Heap: inserir, remover e construir

• Inserir: insere em n + 1 e aplica subir(). Complexidade:O(log n);

• Remover: remove posição 1, coloca chave n em 1 eaplica método descer(). Complexidade: O(log n);

• Construção: para i = ⌊n/2⌋ até 1 aplique descer(i ,n).Complexidade: O(n);

95 60 78 39 28 66 70 331 2 3 4 5 6 7 8

folhas

Heapsort

1o passo: construir o heap

O R D E N A1 2 3 4 5 6

O

R D

E N A

Heapsort

1o passo: construir o heap

O R D E N A1 2 3 4 5 6

O

R D

E N A

Heapsort

1o passo: construir o heap

O R D E N A1 2 3 4 5 6

O

R D

E N A

Heapsort

1o passo: construir o heap

O R D E N A1 2 3 4 5 6

O

R D

E N A

Heapsort

1o passo: construir o heap

O R D E N A1 2 3 4 5 6

O

R D

E N A

Heapsort

1o passo: construir o heap

R O D E N A1 2 3 4 5 6

R

O D

E N A

Heapsort

2o passo: trocar 1o com último e aplicar descer(1,m − 1) porn − 1 vezes

R O D E N A1 2 3 4 5 6

R

O D

E N A

Heapsort

2o passo: trocar 1o com último e aplicar descer(1,m − 1) porn − 1 vezes

A O D E N R1 2 3 4 5 6

A

O D

E N R

Heapsort

2o passo: trocar 1o com último e aplicar descer(1,m − 1) porn − 1 vezes

A O D E N R1 2 3 4 5 6

A

O D

E N R

Heapsort

2o passo: trocar 1o com último e aplicar descer(1,m − 1) porn − 1 vezes

O A D E N R1 2 3 4 5 6

O

A D

E N R

Heapsort

2o passo: trocar 1o com último e aplicar descer(1,m − 1) porn − 1 vezes

O N D E A R1 2 3 4 5 6

O

N D

E A R

Heapsort

2o passo: trocar 1o com último e aplicar descer(1,m − 1) porn − 1 vezes

A N D E O R1 2 3 4 5 6

A

N D

E O R

Heapsort

2o passo: trocar 1o com último e aplicar descer(1,m − 1) porn − 1 vezes

A N D E O R1 2 3 4 5 6

A

N D

E O R

Heapsort

2o passo: trocar 1o com último e aplicar descer(1,m − 1) porn − 1 vezes

N A D E O R1 2 3 4 5 6

N

A D

E O R

Heapsort

2o passo: trocar 1o com último e aplicar descer(1,m − 1) porn − 1 vezes

N E D A O R1 2 3 4 5 6

N

E D

A O R

Heapsort

2o passo: trocar 1o com último e aplicar descer(1,m − 1) porn − 1 vezes

A E D N O R1 2 3 4 5 6

A

E D

N O R

Heapsort

2o passo: trocar 1o com último e aplicar descer(1,m − 1) porn − 1 vezes

E A D N O R1 2 3 4 5 6

E

A D

N O R

Heapsort

2o passo: trocar 1o com último e aplicar descer(1,m − 1) porn − 1 vezes

D A E N O R1 2 3 4 5 6

D

A E

N O R

Heapsort

2o passo: trocar 1o com último e aplicar descer(1,m − 1) porn − 1 vezes

A D E N O R1 2 3 4 5 6

A

D E

N O R

Heapsort

1 heapsort(n):2 Constrói heap3 m = n4 enquanto m > 1 faça5 T [1] ⇔ T [m]6 m = m − 17 descer(1, m)

Heapsort

1 heapsort(n):2 Constrói heap3 m = n4 enquanto m > 1 faça5 T [1] ⇔ T [m]6 m = m − 17 descer(1, m)

Análise da complexidade:

Heapsort

1 heapsort(n):2 Constrói heap3 m = n4 enquanto m > 1 faça5 T [1] ⇔ T [m]6 m = m − 17 descer(1, m)

Análise da complexidade:

• Construir heap (linha2) custa O(n);

Heapsort

1 heapsort(n):2 Constrói heap3 m = n4 enquanto m > 1 faça5 T [1] ⇔ T [m]6 m = m − 17 descer(1, m)

Análise da complexidade:

• Construir heap (linha2) custa O(n);

• descer(1,m) custaO(log n) e éexecutado n vezes;

Heapsort

1 heapsort(n):2 Constrói heap3 m = n4 enquanto m > 1 faça5 T [1] ⇔ T [m]6 m = m − 17 descer(1, m)

Análise da complexidade:

• Construir heap (linha2) custa O(n);

• descer(1,m) custaO(log n) e éexecutado n vezes;

• Complexidade:O(n + n log n) =O(n log n)

Exercícios

1. Um algoritmo de ordenação é estável se preserva ordemrelativa de itens com valores idênticos. Responda:heapsort é estável? Exemplifique.

Exercícios

1. Um algoritmo de ordenação é estável se preserva ordemrelativa de itens com valores idênticos. Responda:heapsort é estável? Exemplifique.

2. Modifique o heapsort para fazer ordenação decrescente.Dica: utilize um heap mínimo.

Exercícios

1. Um algoritmo de ordenação é estável se preserva ordemrelativa de itens com valores idênticos. Responda:heapsort é estável? Exemplifique.

2. Modifique o heapsort para fazer ordenação decrescente.Dica: utilize um heap mínimo.

3. Escreva uma função que decida se um vetor V [1 . . . n] éum heap.

Exercícios

1. Um algoritmo de ordenação é estável se preserva ordemrelativa de itens com valores idênticos. Responda:heapsort é estável? Exemplifique.

2. Modifique o heapsort para fazer ordenação decrescente.Dica: utilize um heap mínimo.

3. Escreva uma função que decida se um vetor V [1 . . . n] éum heap.

4. O que você acha de ordenarmos um vetor em ordemdecrescente com o objetivo de transformá-lo em um heap?

Bibliografia Utilizada

CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L. e STEIN, C.Introduction to Algorithms, 3a edição, MIT Press, 2009.

SZWARCFITER, J. L. e MARKENZON, L. Estruturas de Dados eseus Algoritmos, LTC, 1994.

ZIVIANI, N. Projeto de Algoritmos: com implementações em Pascal eC, 2a edição, Cengage Learning, 2009.