Você está na página 1de 23

Filas de Prioridade

Prof. Tlio Toffolo http://www.toffolo.com.br

BCC202 Aula 17 Algoritmos e Estruturas de Dados I

FILAS DE PRIORIDADE

Fila de Prioridade
! uma estrutura de dados onde a chave de cada item reflete sua habilidade relativa de abandonar o conjunto de itens rapidamente. ! Aplicaes:
! SOs usam filas de prioridades, nas quais as chaves representam o tempo em que eventos devem ocorrer. ! Mtodos numricos iterativos so baseados na seleo repetida de um item com maior (menor) valor. ! Sistemas de gerncia de memria usam a tcnica de substituir a pgina menos utilizada na memria principal por uma nova pgina.
3

TAD - Fila de Prioridade


! Operaes:
1.! Constri uma fila de prioridades a partir de um conjunto com n itens. 2.! Informa qual o maior item do conjunto. 3.! Retira o item com maior chave. 4.! Insere um novo item. 5.! Aumenta o valor da chave do item i para um novo valor que maior que o valor atual da chave.

TAD - Fila de Prioridade


! Operaes:
6.! Substitui o maior item por um novo item, a no ser que o novo item seja maior. 7.! Altera a prioridade de um item. 8.! Remove um item qualquer. 9.! Agrupar duas filas de prioridades em uma nica.

Filas de Prioridades - Representao


! Lista linear ordenada:
! Constri O(n log n) ou O(n2). ! Insere O(n). ! Retira O(1). ! Altera O(n).

! Lista linear no ordenada:


! Constri O(n). ! Insere O(1). ! Retira O(n). ! Altera O(n)
6

FILA DE PRIORIDADE:

HEAP

Heap
! A melhor representao de uma fila de prioridade atravs de uma estrutura de dados chamada heap:
! Neste caso, Constri O(n). ! Insere, Retira, Substitui e Altera so O(log n).

! Observao:
! Para implementar a operao Agrupar de forma eficiente e ainda preservar um custo logartmico para as operaes Insere, Retira, Substitui e Altera necessrio utilizar estruturas de dados mais sofisticadas, tais como rvores binomiais (Vuillemin, 1978).
8

Heap
! uma rvore binria em que um n filho sempre maior ou igual a um n pai. ! Ou seja: chave(v) ! chave(pai(v))
2 5 9 7 6 n raiz (menor elemento)

Heap
! rvore binria completa:
! Os ns so numerados de 0 a n-1. ! O primeiro n chamado raiz. ! O n (k-1)/2 o pai do n k, para 0 < k < n. ! Os ns 2k+1 e 2k+2 so os filhos esquerda e direita do n k, para 0 < k <= n/2.

10

Heap
! Cada n possui uma tupla (chave, elemento)
! Assim, cada n do heap armazena todo o item sendo armazenado

(2, Sue) (5, Pat) (9, Jeff) (7, Anna) (6, Mark)

11

Heaps
! As chaves na rvore satisfazem a condio do heap. ! A chave em cada n menor do que as chaves em seus filhos. ! A chave no n raiz a menor chave do conjunto. ! Uma rvore binria completa pode ser representada por um array:
0 2 1 5 2 6 3 9 4 7 5 8 6! 10!
12

Heaps
! A representao extremamente compacta. ! Permite caminhar pelos ns da rvore facilmente.
! Os filhos de um n i esto nas posies 2i+1 e 2i+2. ! O pai de um n i est na posio (i-1) div 2.

! Na representao do heap em um arranjo, a menor (ou maior) chave est sempre na posio 0 do vetor.

13

Heaps
! Um algoritmo elegante para construir o heap foi proposto por Floyd em 1964. ! O algoritmo no necessita de nenhuma memria auxiliar. ! Dado um vetor A[0], A[1], ..., A[n-1]:
! Os itens A[n/2], A[n/2 + 1], ..., A[n-1] formam um heap vlido pois so ns folhas (ns que no possuem filhos). ! Neste intervalo no existem dois ndices i e j tais que j = 2i+1 ou j = 2i+2.

14

Heaps

0 Vetor inicial! ! Esq = 2! ! Esq = 1! ! Esq = 0! ! Esq = 0! 9 ! 9 ! 9 ! 2 2

1 5 5 3 3 3

2 6 2 2 9 6

3 8 8 8 8 8

4 3 3 5 5 5

5 2 6 6 6 9

6! 7! 7! 7! 7! 7!

15

Heaps
! Os itens de A[3] a A[6] formam um heap. ! O heap estendido para a esquerda (Esq = 3), englobando o item A[2], pai dos itens A[5] e A[6]. ! A condio de heap violada:
! O heap refeito trocando os itens A[2] e A[5].

! O item 5 (A[1]) incluindo no heap (Esq = 1) ! A condio de heap violada:


! O heap refeito trocando os itens A[1] e A[4].

16

Heaps
! O item 9 (A[0]) incluindo no heap (Esq = 0) ! A condio de heap violada:
! O heap refeito trocando os itens A[0] e A[1].

! Como a condio ainda est sendo violada:


! O heap refeito trocando os itens A[1] e A[4].

! Como resultado, o heap foi construdo: ! 2 3 6 8 5 9 7!

17

OPERAES

HEAP

Inserir um N no Heap

2 5 9 7

N sendo inserido
2 5 9 7 6

Comparar o n inserido com os pais e trocar enquanto ele for menor que o pai ou at que ele seja o n raiz
19

Inserir um N no Heap
! Na pior das hipteses o custo de uma insero ser O(n log n), equivalente altura da rvore
2 5 9 7 1

6 1 5 9 7 2

6
20

Remover um N do Heap
2 5 6

w
9 7

ltimo N
7 5 9

Trocar o n raiz pelo


6

ltimo n do heap e remover o ltimo n

novo ltimo N
21

Remover um N do Heap
! Refazer o heap! ! Na pior das hipteses o custo de uma remoo ser O(n log n), equivalente altura da rvore
7 5 9 6

5 7 9
22

Perguntas?
23