Professional Documents
Culture Documents
Resumen
En este documento se describiran brevemente dos algoritmos de multiplicacion rapida,es
decir,que buscan optimizar los tiempos de computo de multiplicacion ingenua,divide & vence-
ra,etc.
Mas especficamente,hablaremos de los metodos de multiplicacion de numeros de karatsuba &
del metodo de multiplicacion de Strassen matrices optimizado por Schonhage. Se abordara su
funcionamiento y su eficiencia.
Introduccion
El algoritmo de Strassen consiste basicamente en utilizar el algoritmo de divide & venceras,es
decir,realizar particiones de la matriz original tal que las submatrices sean cuadradas y luego,realizar
el producto de las submatrices.
Sin embargo,propuso una forma de multiplicar estas matrices de tal forma que reducia el orden
de las misma aunque aumentaba la cantidad de sumas necesarias para realizar el proceso de pro-
ducto matricial.
Esta forma de multiplicar las matrices es meramente algebraica & es facil aunque algo tedioso
mostrar que en efecto es equivalente a otra forma de multiplicar matrices
1
Descripcion del algoritmo de Stressen-Schonhage
Comencemos haciendo unas cuantas definiciones.
Definicion 0.1. Convolucion lineal discreta
Consideremos el siguiente producto.
X
X[N ]Y [N k]
As,
2
X
Y [n] = x[n]h[n k]
i=0
2
Los limites de la sumatoria los da x[n]
Los valores de evaluacion de n se toman observando los valores de h[n] y x[n]
Ahora,consideremos un ejemplo de convolucion lineal aplicado en el algoritmo de Stressen Schon-
hage. La sucesion obtenida (4, 13, 28, 27, 18) es la convolucion lineal de las dos sucesiones originales
(1,2,3) y (4,5,6). Teniendo hecho este proceso,todo se reduce a lle var a cabo los acarreos(por ejem-
plo, en la columna de la derecha, conservamos el 8 y sumamos el 1 de la columna que contiene al
27). As,se obtiene el producto 56088.
Algoritmo de Karatsuba
El algoritmo de Karatsuba es un algoritmo de divide y venceras para multiplicar enteros muy
grandes.La ides bascia es reducir un producto de longitud n a tres productos de longitud n/2 .
Explicacion
Como ya se menciono con anterioridad,el algoritmo consiste en reducir el problema multiplicar
dos numeros de longitud grande reducirlos a 3 productos de la mitad de su longitud.
Supongamos que dichos productos estan representados en alguna base: // x = x1 B m + x0
y = y1 B m + y0 donde x0 < bm y0 < bm
El producto es xy = (z2 B 2m + z1 )(y1 B m + z0 ) donde z2 = x1 y1 z1 + z1 = x1 y0 + x0 y1 z0 = x0 y0
Ejemplo
Multipliquemos 1234 por 5678 en la base 10 y m=2.
As: 1234 = 12 102 + 34 5678 = 56 102 + 78
3
z2 = 12 56 = 672
z0 = 34 78 = 2652
z1 = (12 + 34)(56 + 78) z2 z0 = 46 134 672 2652 = 2840
El resultado de la multiplicacion es
(z2 1022 + z1 )(y1 B 2 + z0 )
672 10000 + 2840 100 + 2652 = 7006652
Referencias
[Gee] Karatsubas Algorithm. .