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
Ex:caminhomaiscurto,menornmerodejogadasetc
Hqueseterummododeavaliarasdiferentesopes
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 Ficaria mais fcil
dararespostatima 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 12 13 14
1
2
3
4
5
6
7
8
9
10
11
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 12 13 14
1
2
3
4
5
6
7
8
9
10
11

Foiboaasoluo?
Exemplos
Seleodeatividades:
Tentativa1:
Escolherprimeiroasatividadescomeamprimeiro.
0 1 2 3 4 5 6 7 8 9 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 12 13 14
1
2
3
4
5
6
7
8
9
10
11

Foiboaasoluo?
Exemplos
Seleodeatividades:
Tentativa2:
Escolherprimeiroasatividadesquedemorammenostempo
0 1 2 3 4 5 6 7 8 9 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 12 13 14
1
2
3
4
5
6
7
8
9
10
11

Foiboaasoluo?
Exemplos
Seleodeatividades:
Tentativa3:
Escolherprimeiroasatividadesterminamprimeiro.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
1
2
3
4
5
6
7
8
9
10
11

Foiboaasoluo?
Agorasim.possveldemonstrarqueessasoluotima.
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?
ordenarpelovalor/peso
Asoluogulosasertima?
Sim(demonstrvel)
Algoritmo:
Exemplos
Problemadamochilafracionada:
Qualseriaamelhorordenaodaentrada?
ordenarpelovalor/peso
Asoluogulosasertima?
Sim(demonstrvel)
Algoritmo:
PararesolveroProblemadaMochilaFracionadaordeneos
itensporvalor/pesodecrescentemente
Comeandoemi=1coloquenamochilaomximodoitemi
queestiverdisponveleforpossvel,esepuderlevarmais
passeparaoprximoitem.
Exemplos
Problemadamochilafracionada:

?
Exemplos
Problemadamochilafracionada:

valor/peso = 6 5 4
Exemplos
Problemadamochilafracionada:

valor/peso = 6 5 4
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?
ordenarpelovalor/peso
Algoritmo:
PararesolveroProblemadaMochilaFracionadaordeneos
itensporvalor/pesodecrescentemente
Comeandoemi=1coloquenamochilaomximodoitemi
queestiverdisponveleforpossvel,esepuderlevarmais
passeparaoprximoitem.
Asoluogulosasertima?
Exemplos
Problemadamochilabinria:

?
Exemplos
Problemadamochilabinria:

valor/peso = 6 5 4
Exemplos
Problemadamochilabinria:

valor/peso = 6 5 4
$160
Exemplos
Problemadamochilabinria:
Asoluogulosafoitima?

valor/peso = 6 5 4
$160
Exemplos
Problemadamochilabinria:
Asoluogulosafoitima?
Obviamenteno.Atimaseria:

valor/peso = 6 5 4

Você também pode gostar