21
 !"#$%&'#()( +) ,#"-# +&. ,#-%"/% 012%33' 4$-12%33'51()$#"-#.%(1.678

Unidad 3. Diseño de algoritmos

Embed Size (px)

Citation preview

Page 1: Unidad 3. Diseño de algoritmos

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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