Upload
hoangduong
View
214
Download
0
Embed Size (px)
Citation preview
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;
• 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
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
• 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
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.