Sei sulla pagina 1di 7

Algoritmo de Strassen.

En la disciplina matemtica del lgebra lineal, el algoritmo de Strassen, llamado as por Volker Strassen, es un algoritmo usado para la multiplicacin de matrices. Es asintticamente ms rpido que el algoritmo de multiplicacin de matrices estndar, pero ms lento que el algoritmo ms rpido conocido, y es til en la prctica para matrices grandes. Historia Volker Strassen public el algoritmo de Strassen en 1969. Pese a que su algoritmo es slo ligeramente ms rpido que el algoritmo estndar para la multiplicacin de matrices, fue el primero en sealar que el enfoque estndar no es ptimo. Su artculo comenz la bsqueda de algoritmos an ms rpidos, como el complejo algoritmo de CoppersmithWinograd de Shmuel Winograd en 1910 (que utiliza 20 multiplicaciones binarias, pero utiliza 155 sumas binarias en lugar de las 18 del algoritmo de Strassen), publicado en 2000 . Algoritmo Sean A, B dos matrices cuadradas sobre un anillo R. Queremos calcular la matriz C como producto

Si las matrices A, B no son de tipo 2n x 2n habr que rellenar lo que falta de filas y columnas con ceros. Partimos A, B y C en matrices de igual tamao de bloque

Con

Entonces

Con esta construccin, no hemos reducido el nmero de multiplicaciones. Todava tenemos 8 multiplicaciones para calcular la matriz Ci, j , que es el mismo nmero de multiplicaciones que se necesitan cuando se usa el mtodo estndar de multiplicacin de matrices. Ahora viene la parte importante. Definimos las matrices de nuevo

que luego se utilizan para expresar Ci, j en trminos de Mk. Debido a nuestra definicin de la Mk podemos eliminar una multiplicacin de matrices y reducir el nmero de multiplicaciones a 7 (una multiplicacin por cada Mk) y expresar Ci, j como

Iteramos n-veces el proceso de divisin hasta que las submatrices degeneran en nmeros (elementos del anillo R). Las implementaciones prcticas del algoritmo de Strassen, permiten cambiar a mtodos estndar de multiplicacin de matrices para submatrices lo suficientemente pequeas, para las cuales son ms eficientes. El punto a partir del cual el algoritmo de Strassen es ms eficiente depende de la implementacin especfica y del hardware. Se ha estimado que el algoritmo de Strassen es ms

rpido para matrices con anchura desde 32 a 128 para implementaciones optimizadas,1 y 60.000 o ms para implementaciones bsicas. Anlisis numrico La multiplicacin de matrices estndar requiere aproximadamente 2N3 (donde N = 2n)operaciones aritmticas (sumas y multiplicaciones); la complejidad asinttica es O(N3). El nmero de sumas y multiplicaciones requeridas en el algoritmo de Strassen puede ser calculado como sigue: sea f(n) el nmero de operaciones para una matriz de . Entonces por aplicacin recursiva del algoritmo de Strassen, vemos que f(n) = 7f(n 1) + l4n, para alguna constante l que depende del nmero de sumas realizadas en cada aplicacin del algoritmo. Por lo tanto f(n) = (7 + o(1))n,esto es, la complejidad asinttica para multiplicar matrices de tamao N = 2n usando el algoritmo de Strassen es . La reduccin en el nmero de operaciones aritmticas se obtiene a cambio de reducir un tanto la estabilidad numrica. Algoritmo de Kruskal El algoritmo de Kruskal es un algoritmo de la teora de grafos para encontrar un rbol recubridor mnimo en un grafo conexo y ponderado. Es decir, busca un subconjunto de aristas que, formando un rbol, incluyen todos los vrtices y donde el valor total de todas las aristas del rbol es el mnimo. Si el grafo no es conexo, entonces busca un bosque expandido mnimo (un rbol expandido mnimo para cada componente conexa). El algoritmo de Kruskal es un ejemplo de algoritmo voraz. Un ejemplo de rbol expandido mnimo. Cada punto representa un vrtice, el cual puede ser un rbol por s mismo. Se usa el Algoritmo para buscar las distancias ms cortas (rbol expandido) que conectan todos los puntos o vrtices. Funciona de la siguiente manera:

se crea un bosque B (un conjunto de rboles), donde cada vrtice del grafo es un rbol separado se crea un conjunto C que contenga a todas las aristas del grafo mientras C es no vaco o eliminar una arista de peso mnimo de C o si esa arista conecta dos rboles diferentes se aade al bosque, combinando los dos rboles en un solo rbol o en caso contrario, se desecha la arista

Al acabar el algoritmo, el bosque tiene un solo componente, el cual forma un rbol de expansin mnimo del grafo. Este algoritmo fue publicado por primera vez en Proceedings of the American Mathematical Society, pp. 4850 en 1956, y fue escrito por Joseph Kruskal. Complejidad del algoritmo m el nmero de aristas del grafo y n el nmero de vrtices, el algoritmo de Kruskal muestra una complejidad O(m log m) o, equivalentemente, O(m log n), cuando se ejecuta sobre estructuras de datos simples. Los tiempos de ejecucin son equivalentes porque:

m es a lo sumo n2 y log n2 = 2logn es O(log n). ignorando los vrtices aislados, los cuales forman su propia componente del rbol de expansin mnimo, n 2m, as que log n es O(log m).

Se puede conseguir esta complejidad de la siguiente manera: primero se ordenan las aristas por su peso usando una ordenacin por comparacin (comparison sort) con una complejidad del orden de O(m log m); esto permite que el paso "eliminar una arista de peso mnimo de C" se ejecute en tiempo constante. Lo siguiente es usar una estructura de datos sobre conjuntos disjuntos (disjoint-set data structure) para controlar qu vrtices estn en qu componentes. Es necesario hacer orden de O(m) operaciones ya que por cada arista hay dos operaciones de bsqueda y posiblemente una unin de conjuntos. Incluso una estructura de datos sobre conjuntos disjuntos simple con uniones por rangos puede ejecutar las operaciones mencionadas en O(m log n). Por tanto, la complejidad total es del orden de O(m log m) = O(m log n). Con la condicin de que las aristas estn ordenadas o puedan ser ordenadas en un tiempo lineal (por ejemplo, mediante el ordenamiento por cuentas o con el ordenamiento Radix), el algoritmo puede usar estructuras de datos de conjuntos disjuntos ms complejas para ejecutarse en tiempos del orden de O(m (n)), donde es la inversa (tiene un crecimiento extremadamente lento) de la funcin de Ackermann. Demostracin de la correccin Sea P un grafo conexo y valuado y sea Y el subgrafo de P producido por el algoritmo. Y no puede tener ciclos porque cada vez que se aade una arista, sta debe conectar vrtices de dos rboles diferentes y no vrtices dentro de un subrbol. Y no puede ser disconexa ya que la primera arista que une dos componentes de Y debera haber sido aadida por el algoritmo. Por tanto, Y es un rbol expandido de P.

Sea Y1 el rbol expandido de peso mnimo de P, el cual tiene el mayor nmero de aristas en comn con Y. Si Y1=Y entonces Y es un rbol de expansin mnimo. Por otro lado, sea e la primera arista considerada por el algoritmo que est en Y y que no est en Y1. Sean C1 y C2 las componentes de P que conecta la arista e. Ya que Y1 es un rbol, Y1+e tiene un ciclo y existe una arista diferente f en ese ciclo que tambin conecta C1 y C2. Entonces Y2=Y1+e-f es tambin un rbol expandido. Ya que e fue considerada por el algoritmo antes que f, el peso de e es al menos igual que que el peso de f y ya que Y1 es un rbol expandido mnimo, los pesos de esas dos aristas deben ser de hecho iguales. Por tanto, Y2 es un rbol expandido mnimo con ms aristas en comn con Y que las que tiene Y1, contradiciendo las hiptesis que se haban establecido antes para Y1. Esto prueba que Y debe ser un rbol expandido de peso mnimo. Otros algoritmos para este problema son el algoritmo de Prim y el algoritmo de Boruvka. Ejemplo

Este es el grafo original. Los nmeros de las aristas indican su peso. Ninguna de las aristas est resaltada.

AD y CE son las aristas ms cortas, con peso 5, y AD se ha elegido arbitrariamente, por tanto se resalta.

Sin embargo, ahora es CE la arista ms pequea que no forma ciclos, con peso 5, por lo que se resalta como segunda arista.

La siguiente arista, DF con peso 6, ha sido resaltada utilizando el mismo mtodo.

La siguientes aristas ms pequeas son AB y BE, ambas con peso 7. AB se elige arbitrariamente, y se resalta. La arista BD se resalta en rojo, porque formara un ciclo ABD si se hubiera elegido.

El proceso contina marcando las aristas, BE con peso 7. Muchas otras aristas se marcan en rojo en este paso: BC (formara el ciclo BCE), DE (formara el ciclo DEBA), y FE (formara el ciclo FEBAD).

Potrebbero piacerti anche