29
1 Algoritmos e Estrutura de dados II Fila de Prioridade e Heaps

Algoritmos e Estrutura de dados II fileAlgoritmos e Estrutura de dados II Fila de Prioridade e Heaps. 2 Agenda

Embed Size (px)

Citation preview

1

Algoritmos e Estrutura de dados II

Fila de Prioridade e Heaps

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

3

Implementado uma fila de prioridade usando um heap

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;

22

Heap sort

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

28

Melhorando...

O estado após duas remoções: Note que os maiores elementos estão no final do

vetor

29

Algoritmos de ordenação

Melhor Caso Pior CasoSeleção n2 n2

Bolha n n2

Inserção n n2

Heapsort n log 2 n n log 2 n

Mergesort n log 2 n n log 2 nQuicksort n log 2 n n2