Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Programacion dinamica calculo de matrices

Estas en el tema de Programacion dinamica calculo de matrices en el foro de C/C++ en Foros del Web. Holaaa, soy nueva en este foro, la verdad que no conocia nada de esto, y accidentalmente lo encontré.Primero decir que me parece super interesante y ...
  #1 (permalink)  
Antiguo 22/09/2011, 03:08
 
Fecha de Ingreso: septiembre-2011
Mensajes: 6
Antigüedad: 12 años, 7 meses
Puntos: 1
Programacion dinamica calculo de matrices

Holaaa, soy nueva en este foro, la verdad que no conocia nada de esto, y accidentalmente lo encontré.Primero decir que me parece super interesante y que está construido de forma muy clara. Ahora mi pregunta. Estoy mirando algunos algoritmos básicos de programacion dinámica y me encontré con un ejemplo que no logro entender sacado de wikibooks, el código es el siguiente:

fun Mult_Mat_PD(dimMatriz[0..n]: ent) dev sol:ent //Donde n es la dimension de la matriz solución,
var es decir, el número de matrices a solucionar
matrizSol[1..n,1..n]: ent; //Matriz solución
fvar
para i=1 hasta n hacer
matrizSol[i][i]=0; //Inicializa la diagonal principal a 0
fpara
para diagonal=1 hasta n-1 hacer
para i=0 hasta n-diagonal hacer
matrizSol[i,i+diagonal]=minProd(dimMatriz,matrizSol,i,i+diagonal);
//En cada casilla de cada diagonal escribe el su
correspondiente mínimo de multiplicaciones necesaria
fpara
fpara
dev matrizSol[0,n]);
ffun

fun minProd(dimMatriz[1..n]: ent,matrizSol[1..n,1..n]: ent,i,j: ent) dev minP:ent
var
aux: ent;
fvar
minP=+infinito;
para k=i hasta j-1 hacer
aux=matrizSol[i,k]+matrizSol[k+1,j]+(dimMatriz[i-1]*dimMatriz[k]*dimMatriz[j];
si (aux<minP) entonces
minP=aux; //Actualiza si el número de multiplicaciones es menor
fsi
fpara
dev minP;
ffun


(pongo el enlace por si alguien le interesa: [URL="http://es.wikibooks.org/wiki/Optimizaci%C3%B3n_del_Producto_de_Matrices"]http://es.wikibooks.org/wiki/Optimizaci%C3%B3n_del_Producto_de_Matrices[/URL]

Al principio inicializa la matriz desde la diagonal hacia arriba, tampoco se bien porqué, pero cuando entra en el procedimiento no se porque lo llama como matrizSol[i,i+diagonal] o en el segundo, la variable +infinito, no se de donde sale ni para qu sirve. Tambien decir que hace poco que empecé con C++ y no tengo mucha idea, pero esto creo que no es C++, o al menos no las librerias que yo suelo usar, cin, cout, etc.

Muchas gracias a todos y espero que alguien pueda ayudarme a entenderlo!besos!
  #2 (permalink)  
Antiguo 22/09/2011, 05:12
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Programacion dinamica calculo de matrices

No es C++, es lo que se llama pseudocódigo. El pseudocódigo es un código que no pertenece a ningún lenguaje de programación pero que permite describir algoritmos de manera sencilla y entendible para cualquiera.

http://es.wikipedia.org/wiki/Pseudoc%C3%B3digo
  #3 (permalink)  
Antiguo 22/09/2011, 10:11
 
Fecha de Ingreso: septiembre-2011
Mensajes: 6
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Programacion dinamica calculo de matrices

Gracias por contestarme, pero no era esa mi pregunta, se que es pseudolenguaje, pero no entiendo lo que hace el algoritmo, y como usa variables, como por ejemplo el +infinito, eso es simplemente que lo inicializa a un numero muy grande(imagino que una funcion definida del sistema) y el funcionamiento del algoritmo en general.
Gracias y besos!
  #4 (permalink)  
Antiguo 22/09/2011, 10:26
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Programacion dinamica calculo de matrices

El -/+ infinito puede ser representado de muchas formas. La idea de usar pseudolenguaje es no lidiar contra esas cosas. Y enfocarse meramente en el algoritmo.

Cuando lo pasas a un lenguaje en particular, simplemente ves como implementar esas cosas y listo... lo otro deberia salir facil.

Por ejemplo en C vienen definido el entero maximo y el minimo en "limits.h" (MAX_INT y MIN_INT). Asignando estos valores seria como tener un infinito....

Por otro lado se podira crear una clase con sus metodos sobrecargados y llevar un contro si es infinito o no....
Como vez hay muchas formas y a la hora de escribir un algoritmo no cambia la escencia del mismo...

Si tienes alguna duda sobre el ALGORITMO pregunta....si es sobre los detalles implemente y despues lo vemos

Saludos
  #5 (permalink)  
Antiguo 22/09/2011, 10:53
 
Fecha de Ingreso: septiembre-2011
Mensajes: 6
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Programacion dinamica calculo de matrices

el tema del mas infinito no es que no entienda lo que es, es que no entiendo por que lo hace, el algotimo es lo que estoy preguntando, nunca pregunté sobre pseudolenguaje,no entiendo su funcionamiento., como por ejemplo por que inicializa la diagonal ni como busca.

¿Alguien me podria indicar si lo tiene en C++ y lo pruebo yo directamente? quizás me quede mas claro. Cualquiera que me puedo ayudar explicandome que es lo que hace el algoritmo o decirme donde puedo encontrarlo en C++ u otras aclaraciones del mismo le agradecería que me ayudara.

Espero haber aclarado lo que pregunto, gracias a todos!besitos!
  #6 (permalink)  
Antiguo 22/09/2011, 11:30
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Programacion dinamica calculo de matrices

Fijate que esta calculando un minimo. Entonces cualquier numero es menor a +infinito, asi que no tiene que sacar el primer caso del for afuera o tiene que hacer diferencias en que numero de iteracion esta.
  #7 (permalink)  
Antiguo 22/09/2011, 13:29
 
Fecha de Ingreso: septiembre-2011
Mensajes: 6
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Programacion dinamica calculo de matrices

Muchas gracias ya me quedo más claro!

Etiquetas: calculo, const, dinamica, matrices, programa, programacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:00.