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
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
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].
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].
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
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