5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 1/21
UniversidadDaVinci
Dr.VicenteCubells([email protected])
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 2/21
Temario Técnicasdediseñodealgoritmos
DivideyVencerás Programacióndinámica
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 3/21
Introducción Aldesarrollarunalgoritmocomputacionalquenospermitaresolverunproblema,podemostomar ventajadediferentestécnicas
Estastécnicasnosdanunaguíaparapoderdesarrollardemaneramásrápida,unabuenasolución
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 4/21
DivideyVencerás… DivideandConquer Esunatécnicaparaeldiseñodealgoritmos. Elprincipioenelquesebasaeselsiguiente:
Esmásfácilresolvervarioscasospequeñosdeunproblemaqueunsolocasogrande.
Elenfoquededivideyvencerásestáformadoporetapas: Dividirelproblemaenejemplaresmáspequeños. Resolverlosproblemaspequeños. Combinarlassolucionesparcialesparaobtenerlasoluciónalproblemaoriginal.
Seresuelvedirectamenteparauncasosimpleosedivideelproblemaen2omássubproblemas.
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 5/21
DivideyVencerás… EjemplodediseñodealgoritmodelproblemaI:
resolver(I)
{
n = tamaño(I);
if( n <= pequeño )
solucion = resolverDirecto(I);
else
{
dividir I en I1, I2, ...Im.
Para toda i:
si = resolver(Ii);solucion = combinar(s1, s2,..., sm);
}
return solucion;
}
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 6/21
DivideyVencerás… Ejemplodondesequierendibujarlasdivisionesdeunaregladelasiguientemanera:
Secomienzaporejemploconunareglaquevade0a30cms,quesedividealamitadysehaceunamarcadealturah.
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 7/21
DivideyVencerás… Luegocadamitad,esdecirde0a15cms.yde15a30cms,sevuelveadividiralamitadysehacenmarcasconunaalturah1.
Otravezcadasecciónsedividealamitadysemarca.
Sedejademarcarcuandolaalturadelarayaseamenoroigualacero.
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 8/21
DivideyVencerás… Algoritmo:
pintarRegla( int inicio, int final, int altura )
{ if( altura <= 0 )
return;
else
{posicion = (inicio + final)/2;
marcar( posicion, altura );h1 = altura / 2;
pintarRegla( inicio, posicion, h1);
pintarRegla( posicion, final, h1);
}
}
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 9/21
DivideyVencerás… Algoritmorecursivodebúsquedabinaria
intbuscar(inta[],intvalor,intini,intfin){
intmedio;if(fin<ini)
return-1;medio=(ini+fin)/2;if(a[medio]>valor)
returnbuscar(a,valor,ini,medio-1);elseif(a[medio]<valor)
returnbuscar(a,valor,medio+1,fin);else
returnmedio;}
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 10/21
DivideyVencerás Algoritmoiterativodebúsquedabinaria
intbuscar(inta[],intvalor,intini,intfin){
intmedio; while(ini<=fin){
medio=(ini+fin)/2;if(a[medio]>valor)
fin=medio-1;
elseif(a[medio]<valor)ini=medio+1;else
returnmedio;}return-1;
}
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 11/21
Programacióndinámica… Elinconvenientesepresentacuandolossubproblemasobtenidosnosonindependientessinoqueexistesolapamientoentreellos escuandounasoluciónrecursivanoresultaeficienteporlarepeticióndecálculosqueconlleva
EnestoscasosescuandolaProgramaciónDinámicanospuedeofrecerunasoluciónaceptable. Laeficienciadeestatécnicaconsisteenresolverlossubproblemasunasolavez,guardandosussolucionesenunatablaparasufuturautilización.
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 12/21
Programacióndinámica… DondetienemayoraplicaciónlaProgramaciónDinámicaesenlaresolucióndeproblemasdeoptimización
Enestetipodeproblemassepuedenpresentardistintassoluciones,cadaunaconunvalor,yloquesedeseaesencontrarlasolucióndevaloróptimo(máximoomínimo)
SebasaenelllamadoprincipiodeóptimoenunciadoporBellmanen1957yquedice:“Enunasecuenciaóptimadedecisiones,todasubsecuenciahadesertambiénóptima”
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 13/21
Programacióndinámica… EldiseñodeunalgoritmodeProgramaciónDinámicaconstadelossiguientespasos: Planteamientodelasolucióncomounasucesióndedecisionesyverificacióndequeéstacumpleelprincipiodeóptimo
Definiciónrecursivadelasolución Cálculodelvalordelasoluciónóptimamedianteunatablaendondesealmacenansolucionesaproblemasparcialesparareutilizarloscálculos
Construccióndelasoluciónóptimahaciendousodelainformacióncontenidaenlatablaanterior
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 14/21
Programacióndinámica… SeriedeFibonacci:
Veralgoritmorecursivo… Analizarutilizacióndeunatabla
Fib(0) Fib(1) Fib(2) … Fib(n)
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 15/21
Programacióndinámica…int FibonacciIterativo(int n)
{
int tabla[n];
if (n <= 1) return 1;else {
T[0] = 1;
T[1] = 1;
for (int i=2 ; i < n ; i++)
{
T[i] = T[i-1] + T[i-2];}
return T[n];
}
}
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 16/21
Programacióndinámica…int FibonacciIterativo(int n)
{
int suma, x, y;
if (n <= 1) return 1;
else {
x = 1;
y = 1;
for (int i=2 ; i < n ; i++)
{
suma = x + y;y = x;
x = suma;
}
return suma;
}
}
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 17/21
Programacióndinámica… Cálculodecoeficientesbinomiales
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 18/21
Programacióndinámica… Cálculodecoeficientesbinomiales
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 19/21
Programacióndinámica…int CoefIter(int n, int k)
{
int i,j;
int C[n][k];
for (i=0 ; i < n ; i++) { C[i,0] = 1; }for (i=1 ; i < n ; i++) { C[i,1] = i; }
for (i=2 ; i < k ; i++) { C[i,i] = 1; }
for (i=3 ; i < n ; i++)
{
for (j=2 ; j < i-1 ; j++)
if (j<=k) {
C[i,j] = C[i-1,j-1]+C[i-1,j];}
}
}
return C[n,k];
}
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 20/21
Programacióndinámica… FuncióndeAckerman
EncadapasomdelalgoritmohayqueactualizarlosAck[i](1≤i≤n)
Ack[]suficientementegrandepuesmcrecemuyrápido
5/17/2018 Unidad 3. Dise o de algoritmos - slidepdf.com
http://slidepdf.com/reader/full/unidad-3-diseno-de-algoritmos 21/21
Resumiendo La técnica Divide y Vencerás puede aplicarse para
resolver problemas descomponiendo en
subproblemas más pequeños
Funciona cuando existe un independencia total entre
las subsoluciones
Si no existe independencia entre las subsoluciones,
lo mejor es utilizar Programación Dinámica, siempre
y cuando se cumpla el principio del óptimo