Anda di halaman 1dari 2

MAC 338 - Analise de Algoritmos

Departamento de Ci^
en ia da Computa
~ao

Primeiro semestre de 2003


Algoritmos gulosos

Considere um onjunto = f1 2 g de atividades que ompetem por um re urso. Por


S ; ;:::;n n

exemplo, o re urso poderia ser uma sala de aula, que omporta a ada momento apenas uma
atividade. Suponha que ada atividade tem um tempo de in io e um tempo de termino , onde si ti

0   . Mais exatamente, entenda que o intervalo requerido pela atividade e [ ). Duas


si ti i si ; ti

atividades e s~ao i j se os intervalos [ ) e [ ) n~ao se interseptam, ou seja, se


ompat
veis s i ; ti sj ; tj

si  ou  .
tj sj ti

O problema da es olha de atividades (tambem onhe ido omo problema da ole


a
~o m
axima

de intervalos disjuntos ) onsiste no seguinte: en ontrar o onjunto de atividades mutuamente


ompatveis de tamanho maximo.
Consideremos que as atividades est~ao ordenadas pelo tempo de termino, ou seja, que 1  2  t t

:::  . (Caso isso n~ao seja verdade, ordene-as em tempo ( log ).)
tn O n n

E possvel projetar um algoritmo de programa ~ao din^ami a para esse problema. Para tanto,
fa a 0 := 0, +1 := 1 e denote por [ ℄ o tamanho de uma solu ~ao do problema para o onjunto
t sn i; j

Sij := f :  e  g. Observe que [0 + 1℄ e exatamente o tamanho de uma solu ~ao do


k sk ti tk sj ;n

problema para . S

O numero [ ℄ pode ser al ulado por meio da seguinte re orr^en ia:


i; j


[ ℄ = max 0 se = ;, Sij

2 f [
i; j
℄ + [ ℄ + 1g se 6= ;.
k Sij i; k k; j Sij

Para ompreender a re orr^en ia a ima, onsidere uma solu ~ao do problema para . Por de - R Sij

ni ~ao, temos que  e [ ℄ = j j. Assim, e evidente que [ ℄ = 0 se = ;. Por outro


R Sij i; j R i; j Sij

lado, se 6= ;, ent~ao ontem pelo menos uma atividade de . Seja um elemento de .


Sij R Sij k R

Temos que pode ser de omposto omo 1 [ f g [ 2, onde 1  e 2  . Mas, omo


R R k R R Sik R Skj R

tem tamanho maximo, 1 e 2 t^em que ser solu ~oes do problema para e respe tivamente
R R Sik Skj

(exer  io 1). Da segue que [ ℄ = [ ℄ + 1 + [ ℄. Como n~ao temos em m~aos uma solu ~ao
i; j i; k k; j

do problema para (ou seria trivial al ular [ ℄), temos que testar todos os andidatos a , ou
Sij i; j k

seja, todos os elementos de e es olher um que resulte no maior valor para [ ℄ + [ ℄ + 1.


Si;j i; k k; j

Tal faz parte de uma solu ~ao do problema para . A re orr^en ia re ete esse fato.
k Sij
Segue um algoritmo de programa ~ao din^ami a baseado na re orr^en ia a ima. O algoritmo
al ula os valores de [ ℄ iterativamente. i; j

sele iona_atividades_PD (s,t,n) {


para i := 0 ate n+1 fa a [i,j℄ := 0;
para l := 1 ate n+1 fa a
para i := 0 ate n+1-l fa a {
j := i+l;
max := infinito;
para k := i+1 ate j-1 fa a
se (s[k℄ >= t[i℄ e t[k℄ <= s[j℄) {
tam := [i,k℄+ [k,j℄+1;
se (tam > max) max := tam;
}
}
devolva [0,n+1℄;
}
Claramente o algoritmo onsome tempo ( 3). Ele na verdade n~ao resolve o problema, mas
n

apenas al ula o tamanho de uma solu ~ao do problema. E fa il, no entanto, modi a-lo para que
onstrua tambem uma solu ~ao (exer  io 2). Basta utilizar uma outra matriz para guardar, para
ada [ ℄ om
i; j j0, um valor de para o qual [ ℄ = [ ℄ + [ ℄ + 1, ou seja, um em
i > k i; j i; k k; j k

que o maximo e atingido na re orr^en ia. Depois, pode-se utilizar essa segunda matriz fa ilmente
para onstruir uma solu ~ao otima. No total, o algoritmo ompleto onsome ainda ( 3). n

Ha, no entanto, um algoritmo mais simples e e iente para o problema! E um algoritmo . guloso
Tal algoritmo parte de vazio e, repetidamente, in lui em a proxima atividade que e ompatvel
A A
om as que ja foram in ludas em . Surpreendentemente, o onjunto ao nal e uma solu ~ao do
A A
problema! O algoritmo resultante segue.
sele iona_atividades_guloso (s,t,n) {
A := {1};
ult := 1;
para i := 2 ate n fa a
se (s[i℄ >= t[j℄) {
A := A U {i};
ult := i;
}
devolva A;
}

A omplexidade de tal algoritmo e ( ) e ele produz uma solu ~ao do problema para , omo
O n S

passamos a demonstrar.
Seja uma solu ~ao do problema para tal que \ e maximo. Digamos que = f 1
R S R A g, R y ; : : : ; ym

om 1
y , e digamos que = f 1
> : : : > ym g, om 1
A e, laro,  . Se  ,
x ; : : : ; xt x > : : : > xt t m R A

ent~ao = e n~ao ha nada a provar. Ent~ao suponhamos que 6 . Seja o menor ndi e tal
A R R A i

que 62 . Se
yi A , ent~ao  ,
i > t A = e e ompatvel om todas as atividades em ,
R yi > yt xt yi A

uma ontradi ~ao, pois isso impli aria que o algoritmo guloso a ima teria adi ionado mais algum
elemento a . Se, por outro lado,  , ent~ao
A i (pela es olha gulosa de ), que impli a
t yi > xi xi

que  . Alem disso,  1 , pois e ompatvel om f 1


tyi txi sxi tyi xi 1g = f 1 1 g. x ; : : : ; xi y ; : : : ; yi

Ou seja, podemos tro ar por em , obtendo 0, que e tambem uma ole ~ao de atividades
xi yi R R

mutuamente ompatveis e tem o mesmo tamanho que . Ou seja, 0 e tambem uma solu ~ao do
R R

problema para . Porem j 0 \ j j \ j, ontrariando a es olha de . Isso ompleta a prova


S R A > R A R

que e uma solu ~ao do problema para .


A S

Exer 
 ios

1. Mostre que, se 1 n~ao e uma solu ~ao do problema para , ent~ao n~ao e uma solu ~ao do
R Sik R

problema para . Fa a o mesmo para 2 om no lugar de .


Sij R Skj Sik

2. Modi que o algoritmo sele iona atividades PD para que este onstrua uma solu ~ao do
problema, n~ao apenas al ule o seu tamanho. Seu algoritmo deve onsumir tempo ( 3). O n

Anda mungkin juga menyukai