2
Agenda
Heap Sort...mas antes Implementação de uma Fila de Prioridade
usando um HEAP Propriedade do Heap e exemplos adcionar min/max Remover
4
Um Heap
heap: Estrutura de dados, representada graficamente conforme figura abaixo, que apresenta as seguintes propriedades: 1. completude: todos os níveis são cheios excessão
feita ao nível mais baixo, que deve ser preenchido da esquerda para a direita.
Forma do Heap:
5
Um heap...propriedade 2. ordem do heap: Os elementos no heap
apresentam uma relação entre si. Em heaps, os valores dos elementos pai são
sempre menores(maiores) que de seus descendentes
Implica que o menor(maior) elemento é sempre a raiz
6
Quais são Heaps?
1530
8020
10
996040
8020
10
50 700
85
996040
8020
10
50 700
85 996040
8010
20
50 700
85
6040
8020
10
996040
8020
10
Errado! Errado!
Errado!
Errado!
7
24
7 3
30
10 40
30
80
2510
48
21
14
10 17
33
91828
11
22
3530
50
30
10 20
Errado!
Errado!
E Heap de ?
8
Adcionando ao heap Ao adicionar um elemento ao heap ele deve ser
colocado na posição mais a direita;– Completude;
A segunda propriedade foi violada!
996040
8020
10
50 700
85
65
996040
8020
10
50 700
85
65 15
9
Adcionando um... Para restaurar a propriedade de ordenação, o
novo elemento deve ser empurado para cima até que se alcançe a posição correta Empura-se os elementos realizando trocas com o pai; Quantas “empuradas” serão necessárias, no máximo?
996040
8020
10
50 700
85
65 15
992040
8015
10
50 700
85
65 60
10
Adcinando em um heap máx
16
5 11
3 18
16
18 11
3 5
18
16 11
3 5
Mesmas operações, mas os maiores elementos vão para o topo
11
Exercício
Mostre o estado do heap de mínima após adição dos seguintes elementos:
6, 50, 11, 25, 42, 20, 104, 76, 19, 55, 88, 2
12
A operação min/max min/max em um heap é trivial; Basta acessar
o topo do heap min/max tem custo O(1) (Constante)
996040
8020
10
50 700
85
65
13
Remoção heaps só permitem a remoção do menor(maior) elemento, também
chamada de raiz) Deve remover a raiz e manter as propriedades de completude e ordenação; intuitivamente, o último elemento deve desaparecer Abordagem: trocar a raiz pela última folha(não é suficiente)
996040
8020
10
700 50
85
65
996040
8020
65
700 50
85
65
14
Removendo... Deve arrumar a propriedade da ordenação; raiz fora da
ordem Empurar a raiz para baixo até a sua posição Trocar com o menor dos dois filhos
O que acontece se a troca não for realizada sempre?
996040
8020
65
700 50
85 996050
8040
20
700 65
85
15
Exercício Considere o heap com os seguintes
elementos:
6, 50, 11, 25, 42, 20, 104, 76, 19, 55, 88, 2
Mostre o estado do heap após a remoção de três elementos. Lembre-se que:– Remoção só pode ocorrer na raiz do
heap.
16
Construindo um heap O algoritmo heapifica
– Execute a operação de "empurar" elementos que não sejam folha;
Iniciar do nó interno mais a direita e seguindo em direção a raiz
Por que a operação heapifica funciona?
Quanto custa a operação ?
66014
1821
45
32 456021
1814
6
32
17
Implementação
i Item Esqfilho
2*i dirfilho
1 Pam 2 2 32 Joe 4 4 53 Sue 6 6 74 Bob 8 8 95 Mike 10 10 -16 Sam -1 11 -17 Tom -1 13 -18 Ann -1 15 -19 Jane -1 17 -110 Mary -1 19 -1
Bob Mike Sam Tom
Pam
Joe Sue
Ann Jane Mary
• FilhoEsq(i) = 2*i
• FilhoDir(i) = 2*i + 1
Pode-se implementar um heap usando um vetor
18
Implementação....
i Item Pai i / 2 1 Pam -1 02 Joe 1 13 Sue 1 14 Bob 2 25 Mike 2 26 Sam 3 37 Tom 3 38 Ann 4 49 Jane 4 410 Mary 5 5
Bob Mike Sam Tom
Pam
Joe Sue
Ann Jane Mary
• pai(i) = i / 2
Quem é o pai?
19
Implementando...resumo
Use um vetor Índice da raiz deve ser igual a 1(um); Para cada elemento n de índice i,
Descendente a esquerda tem índice = 2i Descendente a direita tem índice = 2i + 1
20
Vantagens da representação
As operações são rápidas Adcionar um novo elemento (O(1)) Determinar o pai de um elemento (O(1)) Trocar pai e filho (O(1)) Soluções derivadas são em geral bem elegantes
construirHeap(vetor v) {
para (i = v.tam() / 2; i > 0; i--) {
heapifica(v, i);
}
}
21
ExercíciosImplemente o algoritmo heapifica;
– Em um heap de max e min;
Implemente o algoritmo de remoção;– Em um heap de max e min;
Implemente o algoritmo de determinação do top;
23
Heap sort heap sort: Ordena um vetor de N elementos transformando o
vetor em um heap, e então executa a operação remove N vezes Os elementos serão removidos ordenadamente! É possível então ordená-los em um novo vetor Qual o tempo de execução?
24
Uma heap de máxima O heap mostrado anteriormente é um heao de mínima
uma vez que os elementos são recuparados em um ordem ascendente
Em um heap de máxima os elementos saem em um ordem descendente
25
Melhorando a...
O heap sort mostrado requer um segundo vetor;
Com o um heap de máxima o heap sort não irá precisar de um vetor auxiliar O(n log n); Sem demanda extra por espaço! Adequado para equipamento com pouca memória elegância
26
Melhorando o heap sort
Use um vetor para construir o heap, com o índice 0 guardando a raiz;
Após a operação de construção do heap:
27
Melhorando ....
Estado após a operação de remoção: Ao remover o elemento coloque-o no final do vetor
Top Related