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!