Vous êtes sur la page 1sur 6

INSTITUTO POLITCNICO NACIONAL

ESCUELA SUPERIOR
DE
CMPUTO

UNIDAD DE APRENDIZAJE:
ANALISIS DE ALGORITMOS
PROFESORA:
GARCIA MENDOZA CONSUELO VARINIA

ALUMNOS:
BENITEZ CRUZ DANIELA
OLIVARES REYES CARLOS ALBERTO
SAAVEDRA PALESTINA ROBERTO
PRACTICA 3:
PROGRAMACION DINAMICA
GRUPO:
3CM4

INTRODUCCION:

Frecuentemente para resolver un problema complejo se tiende a dividir


este en subproblemas, ms pequeos, resolver estos ltimos
(recurriendo posiblemente a nuevas subdivisiones) y combinar las
soluciones obtenidas para calcular la solucin del problema inicial.
Puede ocurrir que la divisin natural del problema conduzca a un gran
nmero de subejemplares idnticos. Si se resuelve cada uno de ellos
sin tener en cuenta las posibles repeticiones, resulta un algoritmo
ineficiente; en cambio si se resuelve cada ejemplar distinto una sola
vez y se conserva el resultado, el algoritmo obtenido es mucho mejor.
Esta es la idea de la programacin dinmica: no calcular dos veces lo
mismo y utilizar normalmente una tabla de resultados que se va
rellenando a medida que se resuelven los subejemplares.
La programacin dinmica es un mtodo ascendente. Se resuelven
primero los subejemplares ms pequeos y por tanto ms simples.
Combinando las soluciones se obtienen las soluciones de ejemplares
sucesivamente ms grandes hasta llegar al ejemplar original.
Ejemplo:
Consideremos el clculo de nmeros combinatorios. El algoritmo
sera:
funcion C(n, k)
si k=0 o k=n entonces devolver 1
si no devolver C(n-1, k-1) + C(n-1, k)
Ocurre que muchos valores C(i, j), con i<n y j<k se calculan y
recalculan varias veces.
Un fenmeno similar ocurre con el algoritmo de Fibonacci.
La programacin dinmica se emplea a menudo para resolver
problemas de optimizacin que satisfacen el principio de optimalidad:
en una secuencia ptima de decisiones toda subsecuencia ha de ser
tambin ptima.
Ejemplo: Si el camino ms corto de Madrid a Barcelona pasa por
Zaragoza, la parte del camino de Madrid a Zaragoza ha de ser
necesariamente el camino mnimo entre estas dos ciudades.
Podemos aplicar esta tcnica en:
Camino mnimo en un grafo orientado
Arboles de bsqueda ptimos

DESARROLLO: Multiplicacion de Matrices.

#include <stdio.h>
#include <stdlib.h>
//#include <conio.h>
#define sz 20
#define INF 200000

void Matrix_Chain_Order(int p[],int num);

int main(int argc, char *argv[])


{
system("clear");
int i, num = 0, p[sz] = {0};
printf ("Numero de matrices: ");
scanf ("%d", &num);
printf ("Introduzca %d numeros del orden de secuencia para %d
matrices: \n", num + 1, num);
for (i = 0; i <= num; i++)
scanf ("%d", &p[i]);
printf("\n\n");
printf("LA SECUENCIA DE MULTIPLICACION ES: ");
printf("\n\n\t");
Matrix_Chain_Order (p, num);
//system ("PAUSE");
return 0;
}

void print(unsigned long s[][sz], int i, int j)

{
if (i == j)
printf (" A%d ", i);
else
{
printf (" ( ");
print (s, i, s[i][j]);
print (s, s[i][j] + 1, j);
printf (" ) ");
}
}

void printm (unsigned long m[][sz], int n)


{
int i, j;
for(i = 1; i <= n; i++){
for(j = 1; j <= n; j++)
printf("%lu\t", m[i][j]);
printf ("\n\n");
}
printf ("\nEl numero de multiplicaciones requeridas es: %lu\n\n", m[1][n]);
}

void Matrix_Chain_Order (int p[],int num){


unsigned long m[sz][sz] = {0};
unsigned long s[sz][sz] = {0};

unsigned int q = 0;
int i, j, k, l;
int n = num;

for(i = 1; i <= n; i++)


m[i][i] = 0;

for(l = 2; l <= n; l++)


for(i = 1; i <= (n - l + 1); i++){
j = i + l - 1;
m[i][j] = INF;
for(k = i; k <= j - 1; k++){
q = m[i][k] + m[k+1][j] + p[i-1] * p[k] * p[j];
if(q < m[i][j]){
m[i][j] = q;
s[i][j] = k;
}
}
}
print (s, i-1, j);
printf ("\n\n");
printf ("El minimo numero de multiplicaciones requeridas es:\n\n");
printm (m, n);
}

Conclusiones
Con el desarrollo de esta prctica se logr la implementacin de la
tcnica de programacin dinmica, realizando asi la multiplicacin no
solo de dos matrices seguidas si no validando la forma mas precisa de
poder resolverla, nos dio la solucin ptima evaluando los diferentes
caminos que se encuentran en la tabla solucin.
Esta tabla solucin se llevo a cado realizando anteriormente el
algoritmo en prueba de escritorio que como tal es un poco confusa
pero lo que se puede minimizar con sta en cantidad de operaciones
es muy favorable usarla.

Referencias
http://thales.cica.es/rd/Recursos/rd99/ed99003304/din_introd.html

Vous aimerez peut-être aussi