Escolar Documentos
Profissional Documentos
Cultura Documentos
Aula 5
Faculdade de Computação
Universidade Federal de Mato Grosso do Sul
Análise de Algoritmos
1 Motivação
2 Heaps
4 Construção de um max-heap
5 Heapsort
6 Listas de prioridades
7 Exercícios
Introdução
Definição
Visualização de um heap
1 2 3 4 5 6 7 8 9 10
S 26 18 14 16 8 9 11 4 12 6
26
2 3
18 14
4 5 6 7
16 8 9 11
8 9 10
4 12 6
Altura de um heap
Operações básicas
I vértice pai
Pai(i)
1. devolva bi/2c
I filho esquerdo
Esq(i)
1. devolva 2i
I filho direito
Dir(i)
1. devolva 2i + 1
Propriedade (max-)heap
Problema
Algoritmo Desce
Desce(S, i)
01. e = Esq(i)
02. d = Dir(i)
03. se e < S.heap-size E S[e] > S[i]
04. maior = e
05. senão
06. maior = i
07. se d < S.heap-size E S[d] > S[maior]
08. maior = d
09. se maior , i
10. troque S[i] com S[maior]
11. Desce(S, maior)
2 3
i
7 14
4 5 6 7
16 8 9 11
8 9 10
4 12 6
2 3
16 14
4 5 6 7
i
7 8 9 11
8 9 10
4 12 6
2 3
16 14
4 5 6 7
12 8 9 11
8 9 10
i
4 7 6
x x
Problema
ConstróiMaxHeap(S)
1. S.heap-size = S.length
2. para i = bS.length/2c até 1 passo −1
3. Desce(S, i)
1 2 3 4 5 6 7 8 9 10
S 9 4 8 6 26 16 14 18 12 11
2 3
4 8
4 5 6 7
i
6 26 16 14
8 9 10
18 12 11
2 3
4 8
4 5 6 7
i
6 26 16 14
8 9 10
18 12 11
2 3
4 8
4 5 6 7
18 26 16 14
8 9 10
i
6 12 11
2 3
4 8
4 5 6 7
18 26 16 14
8 9 10
i
6 12 11
2 3
i
4 8
4 5 6 7
18 26 16 14
8 9 10
6 12 11
2 3
4 16
4 5 6 7
i
18 26 8 14
8 9 10
6 12 11
2 3
4 16
4 5 6 7
i
18 26 8 14
8 9 10
6 12 11
2 3
i
4 16
4 5 6 7
18 26 8 14
8 9 10
6 12 11
2 3
26 16
4 5 6 7
i
18 4 8 14
8 9 10
6 12 11
2 3
26 16
4 5 6 7
18 11 8 14
8 9 10
i
6 12 4
2 3
26 16
4 5 6 7
18 11 8 14
8 9 10
i
6 12 4
2 3
26 16
4 5 6 7
18 11 8 14
8 9 10
6 12 4
2 3
i
9 16
4 5 6 7
18 11 8 14
8 9 10
6 12 4
2 3
18 16
4 5 6 7
i
9 11 8 14
8 9 10
6 12 4
2 3
18 16
4 5 6 7
12 11 8 14
8 9 10
i
6 9 4
2 3
18 16
4 5 6 7
12 11 8 14
8 9 10
i
6 9 4
∞
X h
= cn h+1
h=0
2
= 2cn
= O(n) .
Algoritmo HeapSort
HeapSort(S)
1. ConstróiMaxHeap(S)
2. para i = S.length até 2 passo −1
3. troque S[1] com S[i]
4. S.heap-size = S.heap-size − 1
5. Desce(S, 1)
1 2 3 4 5 6 7 8 9 10
S 9 4 8 6 26 16 14 18 12 11
1
26
2 3
18 16
4 5 6 7
12 11 8 14
8 9 10
6 9 4
1
4
2 3
18 16
4 5 6 7
12 11 8 14
8 9 10
i
6 9 26
1
18
2 3
12 16
4 5 6 7
9 11 8 14
8 9 10
6 4 26
1
4
2 3
12 16
4 5 6 7
9 11 8 14
8 9 10
i
6 18 26
1
16
2 3
12 14
4 5 6 7
9 11 8 4
8 9 10
6 18 26
1
6
2 3
12 14
4 5 6 7
9 11 8 4
8 9 10
i
16 18 26
1
14
2 3
12 8
4 5 6 7
9 11 6 4
8 9 10
16 18 26
1
4
2 3
12 8
4 5 6 7
i
9 11 6 14
8 9 10
16 18 26
1
12
2 3
11 8
4 5 6 7
9 4 6 14
8 9 10
16 18 26
1
6
2 3
11 8
4 5 6 7
i
9 4 12 14
8 9 10
16 18 26
1
6
2 3
11 8
4 5 6 7
i
9 4 12 14
8 9 10
16 18 26
1
11
2 3
9 8
4 5 6 7
6 4 12 14
8 9 10
16 18 26
1
4
2 3
9 8
4 5 6 7
6 i 14
11 12
8 9 10
16 18 26
1
9
2 3
6 8
4 5 6 7
4 11 12 14
8 9 10
16 18 26
1
4
2 3
6 8
4 5 6 7
i
9 11 12 14
8 9 10
16 18 26
1
8
2 3
6 4
4 5 6 7
9 11 12 14
8 9 10
16 18 26
1
4
2 3
i
6 8
4 5 6 7
9 11 12 14
8 9 10
16 18 26
1
6
2 3
4 8
4 5 6 7
9 11 12 14
8 9 10
16 18 26
1
4
2 3
i
6 8
4 5 6 7
9 11 12 14
8 9 10
16 18 26
1
4
2 3
6 8
4 5 6 7
9 11 12 14
8 9 10
16 18 26
1 2 3 4 5 6 7 8 9 10
S 4 6 8 9 11 12 14 16 18 26
Motivação
Operações básicas
MaiorPrioridade(S)
1. devolva S[1]
Operações básicas
ExtraiMáxima(S)
1. se S.heap-size < 1
2. erro “heap underflow”
3. maior = S[1]
4. S[1] = S[S.heap-size]
5. S.heap-size = S.heap-size − 1
6. Desce(S, 1)
7. devolva maior
Operações básicas
Operações básicas
1 2 3 4 5 6 7 8 9 10
S 26 18 14 16 8 9 11 4 12 6
Operações básicas
1
26
2 3
18 14
4 5 6 7
16 8 9 11
8 9 10
4 12 6
Operações básicas
1
26
2 3
21 14
4 5 6 7
16 8 9 11
8 9 10
4 12 6
Operações básicas
1
26
2 3
3 14
4 5 6 7
16 8 9 11
8 9 10
4 12 6
Operações básicas
1
26
2 3
47 14
4 5 6 7
16 8 9 11
8 9 10
4 12 6
Operações básicas
Sobe(S, i)
1. enquanto i > 1 E S[Pai(i)] < S[i]
2. troque S[Pai(i)] e S[i]
3. i = Pai(i)
Operações básicas
1
26
2 3
18 14
4 5 6 7
16 8 9 11
8 9 10
4 12 6
Operações básicas
1
26
2 3
18 14
4 5 6 7
16 8 9 11
8 9 10
i
4 21 6
Operações básicas
1
26
2 3
18 14
4 5 6 7
i
21 8 9 11
8 9 10
4 16 6
Operações básicas
1
26
2 3
i
21 14
4 5 6 7
18 8 9 11
8 9 10
4 16 6
Operações básicas
1
26
2 3
21 14
4 5 6 7
18 8 9 11
8 9 10
4 16 6
Operações básicas
Operações básicas
AumentaPrioridade(S, i, p)
1. se p < S[i]
2. erro “nova prioridade é menor que a atual”
3. senão
4. S[i] = p
5. Sobe(S, i)
Operações básicas
InsereListaMax(S, p)
1. S.heap-size = S.heap-size + 1
2. S[S.heap-size] = p
3. Sobe(S, S.heap-size)
Exercícios
6.1-1 Quais são os números mínimo e máximo de elementos em um
max-heap de altura h?
6.1-2 Mostre que um heap com n elementos tem altura blg nc.
6.1-3 Mostre que em qualquer subárvore de um max-heap, a raiz da
subárvore contém o maior valor de todos aqueles que ocorrem
naquela subárvore.
6.1-4 Em um max-heap, onde pode estar armazenado o elemento de
menor prioridade, considerando que todos os elementos são
distintos?
6.1-5 Um vetor arranjado em ordem crescente é um min-heap?
6.1-6 A sequência h23, 17, 14, 6, 13, 10, 1, 5, 7, 12i é um max-heap?
6.1-7 Mostre que com a representação de um heap de n elementos em
um vetor, as folhas do heap estão armazenadas nos
compartimentos do vetor de índices bn/2c + 1, bn/2c + 2, . . . , n.
Viduani Martinez (FACOM) Heapsort AA 38 / 45
Exercícios
Exercícios
Exercícios
Exercícios
Exercícios
Exercícios
Problemas
ConstróiMaxHeap’(S)
1. S.heap-size = 1
2. para i = 2 até S.length
3. InsereListaMax(S, S[i])
Problemas
6-2 Análise de heaps d-ários
Um heap d-ário é como um heap binário, mas os vértices
internos têm d filhos e não 2. A raiz pode ter menos que d filhos
apenas no caso em que n 6 d.
(a) Como representar um heap d-ário em um vetor?
(b) Qual é a altura de um heap d-ário de n elementos em termos de n
e d?
(c) Forneça um algoritmo eficiente equivalente ao algoritmo
ExtraiMáxima para um heap d-ário. Analise seu tempo de
execução em termos de d e n.
(d) Forneça um algoritmo eficiente equivalente ao algoritmo
InsereListaMax para um heap d-ário. Analise seu tempo de
execução em termos de d e n.
(e) Forneça um algoritmo eficiente equivalente ao algoritmo
AumentaPrioridade para um heap d-ário. Analise seu tempo de
execução em termos de d e n.
Viduani Martinez (FACOM) Heapsort AA 45 / 45