unidad 3. diseño de algoritmos
TRANSCRIPT
![Page 1: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/1.jpg)
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])
![Page 2: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/2.jpg)
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
![Page 3: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/3.jpg)
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
![Page 4: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/4.jpg)
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.
![Page 5: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/5.jpg)
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;
}
![Page 6: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/6.jpg)
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.
![Page 7: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/7.jpg)
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.
![Page 8: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/8.jpg)
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);
}
}
![Page 9: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/9.jpg)
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;}
![Page 10: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/10.jpg)
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;
}
![Page 11: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/11.jpg)
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.
![Page 12: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/12.jpg)
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”
![Page 13: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/13.jpg)
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
![Page 14: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/14.jpg)
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)
![Page 15: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/15.jpg)
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];
}
}
![Page 16: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/16.jpg)
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;
}
}
![Page 17: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/17.jpg)
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
![Page 18: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/18.jpg)
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
![Page 19: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/19.jpg)
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];
}
![Page 20: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/20.jpg)
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
![Page 21: Unidad 3. Diseño de algoritmos](https://reader031.vdocuments.co/reader031/viewer/2022020804/557201354979599169a1028c/html5/thumbnails/21.jpg)
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