Vous êtes sur la page 1sur 10

Matrix-chain multiplication

Dar un algoritmo que resuelva la multiplicacin de una cadena de matrices.


Nos dan una secuencia <A1,A2, , An> de n matrices para que se multipliquen y deseamos
calcular su producto.

Anlisis
Podemos usar el algoritmo estndar para multiplicar pares de matrices como una subrutina una
vez establecido los parntesis para resolver las ambigedades en cmo las matrices se
multiplican juntas debido a que la multiplicacin de matrices cumple la propiedad de la
asociatividad.
<A1,A2,A3,A4>
(A1(A2(A3*A4)))
(A1((A2*A3)A4))
((A1*A2)(A3*A4))
((A1*(A2*A3))A4)
((A1(A2*A3))A4)

Como poner el orden de los parntesis en una cadena de matrices cambia o tiene impacto en el
costo de una multiplicacin de matrices?

Consideremos la multiplicacin de 2 matrices:

Ejemplo: Supongamos la cadena = <A1,A2,A3>


Las dimensiones de la matrices son: 10 x 100, 100 x 5, 5 x 50.
((A1*A2)A3) = 12 500 multiplicaciones (A1(A2*A3)) = 75 000 multiplicaciones
Planteamiento del problema:
Declaramos la multiplicacin de cadena de matrices como lo siguiente:

Dado una cadena <A1,A2,...,An> de n matrices, donde i=1,2,...,n.


Donde toda la cadena esta entre parentesis, deseamos encontrar un camino el cual minimiza el
nmero de multiplicaciones, acomodando los parntesis.

Observar que en el problema de multiplicacin de una cadena de matrices, no estamos


multiplicando realmente matrices.
Nuestro objetivo es solamente determinar un orden para multiplicar matrices que tenga el coste
ms bajo.

Fuerza bruta
Intentar resolver el problema probando todas las maneras de agrupar con parntesis.
No es una solucin eficiente.
Antes de resolver el problema de la multiplicacin de la cadena matricial mediante la
programacin dinmica, demostremos de que la exhaustiva comprobacin de todos los parntesis
posibles no produce un algoritmo eficiente.

Secuencia de nmeros de catalan.


El nmero de soluciones es exponencial.
Algoritmo Greedy

Un algoritmo voraz determina el mnimo nmero de monedas que debe devolverse en el cambio.
En la figura se muestran los pasos que un ser humano debera seguir para emular a un algoritmo
voraz para acumular 36 cntimos usando slo monedas de valores nominales de 1, 5, 10 y 20. La
moneda del mayor valor menor que el resto debido es el ptimo local en cada paso. Ntese que
en general el problema de devolucin del cambio requiere programacin dinmica o
programacin lineal para encontrar una solucin ptima. Sin embargo, en muchos sistemas
monetarios, incluyendo el euro y el dlar estadounidense, son casos especiales donde en la
estrategia del algoritmo voraz da con la solucin ptima.
Un algoritmo voraz (tambin conocido como vido, devorador o goloso) es aquel que, para
resolver un determinado problema, sigue una heurstica consistente en elegir la opcin ptima en
cada paso local con la esperanza de llegar a una solucin general ptima. Este esquema
algortmico es el que menos dificultades plantea a la hora de disear y comprobar su
funcionamiento. Normalmente se aplica a los problemas de optimizacin.

Algoritmo Greedy para Multiplicacin de Cadena de Matrices

Para Greedy tenemos que crear un algoritmo que halle el orden de multiplicacin de las matrices
sin necesidad de hacer todas las multiplicaciones posibles.

Para hallar el nmero de operaciones que se hace para multiplicar dos matrices, se halla
multiplicando el nmero de filas de la primera matriz, por el nmero de columnas de la primera
matriz que es igual al nmero de filas de la segunda matriz, por el nmero de columnas de la
segunda matriz.

Como sabemos, la dimensin de la matriz resultado es igual al nmero de filas de la primera


matriz, por el nmero de columnas de la segunda matriz. Mientras se multiplica primero matrices
con nmeros grandes y a los extremos numeros pequeos, asi el costo se hace mas pequeo.

Para escoger las multiplicaciones de las matrices por prioridades, de tal manera que las
prioridades sean el nmero central mayor entre dos matrices.

De esta manera los nmeros centrales mayores aparecern menos al momento de hallar el
nmero de operaciones.

Ejemplo para hallar el nmero de comparaciones:


Sean las matrices A[2*5] y B[5*3]

El nmero de operaciones es 2*5*3 (las dimensiones de las matrices menos el elemento del
centro)

Ejemplo greedy:

Sea A una matriz de dimensin 2 x 3


Sea B una matriz de dimensin 3x10
Sea C una matriz de dimensin 10x5
Sea D una matriz de dimensin 5x4

A(2*3) B(3*10) C(10*5) D(5*49

A*(B*C)*D= [3*10*5]+[3*5*4]+[2*3*4] = 234 operaciones


Greedy: 234 operaciones. Sin embargo:
((AB)C)D=[2*3*10]+[10*5*4]+[2*10*4] =200 operaciones
Entonces no funciona greedy

Programacion Dinamica
Concepto:
La programacin dinmica es una tcnica matemtica que se utiliza para la solucin de
problemas matemticos seleccionados, en los cuales se toma un serie de decisiones en forma
secuencial.

Proporciona un procedimiento sistemtico para encontrar la combinacin de decisiones que


maximice la efectividad total, al descomponer el problema en etapas, las que pueden ser
completadas por una o ms formas (estados), y enlazando cada etapa a travs de clculos
recursivos.

1- El metodo de programacion dinamica sirve para resolver problemas combinando las


soluciones de subproblemas.
2- Normalmente es usada para resolver problemas de optimizacin.
3- Se necesita verificar por lo menos 2 Caractersticas:
- Subestructura Optima
- Subproblemas Repetidos

Subestructura ptima: Un problema tiene subestructura ptima cuando la solucin ptima a un


problema se puede componer a partir de soluciones ptimas de sus subproblemas.
Ejemplo Grafos
Para encontrar el camino ms corto desde un vrtice hacia otro (solucin ptima) es la sucesin
de soluciones ptimas para hallar el siguiente vrtice y la unin de las soluciones para cada arista
forman mi solucin ptima global

Subproblemas Repetidos:. El clculo de la solucin ptima implica resolver muchas veces un


mismo subproblema. La cantidad de sub-problema es pequena.

Ejemplo Secuencia Fibonacci


F(3)=F(2)+F(1)
F(4)=F(3)+F(2)
F(5)=F(4)+F(3)
La solucion para no calcular mas de una vez estos subproblemas es la memorizacin

Memorizacin : Es la capacidad de guardar resultados de subproblemas que se necesitarn ms


adelante.

Multiplicacin de Cadena de Matrices


1. Subestructura Optima :

Para hallar [ABCD]=[A]*[BCD] o [AB]*[CD] o [ABC]*[D]


Supongamos que [A]*[BCD] es la respuesta ptima entonces
Calculamos [BCD]=[B]*[CD] o [BC]*[D]

2. Subproblemas Repetidos: En el rbol se puede visualizar

Ya que cumple las caractersticas de un problema de programacin Dinmica

Ecuacin de Recurrencia

1. Definimos m[i,j] como nuestra cadena de matrices a multiplicar

2. m[ i ,j ] = puede ser definido como m[ i , k ] + m[ k+1 , j ]

3. p(i) = como numeros de filas de la primera matriz

4. p(k) = columna en comn de las 2 matrices

5. p(j) = columna de la segunda matriz


Analizamos 3 Formas de analizar este Problema

1- Recursividad = forma recursiva halla la solucin

2- Bottom-Up = Forma iterativa de menos a mas hallar la Solucin

3- Top-Down = Recursividad + Memorizacin

Anlisis de Multiplicacin de cadena de Matrices Recursivo

Por el mtodo de substitucin, probando que T(n)=(2n)


1 Mostrar: T(n) = (2n) c 2n
2 Asumiendo: T(k) c2k para k < n
3 Si 4c-(n) 0, c (n)/4
(valor largo de n)
4 Entonces, T(n) = (2n)
5 T(n) sigue siendo exponencial!

Conclusin: Mtodo de Recursin nos da una complejidades muy mala


Anlisis de la Implementacin Mtodo bottom-up
Resolvemos subproblemas pequeos primero y los ms grandes sern ms fciles
de resolver Definimos 2 arreglos m[1..n, 1..n], para almacenar costos mnimos
s[1..n, 1..n], para almacenar las divisiones ptimas, ndice de k Para construir la
solucin ptima

- Tiene 3 for anidados esto nos da una conclusin que se ejecuta en O(n3)
- requiere (n2) memoria para almacenar m y s.
- Este Forma de implementacin supera por mucho a la recursiva
Anlisis de la Implementacin Mtodo Top-Down
Los mtodos Top Down es la combinacin de la recursividad pero con la
Memorizacin para que este solo calcule una vez un subproblema recursivo y as
despus cuando vaya a necesitar el subproblema este ya est guardado en memoria
y no tenga que calcularlo otra vez

- El anlisis de esta Recursividad con el mtodo de sustitucin nos lleva que su


complejidad es O(n3)
- requiere (n2) memoria para almacenar m y s.
- Este Forma de implementacin supera por mucho a la recursiva y se puede frente
al Iterativo
- Como podemos ver las dos formas de implementacin de PD nos da siempre un
mejor tiempo que los algoritmos de Fuerza Bruta
Esta es La Memorizacin de Nuestros algoritmos ya que a lo mucho necesitan n*n
de memoria

Conclusiones
1) El problema de la Multiplicacin de Cadena de Matrices se puede solucionar con
Programacin Dinmica
2) Fuerza bruta para este Problema es de complejidad muy alta
3) Algoritmos greedy no se pueden aplicar a este Problema
4) PD nos mejora mucho el tiempo de ejecucin del Los algoritmos de Fuerza bruta
5) Las 2 formas de Implementar PD nos dan siempre un mejor tiempo que los
algoritmos de Fuerza Bruta

Vous aimerez peut-être aussi