• Nenhum resultado encontrado

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014

N/A
N/A
Protected

Academic year: 2021

Share "Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014"

Copied!
56
0
0

Texto

(1)

Filas de prioridade

Marcelo K. Albertini

(2)

Filas de prioridade

O que ´e uma fila de prioridade?

Estrutura de dados que generaliza a ideia de ordena¸c˜ao.

Cole¸c˜oes de elementos: inserir e remover itens. Qual remover?

◮ Pilha - remover o item mais novo ◮ Fila - remover o item mais velho

(3)

Exemplo de uso de filas de prioridade

opera¸c˜ao item valor obtido

inserir P inserir Q inserir E remover m´aximo Q inserir X inserir A inserir M remover m´aximo X inserir P inserir L inserir E remover m´aximo P 3/1

(4)

Aplica¸c˜oes

◮ Simula¸c˜ao orientada a eventos ◮ clientes em uma fila ◮ colis˜ao de part´ıculas ◮ Compress˜ao de dados ◮ C´odigo de Huffman ◮ Busca em grafos ◮ Algoritmo de Dijkstra ◮ Algoritmo de Prim ◮ Inteligˆencia artificial ◮ Busca A* ◮ Sistemas operacionais ◮ balanceamento de carga ◮ manipula¸c˜ao de interrup¸c˜oes ◮ Filtragem de spam bayesiano ◮ Ranking web

(5)

Tipo abstrato de dados - API

class MaxFila <Chave extends Comparable<Chave> >

MaxFila() criar fila de prioridade vazia

MaxFila(Chave[] v) criar fila com chaves

void inserir(Chave c) inserir chave na fila

Chave removerMax() retornar e remover chave m´axima

boolean estaVazio() a fila est´a vazia?

Chave max() retorna chave m´axima

int tamanho() n´umero de entradas na fila

Chave deve serComparable, ou seja, compar´avel com outras chaves e deve ter um m´etodo c1.compareTo(c2) que retorna valor:

negativo se c1 < c2, ouzero se c1 == c2

oupositivo se c1 > c2.

(6)

Exemplo de uso de fila de prioridade

Encontrar os M maiores itens de uma sequˆencia N itens

◮ Detec¸c˜ao de fraudes e ataques em redes de computadores ◮ Processamento de consultas em buscador web

Restri¸c˜ao

n˜ao h´a espa¸co de mem´oria para guardar os N itens Exemplo:detec¸c˜ao de fraudes Marcelo $80 Joao $30000 Maria $9999 Paulo $10000000 Beatriz $910 ... Suspeitos: Paulo $10000000 Joao $30000

(7)

Meta

Encontrar os M maiores itens de uma sequˆencia N itens: usar uma

MinFila.

1 M i n F i l a <Pagina> f i l a = new M i n F i l a <Pagina >() ; 2 S t r i n g c o n s u l t a = r e c e b e r C o n s u l t a ( ) ; 3 4 w h i l e ( t e c l a d o . naoTerminou ( ) ) { 5 S t r i n g l i n h a = r e c e b e r C o n s u l t a ( ) ; 6 7 // cada p a g i n a tem um v a l o r de r e l e v a n c i a p/ c o n s u l t a 8 P a g i n a p = new P a g i n a ( l i n h a , c o n s u l t a ) ; 9 10 f i l a . i n s e r i r ( p ) ; 11 12 // remove me n o re s p/ s o b r a r m a i o r e s 13 i f ( f i l a . tamanho ( ) > M) // 14 f i l a . removerMin ( ) ; 15 } 7/1

(8)

Meta

Encontrar os M maiores itens de uma sequˆencia N itens: usar uma

MinFila.

Complexidades

implementa¸c˜ao tempo espa¸co fila elementar m× n m

ordena¸c˜ao nlog n n heap bin´aria nlog m m melhor te´orico n m

(9)

1 // M a x F i l a : v e r s ˜a o com v e t o r d e s o r d e n a d o

2 c l a s s MaxFila <Chave e x t e n d s Comparable<Chave>> { 3

4 Chave [ ] f i l a ; // f i l a [ i ] = i −e s i m o e l e m e n t o

5 i n t N ; 6

7 p u b l i c M a x F i l a (i n t c a p a c i d a d e ) {

8 f i l a = ( Chave [ ] ) new Comparable [ c a p a c i t y ] ;

9 } 10 11 b o o l e a n e s t a V a z i o ( ) { r e t u r n(N==0) ; } 12 13 i n s e r i r ( Chave c ) { f i l a [ N++] = c ; } 14 15 Chave removerMax ( ) { 16 i n t max = 0 ; 17 f o r (i n t i =1; i < N ; i ++) 18 i f ( f i l a [ max ] . compareTo ( f i l a [ i ] ) < 0 ) 19 max = i ; 20 21 t r o c a ( max , N−1) ; 22 r e t u r n f i l a [−−N ] ; 23 } 24 } 9/1

(10)

Implementa¸c˜ao de filas de prioridade

Meta

Implementar todas as opera¸c˜oes eficientemente. Implementa¸c˜ao inser¸c˜ao remo¸c˜ao

vetor desordenado 1 N

vetor ordenado N 1

(11)

Heap bin´aria

O que ´e?

Heap bin´aria ´e uma estrutura de dados que permite a execu¸c˜ao eficiente das opera¸c˜ao de inser¸c˜ao e remo¸c˜ao em filas de prioridade.

Heap bin´aria ´e um tipo de ´arvore

(12)

´

Arvores

´

Arvore bin´aria

Vazia ou n´os com liga¸c˜oes `a direita ou `a esquerda para outras ´arvores.

´

Arvore bin´aria completa

Perfeitamente balanceada. Cada n´ıvel possui todos os n´os poss´ıveis, exceto, possivelmente o ´ultimo.

◮ altura de uma ´arvore bin´aria ´e ⌊logN⌋ ◮ altura aumenta quando N for potˆencia de 2

(13)
(14)

Heap bin´aria

Uma ´arvore bin´aria completa

◮ Chaves est˜ao em n´os

◮ Chaves-pais n˜ao s˜ao menores que chaves-filhas

T R A O S N G H P I E

(15)

Propriedades da heap bin´aria

◮ Implementa¸c˜ao em um vetor

◮ Maior chave est´a em v[1], que ´e a raiz da ´arvore bin´aria ◮ Usa posi¸c˜oes do vetor para liga¸c˜oes entre n´os

◮ N´o pai do n´o na posi¸c˜ao k est´a na posi¸c˜oes ⌊(k/2)⌋ ◮ Lembre-se ⌊1.9⌋ = 1

◮ Filhos do n´o na posi¸c˜ao k est˜ao em 2k e 2k + 1

T R A O S N G H P I E 1 2 3 4 5 6 7 8 9 10 11 T 1 S 2 R 3 P 4 N 5 O 6 A 7 E 8 I 9 H 10 G 11 15/1

(16)

Implementa¸c˜ao de opera¸c˜oes da heap bin´aria

◮ Propriedades invariantesda heap bin´aria devem sersempre mantidas

◮ Na inser¸c˜aoouremo¸c˜ao de chaves, verificar e corrigir viola¸c˜oes de propriedades

(17)

Promo¸c˜ao em max-heap bin´aria

Cen´ario

Chave-filha torna-se maior que chave-pai. Isso provoca uma

viola¸c˜aode regras da heap.

Para eliminar a viola¸c˜ao

◮ Trocar chave-folha com chave-pai ◮ Repetir at´e corrigir todas as viola¸c˜oes

T R A O S N G H P I Z Z R A O T N G H S I P 17/1

(18)

Promo¸c˜ao em max-heap: algoritmo

Elemento fila[k/2] deve ser maior que fila[k], se n˜ao for devemos troc´a-los. 1 v o i d promocao (i n t k ) { 2 w h i l e ( k > 1 && ( f i l a [ k / 2 ] . compareTo ( f i l a [ k ] )< 0 ) ) { 3 t r o c a ( k , k / 2 ) ; // t r o c a p o i s f i l a [ k / 2 ] < f i l a [ k ] 4 k = k / 2 ; // s o b e na ´a r v o r e com d i v i s ˜a o i n t e i r a 5 } 6 }

(19)

Inser¸c˜ao em max-heap bin´aria

◮ Inser¸c˜ao: Inserir n´o no fim do vetor e aplique a promo¸c~ao ◮ Custo: No m´aximo 1 + log N compara¸c˜oes

1 v o i d i n s e r c a o ( Chave c ) { 2 f i l a [++N ] = c ;

3 promocao (N) ;

4 }

(20)

1 v o i d i n s e r c a o ( Chave c ) { 2 f i l a [++N ] = c ; promocao (N) ; 3 } 1 v o i d promocao (i n t k ) { 2 w h i l e ( k > 1 && 3 ( f i l a [ k / 2 ] . compareTo ( f i l a [ k ] ) < 0 ) ) { 4 t r o c a ( k , k / 2 ) ; 5 k = k / 2 ; 6 } 7 }

Come¸car com inser¸c˜ao no fim.

Inser¸c˜ao da chave = 9 8 1 7 2 5 3 6 4 1 5 3 6 2 7 4 8 9 9

(21)

1 v o i d i n s e r c a o ( Chave c ) { 2 f i l a [++N ] = c ; promocao (N) ; 3 } 1 v o i d promocao (i n t k ) { 2 w h i l e ( k > 1 && 3 ( f i l a [ k / 2 ] . compareTo ( f i l a [ k ] ) < 0 ) ) { 4 t r o c a ( k , k / 2 ) ; 5 k = k / 2 ; 6 } 7 }

Promo¸c˜ao no lugar do pai 9/2 = 4 Inser¸c˜ao da chave = 9 8 1 7 2 5 3 6 4 1 5 3 6 2 7 4 8 9 9 8 1 7 2 5 3 9 4 1 5 3 6 2 7 4 8 6 9 20/1

(22)

1 v o i d i n s e r c a o ( Chave c ) { 2 f i l a [++N ] = c ; promocao (N) ; 3 } 1 v o i d promocao (i n t k ) { 2 w h i l e ( k > 1 && 3 ( f i l a [ k / 2 ] . compareTo ( f i l a [ k ] ) < 0 ) ) { 4 t r o c a ( k , k / 2 ) ; 5 k = k / 2 ; 6 } 7 }

Promo¸c˜ao no lugar do pai 4/2 = 2 Inser¸c˜ao da chave = 9 8 1 7 2 5 3 6 4 1 5 3 6 2 7 4 8 9 9 8 1 7 2 5 3 9 4 1 5 3 6 2 7 4 8 6 9 8 1 7 2 5 3 9 4 1 5 3 6 2 7 4 8 6 9 8 1 9 2 5 3 7 4 1 5 3 6 2 7 4 8 6 9

(23)

1 v o i d i n s e r c a o ( Chave c ) { 2 f i l a [++N ] = c ; promocao (N) ; 3 } 1 v o i d promocao (i n t k ) { 2 w h i l e ( k > 1 && 3 ( f i l a [ k / 2 ] . compareTo ( f i l a [ k ] ) < 0 ) ) { 4 t r o c a ( k , k / 2 ) ; 5 k = k / 2 ; 6 } 7 }

Promo¸c˜ao no lugar do pai 1/2 = 1 Inser¸c˜ao da chave = 9 8 1 7 2 5 3 6 4 1 5 3 6 2 7 4 8 9 9 8 1 7 2 5 3 9 4 1 5 3 6 2 7 4 8 6 9 8 1 7 2 5 3 9 4 1 5 3 6 2 7 4 8 6 9 8 1 9 2 5 3 7 4 1 5 3 6 2 7 4 8 6 9 8 1 9 2 5 3 7 4 1 5 3 6 2 7 4 8 6 9 9 1 8 2 5 3 7 4 1 5 3 6 2 7 4 8 6 9 20/1

(24)

Demo¸c˜ao em max-heap bin´aria

Cen´ario

Chave-pai se torna menor que alguma chave-filha. Viola¸c˜ao!

Para eliminar aviola¸c˜ao

◮ Trocar chave na posi¸c˜ao pai com chave na posi¸c˜ao filha com maior chave.

◮ Porque n˜ao filho com menor chave? ◮ Repetir at´e resolver todas as viola¸c˜oes

A R A O S P N S R A O P H N

(25)

Implementa¸c˜ao: demo¸c˜ao

1 v o i d democao (i n t[ ] f i l a , i n t k , i n t N) { 2 w h i l e ( 2 ∗ k <= N) { 3 i n t e s q = 2∗ k ; // f i l h o da ”e s q u e r d a ” 4 i n t d i r = 2∗ k +1; // f i l h o da ” d i r e i t a ” 5 6 m a i o r = e s q ; 7 // compara com f i l h o da ” d i r e i t a ” p a r a p e g a r m a i o r 8 i f ( ( f i l a [ e s q ] . compareTo ( f i l a [ d i r ] ) <0)&&(e s q < N) ) 9 m a i o r = d i r ; 10 11 i f ( f i l a [ k ] . compareTo ( f i l a [ m a i o r ] ) >= 0 ) 12 b r e a k; // i n t e r r o m p e r p r o c e s s o de democao 13 14 t r o c a ( k , m a i o r ) ; // e f e t u a r democao 15 k = m a i o r ; 16 } 17 } 22/1

(26)

Execu¸c˜ao da demo¸c˜ao

0 1 8 2 7 3 5 4 6 5 2 6 3 7 1 8 4 9 9 10 8 1 0 2 7 3 5 4 6 5 2 6 3 7 1 8 4 9 9 10 0 7 3 2 8 6 5 4 1 8 7 3 2 0 6 5 4 1

(27)

Execu¸c˜ao da demo¸c˜ao

8 1 0 2 7 3 5 4 6 5 2 6 3 7 1 8 4 9 9 10 8 1 6 2 7 3 5 4 0 5 2 6 3 7 1 8 4 9 9 10 8 7 3 2 0 6 5 4 1 8 7 3 2 6 0 5 4 1 23/1

(28)

Remover max = 9 9 1 8 2 6 3 5 4 7 5 2 6 3 7 0 8 1 9 4 10 4 1 8 2 6 3 5 4 7 5 2 6 3 7 0 8 1 9 9 6 3 2 8 7 4 5 1 0 4 6 3 2 8 7 5 1 0

(29)

4 1 8 2 6 3 5 4 7 5 2 6 3 7 0 8 1 9 8 1 4 2 6 3 5 4 7 5 2 6 3 7 0 8 1 9 4 6 3 2 8 7 5 1 0 8 6 3 2 4 7 5 1 0 24/1

(30)

8 1 4 2 6 3 5 4 7 5 2 6 3 7 0 8 1 9 8 1 7 2 6 3 5 4 4 5 2 6 3 7 0 8 1 9 8 6 3 2 4 7 5 1 0 8 6 3 2 7 4 5 1 0

(31)

Remover max = 8 8 1 7 2 6 3 5 4 4 5 2 6 3 7 0 8 1 9 1 1 7 2 6 3 5 4 4 5 2 6 3 7 0 8 8 6 3 2 7 4 5 1 0 1 6 3 2 7 4 5 0 24/1

(32)

1 1 7 2 6 3 5 4 4 5 2 6 3 7 0 8 7 1 1 2 6 3 5 4 4 5 2 6 3 7 0 8 1 6 3 2 7 4 5 0 7 6 3 2 1 4 5 0

(33)

7 1 1 2 6 3 5 4 4 5 2 6 3 7 0 8 7 1 5 2 6 3 1 4 4 5 2 6 3 7 0 8 7 6 3 2 1 4 5 0 7 6 3 2 5 4 1 0 24/1

(34)

Remover max = 7 7 1 5 2 6 3 1 4 4 5 2 6 3 7 0 8 0 1 5 2 6 3 1 4 4 5 2 6 3 7 7 6 3 2 5 4 1 0 0 6 3 2 5 4 1

(35)

0 1 5 2 6 3 1 4 4 5 2 6 3 7 6 1 5 2 0 3 1 4 4 5 2 6 3 7 0 6 3 2 5 4 1 6 0 3 2 5 4 1 24/1

(36)

6 1 5 2 0 3 1 4 4 5 2 6 3 7 6 1 5 2 3 3 1 4 4 5 2 6 0 7 6 0 3 2 5 4 1 6 3 0 2 5 4 1

(37)

Remover max = 6 6 1 5 2 3 3 1 4 4 5 2 6 0 7 0 1 5 2 3 3 1 4 4 5 2 6 6 3 0 2 5 4 1 0 3 2 5 4 1 24/1

(38)

0 1 5 2 3 3 1 4 4 5 2 6 5 1 0 2 3 3 1 4 4 5 2 6 0 3 2 5 4 1 5 3 2 0 4 1

(39)

5 1 0 2 3 3 1 4 4 5 2 6 5 1 4 2 3 3 1 4 0 5 2 6 5 3 2 0 4 1 5 3 2 4 0 1 24/1

(40)

Remover max = 5 5 1 4 2 3 3 1 4 0 5 2 6 2 1 4 2 3 3 1 4 0 5 5 3 2 4 0 1 2 3 4 0 1

(41)

2 1 4 2 3 3 1 4 0 5 4 1 2 2 3 3 1 4 0 5 2 3 4 0 1 4 3 2 0 1 24/1

(42)

Remover max = 4 4 1 2 2 3 3 1 4 0 5 0 1 2 2 3 3 1 4 4 3 2 0 1 0 3 2 1

(43)

0 1 2 2 3 3 1 4 3 1 2 2 0 3 1 4 0 3 2 1 3 0 2 1 24/1

(44)

Remover max = 3 3 1 2 2 0 3 1 4 1 1 2 2 0 3 3 0 2 1 1 0 2

(45)

1 1 2 2 0 3 2 1 1 2 0 3 1 0 2 2 0 1 24/1

(46)

Remover max = 2 2 1 1 2 0 3 0 1 1 2 2 0 1 0 1

(47)

0 1 1 2 1 1 0 2 0 1 1 0 24/1

(48)

Remover max = 1 1 1 0 2 0 1 1 0 0

(49)

Remover max = 0 0 1 0 1 0 0 24/1

(50)

Opera¸c˜ao removerMax()

Remover chave m´axima

Trocar raiz com n´o no fim e aplicar o processo de demo¸c˜ao.

1 Chave removerMax ( ) { 2 Chave max = f i l a [ 1 ] ; 3 t r o c a ( 1 , N) ; 4 N−−; 5 democao ( 1 ) ; 6 f i l a [ N+1] = n u l l; // l i b e r a mem´oria 7 r e t u r n max ; 8 } Custo

(51)

Custos de opera¸c˜oes de listas de prioridade

implementa¸c˜ao inser¸c˜ao remover m´aximo ver m´aximo

vetor desordenado 1 N N

vetor ordenado N 1 1

heap bin´ario log N log N 1

heap d-´aria logdN dlogdN 1

heap de Fibonacci 1 log N 1

imposs´ıvel 1 1 1

Porque ter todas as opera¸c˜oes lineares ´e imposs´ıvel?

(52)

Observa¸c˜oes gerais

Lista de prioridade orientada ao m´ınimo: min-heap

Trocar opera¸c˜oes de compara¸c˜ao compareTo

Outras opera¸c˜oes

◮ Ao inserir, evitar overflowe usar opera¸c˜ao de redimensionar vetor

◮ Ao remover, verificar e lan¸car exce¸c˜ao se fila est´a vazia ◮ Remo¸c˜ao de item arbitr´ario

◮ Mudar prioridade de item

(53)

Heapsort com ordena¸c˜ao no lugar (in-place)

Ideia

◮ fazer in-place, ou seja, sem usar vetor auxiliar

◮ criar uma heap bin´aria orientada ao m´aximo (max heap) com todas as chaves dispon´ıveis

◮ aplicar removerMax para cada uma das chaves, at´e acabar a heap

(54)

Heapsort com cria¸c˜ao da heap in-place

Primeira passada: criar heap usando m´etodo bottom-up.

1 f o r (i n t k = N/ 2 ; k >= 1 ; k−−) 2 democao ( v e t , k , N) ;

Segunda passada: remover o m´aximo, um por vez, deixar elemento no vetor em vez de liberar mem´oria (com null).

1 w h i l e (N > 1 ) { 2 t r o c a ( v e t , 1 , N−−) ; 3 democao ( v e t , 1 , N) ; 4 }

(55)

An´alise matem´atica

◮ Constru¸c˜ao da heap usa at´e 2N compara¸c˜oes e trocas ◮ Heapsort usa at´e 2N log N compara¸c˜oes e trocas

◮ Heapsort ´e um algoritmo in-place com pior caso O(N log N)

Compara¸c˜oes

◮ Mergesort: n˜ao ´e in-place e usa O(n) espa¸co extra ◮ Quicksort: quadr´atico no pior caso

◮ Heapsort: N log N, sem espa¸co extra

◮ Mal uso de caching pelo uso frequente de referˆencias em posi¸c˜oes n˜ao cont´ınuas da mem´oria

◮ N˜ao ´e est´avel

◮ Itera¸c˜ao interna mais longa que do Quicksort (constante de complexidade maior no caso m´edio)

(56)

Tabela de algoritmos

no lugar est´avel pior m´edio melhor coment´ario

sele¸c˜ao S N2/2 N2/2 N2/2 N trocas

inser¸c˜ao S S N2/2 N2/4 N bom p/ pequeno N

shell S ? ? N acil e < N2

quick S N2/2 2N log N Nlog N mais r´apido na pr´atica

quick 3 S N2/2 2N log N N chaves duplicadas

merge S Nlog N Nlog N Nlog N est´avel e garantido

heap S 2N log N 2N log N Nlog N no lugar e garantido

ideal S S Nlog N Nlog N Nlog N

Referências

Documentos relacionados

Os testes de desequilíbrio de resistência DC dentro de um par e de desequilíbrio de resistência DC entre pares se tornarão uma preocupação ainda maior à medida que mais

e l final de Una Política Pública : análisis del ciclo Político del Proyecto destinos indUctores Para el desarrollo tUristico regional (didtr) – b rasil ...496 María Belén

3 O presente artigo tem como objetivo expor as melhorias nas praticas e ferramentas de recrutamento e seleção, visando explorar o capital intelectual para

Projetil encamisado por uma camisa pré-sulcada de latão endurecido, contendo chumbo não endurecido no seu interior, dotado de uma ponta oca. HYDRA SHOCK centro, que

15, estão representados os teores médios de safrol contido em óleo essencial obtido, no decorrer do progresso de extração, da biomassa aérea de pimenta longa procedente de cultivos

As técnicas são baseadas em descontinuidade: detecção de pontos isolados, detecção de linhas e detecção de bordas, e similaridade: limiares (Thresholding), crescimento de

Foram incluídos no estudo os portadores de cirrose hepática e carcinoma hepatocelular diagnosticado pelos critérios da EASL ( European Association for the Study of the Liver ). Após

General: Knowing the conceptual and methodological foundations of the main projective methods; Identify and understand the operational concepts of projection and distress; Identify