Departamento de Ci^
en
ia da Computa
~ao
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
si ou .
tj sj ti
::: . (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
problema para . S
[ ℄ = 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
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
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
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
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
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
2. Modique 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