Beruflich Dokumente
Kultur Dokumente
1 / 78
Algoritmos Gulosos
Eduardo Camponogara
Departamento de Automao e Sistemas ca Universidade Federal de Santa Catarina
14 de abril de 2010
2 / 78
Introduo ca Um problema de seleo de atividades ca Elementos dos algoritmos gulosos Cdigos Human o
3 / 78
Sumrio a
Introduo ca Um problema de seleo de atividades ca Elementos dos algoritmos gulosos Cdigos Human o
4 / 78
Introduo ca
Algoritmos Gulosos
Algoritmos para problemas de otimizao tipicamente ca executam uma seqncia de passos, com um conjunto de ue escolhas a cada passo. Um Algoritmo Guloso sempre escolhe a melhor opo para o ca momento. Ele faz uma escolha tima local esperando que esta o leve a o uma soluo tima global. ca o
5 / 78
Introduo ca
Algoritmos Gulosos
Este cap tulo explora os problemas de otimizao que podem ser ca resolvidos por algoritmos gulosos:
Problema de seleo de atividades ca Compresso de dados (Human) a Matrides o Agendamento de tarefas de tempo unitrio com deadlines e a penalidades
6 / 78
Introduo ca
Algoritmos Gulosos
Outros exemplos:
7 / 78
Sumrio a
Introduo ca Um problema de seleo de atividades ca Elementos dos algoritmos gulosos Cdigos Human o
8 / 78
Dado o conjunto S = {a1 , a2 , . . . , an } de n atividades propostas que desejam utilizar um dado recurso, como uma sala de aula, que pode ser utilizada por apenas uma atividade por vez. Cada atividade ai possui:
instante de in si cio instante de trmino fi e tal que a condio a seguir satisfeita: 0 si < fi < ca e
9 / 78
Denio do problema ca
Caso selecionada, a atividade ai posiciona-se no intervalo semi-aberto [si , fi ). Atividades ai e aj so compat a veis se os intervalos [si , fi ) e [sj , fj ) no se sobrepem. a o
10 / 78
Problema
Selecione o conjunto tamanho-mximo de atividades mutuamente a compat veis.
11 / 78
1 1 4
2 3 5
3 0 6
4 5 7
5 3 8
6 5 9
7 6 10
8 8 11
9 8 12
10 2 13
11 12 14
Para este exemplo, {a3 , a9 , a11 } so atividades mutuamente a compat veis. {a1 , a4 , a8 , a11 } so tambm compat a e veis, que o maior e conjunto de atividades mutuamente compat veis Outro conjunto mximo {a2 , a4 , a9 , a11 }. a e
12 / 78
Seja Sij = {ak S : fi sk < fk sj } o conjunto das atividades que podem iniciar aps a atividade ai terminar, e o antes de aj iniciar. De fato, Sij consiste de todas as atividades que so a compat veis com:
i) ai e aj ; ii) todas as atividades que terminam antes ou no momento de trmino de ai ; e iii) todas as atividades iniciam no momento ou aps o in de aj . o cio
13 / 78
Para representar o problema completo, adicionamos atividades ct cias a0 e an+1 e adotamos a conveno f0 = 0 e sn+1 = . ca Ento, S = S0,n+1 , e os limites para i e j so dados por 0 i, a a j n + 1. Assumiremos tambm que as atividades esto ordenadas em e a ordem monotnica crescente do instante de trmino o e f0 f1 f2 . . . fn fn+1
14 / 78
Proposio ca
Sij = com i j
Demonstrao ca
Suponha que ak Sij , ento a fi sk < fk sj < fj = fi < fj que uma contradio. e ca
15 / 78
Conclu mos que, assumindo que as atividades esto ordenadas a em ordem monotnica crescente do instante de trmino, o o e subproblema selecionar o conjunto tamanho-mximo de e a atividades mutuamente compat veis de Sij , para 0 i < j n + 1, sabendo que todos os outros Sij so vazios. a Considere o subproblema Sij no vazio, e suponha que a a soluo para Sij inclui alguma atividade ak , de forma que ca fi sk < fk sj .
16 / 78
Sik : atividades que iniciam depois de ai e terminam antes que ak inicie, Skj : atividades que iniciam depois de ak e terminam antes que aj inicie.
Cada par (Sik , Skj ) consiste de subconjuntos das atividades em Sij . A soluo a unio das solues para Sik e Skj com a ca e a co atividade ak .
17 / 78
Se uma soluo tima Aij para Sij inclui a atividade ak , ento ca o a as solues Aik para Sik e Akj para Skj tambm devem ser co e timas. o Obtemos portanto uma soluo tima Aij fazendo: ca o Aij = Aik {ak } Akj
18 / 78
Seja c[i, j] o nmero de atividades em um conjunto u tamanho-mximo de atividades mutuamente compat a veis em Sij . Temos que c[i, j] = 0 sempre que Sij = ; em particular, c[i, j] = 0 para i j Recursivamente: c[i, j] = 0 maxi<k<j {c[i, k] + c[k, j] + 1} se Sij = se Sij =
19 / 78
Soluo Gulosa ca
Teorema
Considere qualquer subconjunto Sij no vazio, e seja am a a atividade em Sij com menor instante de trmino: e fm = min{fk : ak Sij } Ento: a 1) A atividade am usada em algum conjunto tamanho-mximo e a de atividades mutuamente compat veis em Sij . 2) O subconjunto Sim vazio, e a escolha de am faz com que e Smj seja o unico subproblema no vazio. a
20 / 78
Soluo Gulosa ca
Demonstrao ca
Primeiro, provaremos (2) antes porque mais simples. e Suponha Sim no vazio, de maneira que exista uma atividade a ak tal que fi ak < fk sm < fm Ento ak est tambm em Sij e possui um instante de trmino a a e e anterior a am , que contradiz com a escolha. Conclu mos ento que Sim vazio. a e
21 / 78
Soluo Gulosa ca
Demonstrao ca
Para provar a primeira parte, suponha que Aij um e subconjunto tamanho-mximo de atividades mutuamente a compat veis com Sij Ordene as atividades em Aij em ordem monotonicamente crescente de instante de trmino. e Seja ak a primeira atividade em Aij . Se ak = am , est conclu a do.
22 / 78
Soluo Gulosa ca
Demonstrao ca
a As atividades Aij so disjuntas, pois as atividades em Aij so a disjuntas, ak a primeria atividade em Aij a terminar, e e fm fk . Note que Aij possui o mesmo nmero de atividades que Aij , u e logo Aij um subconjunto tamanho-mximo de atividades a mutuamente compat veis para Sij que inclui am .
23 / 78
Em nossa soluo em programao dinmica, dois ca ca a subconjuntos so usados na soluo tima, e existem j i + 1 a ca o escolhas para resolver Sij . O teorema reduz o nmero de decises signicativamente: u o apenas um subproblema utilizado na soluo tima (o outro e ca o subproblema garantidamente vazio) e Quando buscamos uma soluo para Sij , temos que considerar ca apenas uma escolha: aquela com instante de trmino mais e cedo em Sij .
24 / 78
O teorema permite que resolvamos o problema de maneira top-down Para resolver o problema Sij :
Escolhemos a atividade am em Sij com o instante de concluso a mais cedo. Ento resolvemos Smj para obter Am,j . a Inclu mos ` soluo {am } o conjunto de atividades Amj a ca utilizadas na soluo tima para o subproblema Smj . ca o
25 / 78
A atividade am que escolhemos quando resolvemos o subproblema sempre a de menor instante de trmino que e e pode ser legalmente agendada. A atividade escolhida portanto a escolha gulosa no sentido e que ela deixa tanto tempo quanto poss para que as vel atividades restantes sejam agendadas. Isto , uma escolha gulosa aquela que maximiza a e e quantidade de tempo restante no agendada. a
26 / 78
Entrada do algoritmo:
a) vetores s e f b) ndices i e j do subproblema Sij a resolver
Retorna o conjunto tamanho-mximo de atividades a mutuamente compat veis em Sij . Assumimos que as atividades, de tamanho n, esto ordenadas a de maneira crescente pelo instante de trmino. e
27 / 78
28 / 78
Algoritmo recursivo
Chamada: Recursive Activity Selector(s, f , 0, n + 1) Assumindo que as atividades j esto ordenadas pelo instante a a de trmino, o algoritmo executa em tempo (n). e
29 / 78
Sumrio a
Introduo ca Um problema de seleo de atividades ca Elementos dos algoritmos gulosos Cdigos Human o
30 / 78
Elementos
Um algoritmo guloso obtm uma soluo tima para um e ca o problema fazendo uma seqncia de escolhas. ue Para cada ponto de deciso no algoritmo, a escolha que a parece ser a melhor para o momento feita. e Esta estratgia heur e stica nem sempre produz a soluo otima, ca mas como vimos no problema de seleo de atividades, ca algumas vezes sim.
31 / 78
32 / 78
Elementos
Para desenvolver um algoritmo guloso para o problema de seleo ca de atividades, seguimos os seguintes passos: 5) desenvolver um algoritmo recursivo que implemente a estratgia gulosa, e 6) converter o algoritmo recursivo para iterativo.
33 / 78
34 / 78
Observaes co
Como podemos dizer se um algoritmo guloso resolver um a problema de otimizao em particular? ca
No existe uma maneira geral, mas a propriedade a greedy-choice e a subestrutura tima so dois ingredientes o a chaves.
35 / 78
Propriedade greedy-choice
O primeiro elemento chave a propriedade greedy-choice: e
uma soluo tima global pode ser atingida fazendo escolhas ca o timas locais (gulosas). o Em outras palavras, quando consideramos qual escolha a fazer, fazemos a que parece melhor no momento, sem considerar os resultados dos subproblemas.
36 / 78
DP algoritmos gulosos
Em programao dinmica, fazemos uma escolha a cada ca a passo, mas a escolha usualmente depende da soluo dos ca subproblemas. Consequentemente, resolvemos problemas de programao ca dinmica de maneira bottom-up, progredindo de subproblemas a menores para maiores.
37 / 78
DP algoritmos gulosos
Em algoritmos gulosos, fazemos a escolha que parece ser melhor no momento e ento resolvemos o subproblema a Portanto, ao contrrio da programao dinmica, que resolve a ca a o problema de maneira bottom-up, a estratgia gulosa e usualmente progride de maneira top-down, fazendo uma escolha gulosa aps a outra, reduzindo cada instncia do o a problema em uma menor.
38 / 78
Um problema possui subestrutura otima se uma soluo ca tima do problema contm solues timas para os o e co o subproblemas Esta propriedade o ingrediente chave para a aplicao de e ca programao dinmica, assim como algoritmos gulosos. ca a Exemplo: Se uma soluo tima para o subproblema Sij ca o inclui uma atividade ak , ento ela deve conter solues timas a co o para os subproblemas Sik e Skj .
39 / 78
um ladro roubando uma loja encontra n itens; a o i-simo item vale vi reais e pesa wi quilogramas. e vi e wi so inteiros. a desejamos carregar o mximo de valor poss a vel, mas podemos carregar no mximo w quilogramas na mochila para algum w a inteiro.
Problema
Quais itens devem ser levados?
40 / 78
O problema da mochila
O problema da mochila possui subestrutura tima. o Para o problema 0 1, considere que a carga mais valiosa a ser carregada pesa no mximo w quilogramas. a Se removermos o item j da mochila, o restante deve ser a carga mais valiosa que pese no mximo w wj que o ladro a a pode levar dos n 1 itens originais excluindo j.
41 / 78
Sumrio a
Introduo ca Um problema de seleo de atividades ca Elementos dos algoritmos gulosos Cdigos Human o
42 / 78
Cdigos Human o
Indroduo ca
Os cdigos tipo Human so amplamente usados, o a constituindo uma tcnica efetiva para compresso de dados. e a Ttais cdigos podem economizar de 20% a 90%, dependendo o das caracter sticas dos dados. O algoritmo guloso de Human utiliza uma tabela de frequncia das ocorrncias dos caracteres para construir um e e vetor timo que representa cada caracter com um conjunto de o bits.
43 / 78
Cdigos Human o
Exemplo
Suponha que temos um arquivo com 100.000 caracteres que desejamos comprimir. Os caracteres no arquivo ocorrem com freqncias dadas pela ue tabela: Freqncia ue Cdigo xo o Cdigo varivel o a a 45 000 0 b 13 001 101 c 12 010 100 d 16 011 111 e 9 100 1101 f 5 101 1100
44 / 78
Cdigos Human o
Exemplo
Se utilizarmos uma codicao de tamanho xo, precisaremos ca de 3 bits para representar 6 caracteres. Este mtodo requer 300.000 bits para codicar o arquivo. e A codicao de tamanho varivel consideravelmente melhor ca a e que a de tamanho xo, designando aos caracteres frequentes cdigos curtos, e longos aos infrequentes. o
45 / 78
Cdigos Human o
Exemplo
Para a codicao de tamanho varivel da tabela, o cdigo requer ca a o (45 1 + 13 3 + 12 3 + 16 3 + 9 4 + 5 4) 1000 = = 224.000 bits Uma economia de aproximadamente 25%. De fato, esta uma e codicao tima. ca o
46 / 78
Cdigos Human o
Prex Code
Consideramos cdigos onde nenhum cdigo prexo de outro. o o e Estes cdigos so chamados de prex codes o a E poss demostrar que a compresso de dados tima de vel a o uma codicao pode sempre ser gerada por prex codes, ca ento no existe perda de generalidade em se restringir a a a ateno aos prex codes. ca
47 / 78
Cdigos Human o
Prex Code
Codicar simples: basta concatenar os cdigos que e o representam cada caracter. abc [0|101|100] 0101100
48 / 78
Cdigos Human o
Prex Code
Cdigos prexo so desejveis porque eles simplicam a o a a codicao. ca Uma vez que nenhum cdigo prexo de outro, o cdigo que o e o inicia um arquivo codicado unico. e Decodicamos o primeiro cdigo, e repetimos o processo at o o e nal do arquivo.
49 / 78
Cdigos Human o
Decodicao ca
O processo de decodicao necessita de uma representao ca ca conveniente para decodicao, de maneira que o cdigo ca o inicial possa ser facilmente extra do. Uma rvore binria, em que as folhas representam os a a caracteres nos d uma representao adequada. a ca Interpretamos o cdigo de um caracter como o caminho da o raiz ao caracter, onde 0 signica ir para o lho ` esquerda, e a 1 ir para o lho ` direita. a
50 / 78
Cdigos Human o
Arvore de tamanho xo
100 0 86 0 58 0 a : 45 1 b : 13 0 c : 12 1 28 1 d : 16 0 e:9 14 1 f :5 0 1 14
51 / 78
Cdigos Human o
Arvore de tamanho varivel a
100 0 a : 45 0 25 0 c : 12 1 b : 13 0 f :5 0 14 1 e:9 1 55 1 30 1 d : 16
52 / 78
Cdigos Human o
Observaes co
Uma codicao tima para um arquivo sempre ca o e representada por uma rvore binria completa, em que cada a a n que no uma folha possui dois lhos. o a e A codicao de tamanho xo do nosso exemplo no tima ca a eo uma vez que sua rvore no completa. a a e Restringindo nossa ateno `s rvores completas, podemos ca a a dizer que se C o alfabeto em que os caracteres so extra e a dos, a rvore tima de codicao tem exatamente |C | folhas, uma a o ca para cada letra do alfabeto, e exatamente |C | 1 ns internos. o
53 / 78
Cdigos Human o
Seja T uma rvore cdigo-prexo. a o Para cada caracter c do alfabeto C , seja f (c) uma funo que ca denota a freqncia de c no arquivo. ue Seja dT (c) a profundidade de c na rvore T . a Note que dT (c) tambm o comprimento do cdigo para c. e e o Portanto, o nmero de bits necessrios para codicar o u a arquivo : e f (c)dT (c) B(T ) =
cC
54 / 78
Cdigos Human o
Human inventou um algoritmo guloso que constri uma o rvore de prexos tima chamada de Human tree. a o O algoritmo constri a rvore T correspondente ao cdigo o a o timo de maneira bottom-up. o Inicia com um conjunto de |C | folhas e executa uma seqncia ue de |C | 1 operaes de unio/intercalao (merge) para criar co a ca a rvore nal. a
55 / 78
Cdigos Human o
Construindo o Human code
No pseudocdigo assumimos que C um conjunto de n o e caracteres e que cada caracter c C um objeto com uma e freqncia denida f [c]. ue Uma la de prioridades Q, indexada por f , utilizada para e identicar os dois objetos de menor freqncia a serem ue intercalados. O resultado desta unio um novo objeto, cuja freqncia a a e ue e soma das freqncias dos outros dois. ue
56 / 78
Cdigos Human o
Algoritmo
Human(C ) n |C | QC for i 1 to n 1 do z Allocate Node() x left[z] Extract Min(Q) y right[z] Extract Min(Q) f [z] f [x] + f [y ] Insert(Q, z) return Extract Min(Q)
57 / 78
Cdigos Human o
Exemplo
f :5 e:9 c : 12 b : 13 d : 16 a : 45
58 / 78
Cdigos Human o
Exemplo
c : 12 b : 13 0 14 1 d : 16 a : 45
f :5
e:9
59 / 78
Cdigos Human o
Exemplo
14 0 1 d : 16 0 25 1 a : 45
f :5
e:9
c : 12
b : 13
60 / 78
Cdigos Human o
Exemplo
25 0 1 0 14 0 1 30 1 a : 45
c : 12
b : 13
d : 16
f :5
e:9
61 / 78
Cdigos Human o
Exemplo
a : 45 0 55 1
25 0 1 0 14 0
30 1
c : 12
b : 13
d : 16 1
f :5
e:9
62 / 78
Cdigos Human o
Exemplo
100 0 a : 45 0 25 0 c : 12 1 b : 13 0 f :5 0 14 1 e:9 1 55 1 30 1 d : 16
63 / 78
Cdigos Human o
Anlise a
Construir Heap O(n) (n 1) iteraes, cada uma com 3O(lg n) co Portanto, o algoritmo executa em tempo O(n lg n)
64 / 78
Corretude do Algoritmo
Lema 2
Seja C um alfabeto onde cada caracter c C possui freqncia f [c]. ue Sejam x e y dois caracteres em C de menor freqncia. ue Ento existe um cdigo de prexo timo para C tal que os a o o cdigos para x e y tm o mesmo comprimento e diferem o e apenas no ultimo bit.
65 / 78
Corretude do Algoritmo
Demonstrao ca
A idia da prova pegar uma rvore T que representa um e e a cdigo prexo timo arbitrrio. o o a Modicar T e obter outra rvore tima, T , onde os caracteres a o x e y apaream como folhas irms de profundidade mxima. c a a Se conseguirmos, ento seus cdigos tero o mesmo a o a comprimento e sero diferentes apenas no ultimo bit. a
66 / 78
Corretude do Algoritmo
Demonstrao ca
Sejam b e c dois caracteres que so folhas irms de a a profundidade mxima em T . a Sem perda de generalidade, assumimos que f [b] f [c] e f [x] f [y ]. Uma vez que f [x] e f [y ] so as folhas de menor freqncia, a ue em ordem, e f [b] e f [c] so duas freqncias arbitrrias, nesta a ue a ordem, temos que, f [x] f [b] e f [y ] f [c].
67 / 78
Corretude do Algoritmo
Demonstrao ca
T T T
x y b c y x c
b c x y
68 / 78
Corritude do Algoritmo
Demonstrao ca
1 = B(T ) B(T ) =
cC
f (c)dT (c)
cC
f (c)dT (c)
= f [x]dT (x) + f [b]dT (b) f [x]dT (x) f [b]dT (b) = = = = f [x]dT (x) f [b]dT (b) + f [b]dT (b) f [x]dT (x) f [x]dT (x) f [b]dT (x) + f [b]dT (b) f [x]dT (b) f [x] f [b] dT (x) + f [b] f [x] dT (b) f [b] f [x] dT (b) dT (x)
69 / 78
Corretude do Algoritmo
Demonstrao ca
A diferena dos custos entre B(T ) e B(T ) foi calculada c como 1 . Similarmente, como a troca de y por c no aumenta o custo, a ) B(T ) no negativo. 2 = B(T e a Portanto, B(T ) B(T ) B(T ), e como T timo, eo B(T ) B(T ), que impica B(T ) = B(T ). Portanto, T uma rvore tima em que x e y aparecem e a o como folhas irms de profundidade mxima, provando o lema. a a
70 / 78
Corretude do Algoritmo
Observaes co
O Lema 2 nos diz que a construo de uma rvore tima com ca a o unies pode, sem perda de generalidade, comear com uma escolha o c gulosa para unir os caracteres de menor freqncia. ue
71 / 78
Corretude do Algortimo
Lema 3
Seja T uma rvore binria completa que representa um cdigo a a o sobre um alfabeto C , onde a freqncia f [c] denida para ue e cada caracter c C . Considere quaisquer dois caracteres x e y que so folhas irms a a de T e seja z o pai. Ento, considerando z como um caracter com freqncia a ue f [z] = f [x] + f [y ], a rvore T = T {x, y } representa um a cdigo prexo timo para C = (C {x, y }) {z}. o o
72 / 78
Corretude do Algoritmo
Demonstrao ca
Primeiro mostraremos que o custo B(T ) da rvore T pode ser a expresso em termos do custo B(T ) da rvore T considerando os a custos que compem a equao: o ca B(T ) =
cC
f (c)dT (c)
73 / 78
Corretude do Algoritmo
Demonstrao ca
Para cada c C {x, y }, temos dT (c) = dT (c) Logo, f [c]dT (c) = f [c]dT (c)
74 / 78
Corretude do Algoritmo
Demonstrao ca
Uma vez que dT (x) = dT (y ) = dT (z) + 1, temos f [x]dT (x) + f [y ]dT (y ) = (f [x] + f [y ])(dT (z) + 1) = f [z]dT (z) + (f [x] + f [y ]) Assim conclu mos que: B(T ) = B(T ) + f [x] + f [y ]
75 / 78
Corretude do Algoritmo
Demonstrao ca
Se T representa um cdigo prexo no timo para o alfabeto o a o , ento existe uma arvore T cujas folhas so caracteres em C a a C de maneira que B(T ) < B(T ). Uma vez que z tratado como um caracter em C , z aparece e como uma folha em T .
76 / 78
Corretude do Algoritmo
Demonstrao ca
Se adicionarmos x e y como lhos de z em T , ento a obtemos o cdigo prexo para C com custo o B(T ) + f [x] + f [y ] < = B(T ) + f [x] + f [y ] = B(T ) B(T ) + f [x] + f [y ] < B(T )
contradizendo a otimalidade de T .
77 / 78
Corretude do Algoritmo
Teorema
O procedimento de Human produz um cdigo prexo timo. o o
78 / 78
Algoritmo Gulosos