Unidad 3. Diseño de algoritmos

Preview:

Citation preview

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(vcubells@udavinci.edu.mx)

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