Você está na página 1de 44

Algoritmos Gulosos

Norton T. Roman

Apostila baseada no trabalho de Delano M. Beder,


Luciano Digianpietri, David Matuszek, Marco
Aurelio Stefanes e Nivio Ziviani

Algoritmos Gulosos

Soaquelesque,acadadeciso:

Sempreescolhemaalternativaqueparecemais
promissoranaqueleinstante
Nuncareconsideramessa
deciso

Umaescolhaquefoifeitanunca
revista

Nohbacktracking

Comeenuncavomita(argh!)

Algoritmos Gulosos

Alternativamaispromissora?

Dependedoproblema,doquesequermaximizarou
minimizar

Hqueseterummododeavaliarasdiferentesopes

Ex:caminhomaiscurto,menornmerodejogadasetc
Umafunoquedigaqualdelasvalemais,diantedoquese
consideraimportanteparaoproblema

Porfazeraescolhaquepareceseramelhoracada
iterao,dizsequeaescolhafeitadeacordocom
umcritriogulosodecisolocalmentetima!

Algoritmos Gulosos

Caractersticas:

Paraconstruirasoluotimaexisteumconjuntoou
listadecandidatos.
Soacumuladosumconjuntodecandidatosconsiderados
eescolhidos,eooutrodecandidatosconsideradose
rejeitados.
Existefunoqueverificaseumconjuntoparticularde
candidatosproduzumasoluo(semconsiderar
otimalidadenomomento).

Algoritmos Gulosos

Caractersticas:

Outrafunoverificaseumconjuntodecandidatos
vivel(tambmsempreocuparcomaotimalidade).
Umafunodeseleoindicaaqualquermomentoquais
doscandidatosrestantesomaispromissor.
Umafunoobjetivoforneceovalordasoluo
encontrada

Comoocomprimentodocaminhoconstrudo

Noaparecedeformaexplicitanoalgoritmoguloso

Algoritmos Gulosos

Afunodeseleogeralmenterelacionadacoma
funoobjetivo.
Seoobjetivo:

maximizarprovavelmenteescolherocandidato
restantequeproporcioneomaiorganhoindividual.
minimizarentoserescolhidoocandidatorestantede
menorcusto.
Tipicamente,umdossegredosdosalgoritmosgulosos
aescolhadecomooconjuntodeentradaserordenado.

Algoritmos Gulosos

Oalgoritmonuncamudadeidia:

Umavezqueumcandidatoescolhidoeadicionado
soluoelelpermaneceparasempre.
Umavezqueumcandidatoexcludodoconjunto
soluo,elenuncamaisreconsiderado.

Algoritmos Gulosos

Tipicamentealgoritmosgulosossoutilizadospara
resolverproblemasdeotimizaoquefuncionem
atravsdeumaseqnciadepassos.
Nemsempredosoluestimas,emboramuitas
vezesofaam

???
Para onde ir
???

Algoritmos Gulosos

Tipicamentealgoritmosgulosossoutilizadospara
resolverproblemasdeotimizaoquefuncionem
atravsdeumaseqnciadepassos.
Nemsempredosoluestimas,emboramuitas
vezesofaam

Ficaria mais fcil


decidir se
tivssemos mais
informao

Algoritmos Gulosos

Tipicamentealgoritmosgulosossoutilizadospara
resolverproblemasdeotimizaoquefuncionem
atravsdeumaseqnciadepassos.
Nemsempredosoluestimas,emboramuitas
vezesofaam

Sepudermosprovarquea
escolhagulosa,combinada
comasescolhasfeitasat
ento,tima,entoele
dararespostatima

Ficaria mais fcil


decidir se
tivssemos mais
informao

Algoritmos Gulosos

Aidiabsicadaestratgiagulosaconstruirpor
etapasumasoluotima.

Emcadapasso,apsselecionarumelementodaentrada
(omelhor),decideseseelevivel(casoemquevira
fazerpartedasoluo)ouno.
Apsumaseqnciadedecises,umasoluoparao
problemaalcanada.
Nessaseqnciadedecises,nenhumelemento
examinadomaisdeumavez:ouelefarpartedasoluo,
ouserdescartado.

Algoritmos Gulosos

Ingredienteschavesdeumalgoritmoguloso:

Subestruturatima

Seumasoluotimaparaoproblemacontm,dentrodele,
soluestimasparaseussubproblemas

Caractersticagulosa:Soluotimaglobalpodeser
produzidaapartirdeumaescolhatimalocal.

Daescolha,emumdadomomento,damelhoropodentreas
existentes.

Exemplos

Seleodeatividades:

Existemdiversasatividades(porexemploaulas)que
queremusarummesmorecurso(porexemploumasala
deaulas).
Cadaatividadetemumhorriodeincioeumhorriode
fim.
Sexisteumasaladisponvel.
Duasaulasnopodempodemserministradasnamesma
salaaomesmotempo.

Exemplos

Seleodeatividades:

11atividades,em14unidadesdetempo
0

1
2
3
4
5
6
7
8
9
10
11

10

11

12

13

14

Exemplos

Seleodeatividades:

Objetivo:selecionarumconjuntomximodeatividades
compatveis.

Atividadescompatveissoatividadesquenotm
sobreposiodetempo.
Ento,criaromaiorgrupodeatividadessemquehaja
sobreposiodetempo

Exemplos

Seleodeatividades:

Comoprocederamos?

Oquefardeumaatividademaispromissoraqueoutra?

Exemplos

Seleodeatividades:

Tentativa1:

Escolherprimeiroasatividadescomeamprimeiro.

Comofica?

Exemplos

Seleodeatividades:

Tentativa1:

Escolherprimeiroasatividadescomeamprimeiro.
0

1
2
3
4
5
6
7
8
9
10
11

Foiboaasoluo?

10

11

12

13

14

Exemplos

Seleodeatividades:

Tentativa1:

Escolherprimeiroasatividadescomeamprimeiro.
0

10

11

12

13

14

1
2
3
4
5
6
7
8
9
10
11

Foiboaasoluo?

Nofoimuitobom:escolheuapenasasatividades3,8e11,quando
poderiaterescolhidoquatro(1,4,8e11).

Exemplos

Seleodeatividades:

Tentativa2:

Escolherprimeiroasatividadesquedemorammenostempo

Comofica?

Exemplos

Seleodeatividades:

Tentativa2:

Escolherprimeiroasatividadesquedemorammenostempo
0

1
2
3
4
5
6
7
8
9
10
11

Foiboaasoluo?

10

11

12

13

14

Exemplos

Seleodeatividades:

Tentativa2:

Escolherprimeiroasatividadesquedemorammenostempo
0

10

11

12

13

14

1
2
3
4
5
6
7
8
9
10
11

Foiboaasoluo?

Nofoimuitobom:escolheuapenasasatividades2,8e11,quando
poderiaterescolhidoquatro(1,4,8e11).

Exemplos

Seleodeatividades:

Tentativa3:

Escolherprimeiroasatividadesterminamprimeiro.

Comofica?

Exemplos

Seleodeatividades:

Tentativa3:

Escolherprimeiroasatividadesterminamprimeiro.
0

1
2
3
4
5
6
7
8
9
10
11

Foiboaasoluo?

10

11

12

13

14

Exemplos

Seleodeatividades:

Tentativa3:

Escolherprimeiroasatividadesterminamprimeiro.
0

10

11

12

13

1
2
3
4
5
6
7
8
9
10
11

Foiboaasoluo?

Agorasim.possveldemonstrarqueessasoluotima.

14

Exemplos

Seleodeatividadesfuncionamentodoalgoritmo
guloso:

Recebealistadeatividadesordenadaspelohorriode
trmino.
Acadaiteraoverificaseaatividadeatualpodeser
includanalistadeatividades

Notequeaatividadeatualaqueterminaprimeiro,dentreas
atividadesrestantes

Exemplos

Seleodeatividades:
publicclassSelecaoDeAtividadesGuloso{
staticintselecaoGulosa(int[]ini,int[]fim,intn){
intultimaSelecionada=0;
intselecionadas=0;
if(n==0)return0;
//aprimeiraatividadesempreselecionada
System.out.print("a"+0+"");
selecionadas++;
for(inti=1;i<n;i++)
if(ini[i]>=fim[ultimaSelecionada]){
System.out.print("a"+i+"");
selecionadas++;
ultimaSelecionada=i;
}
System.out.println();
returnselecionadas;
}
...

Exemplos

Seleodeatividades:
...
//asatividadesdevemserordenadaspelocampofim
//ouseja,asatividadesqueacabamprimeiroficamnafrente
privatestaticint[]inicio={1,3,0,5,3,5,6,8,8,2,12};
privatestaticint[]fim={4,5,6,7,8,9,10,11,12,13,14};
privatestaticintnumeroDeAtividades=11;
publicstaticvoidmain(String[]args){
inttotal=selecaoGulosa(inicio,fim,numeroDeAtividades);
System.out.println("Foramselecionadas"+total+"
atividades.");
}

Exemplos

Problemadamochila:

Dados:

Umamochilaqueadmiteumcertopeso;

Umconjuntodeobjetos,cadaumcomumvaloreumpeso;

Objetivo:

Selecionaroconjuntodeobjetosquecaibamdentrodamochila
deformaamaximizarovalortotaldentrodamochila.

Exemplos

Problemadamochila:

Esteproblemasedivideemdoissubproblemasdistintos:

Osobjetospodemserparticionados(eovalorser
proporcionalfraodoobjeto),ouseja,vocpodecolocar
umpedaodoobjetodentrodamochila;

Ex:ouroemp

Osobjetosnopodemserparticionados(ouestarodentroda
mochilaoufora).ProblemaconhecidocomoProblemada
MochilaBinriaou01

Ex:ouroembarras

Exemplos

Problemadamochilafracionada:

Qualseriaamelhorordenaodaentrada?

Exemplos

Problemadamochilafracionada:

Qualseriaamelhorordenaodaentrada?

Asoluogulosasertima?

ordenarpelovalor/peso
Sim(demonstrvel)

Algoritmo:

Exemplos

Problemadamochilafracionada:

Qualseriaamelhorordenaodaentrada?

Asoluogulosasertima?

ordenarpelovalor/peso
Sim(demonstrvel)

Algoritmo:

PararesolveroProblemadaMochilaFracionadaordeneos
itensporvalor/pesodecrescentemente
Comeandoemi=1coloquenamochilaomximodoitemi
queestiverdisponveleforpossvel,esepuderlevarmais
passeparaoprximoitem.

Exemplos

Problemadamochilafracionada:

Exemplos

Problemadamochilafracionada:

valor/peso = 6

Exemplos

Problemadamochilafracionada:

valor/peso = 6

Exemplos

Problemadamochilafracionada:
//W=capacidademximadamochila
load=0//carganamochila
i=1
while(load<W)and(i<=n)do{
if(wi<=(Wload)
Peguetodooitemi
else
Pegue(Wload)/widoitemi
Adicionealoadopesoquefoipego
i++
}

Exemplos

Problemadamochilabinria:

Qualseriaamelhorordenaodaentrada?

Exemplos

Problemadamochilabinria:

Qualseriaamelhorordenaodaentrada?

Algoritmo:

ordenarpelovalor/peso
PararesolveroProblemadaMochilaFracionadaordeneos
itensporvalor/pesodecrescentemente
Comeandoemi=1coloquenamochilaomximodoitemi
queestiverdisponveleforpossvel,esepuderlevarmais
passeparaoprximoitem.

Asoluogulosasertima?

Exemplos

Problemadamochilabinria:

Exemplos

Problemadamochilabinria:

valor/peso = 6

Exemplos

Problemadamochilabinria:

valor/peso = 6

$160

Exemplos

Problemadamochilabinria:

Asoluogulosafoitima?
?

valor/peso = 6

$160

Exemplos

Problemadamochilabinria:

Asoluogulosafoitima?

Obviamenteno.Atimaseria:

valor/peso = 6