15
Ed. 26. Vol.7 Nº 3. Septiembre-Diciembre 2018
DOI: http://dx.doi.org/10.17993/3ctic.2018.61.10-21/
El concepto que explotó Karatsuba fue el de hacer un particionado, el cual se suele modelar de una
manera muy limpia a través de una estrategia recursiva. Dicha fragmentación produce la ventaja
de que los cálculos parciales de esa partición son reutilizables para computar de una forma más
ligera el cálculo más general, en que se subdivide cada tarea, de la deconstrucción de la operación
multiplicativa (Ayuso, 2013-2018). Con ellos, dentro del contexto multiplicativo en el que, como se
ha indicado, Karatsuba denió su algoritmo, lograba ahorrar una multiplicación de la susodicha
subdivisión, en ese proceso de fragmentación, consiguiendo el mismo efecto algebraico a través de
operaciones aditivas: más concretamente, sumas y restas, las cuales son computacionalmente menos
costosas; similar al concepto empleado por Booth (Booth, 1951) pero sin esa partición binaria.
Existen alternativas documentadas o mejoras para el algoritmo primigenio descrito por Karatsuba,
por ejemplo, emplearlo sobre cuerpos de otras características: generalizándolo para la multiplicación
entre polinomios, o soluciones que explotan su susceptibilidad de ser paralelizado… El presente
artículo se desvincula absolutamente de esas líneas de investigación, haciendo un cambio radical del
contexto algebraico en que el Karatsuba ideó su método.
Al margen de los estudios derivados de este concepto, el proceso mostrado aquí será igualmente
dividir el cálculo total en subproblemas más simples y, del mismo modo que, para el método original,
asustentar en la menor complejidad computación de las operaciones que componen a aquella que
se está calculando, evidentemente manteniendo la validez algebraica de las transformaciones, para
que el resultado sea el correcto, tal y como hizo Karatsuba (1962). Con la consiguiente aportación
que esto supone, es decir, dando una mayor magnitud a la mentada herramienta algorítmica, y la
aceleración de la operación aditiva que nos ocupa.
3. RESULTADOS
En este apartado, a pesar de que no resulta demasiado transcendente para la exposición de los
resultados, lo primero que se hará será dar una implementación para el cálculo de la operación de
sucesor. Se dene una operación llamada successor(n, m) capaz de calcular el n-ésimo sucesor de m:
result = m;
for(int i = 0; i < n; i++)
result = successor(result);
Algoritmo 1. Algoritmo para el cálculo del sucesor (successor).
Con la anterior operación mencionada en Algoritmo 1 ya se puede describir el algoritmo de adición
mediante la técnica descrita por Karatsuba para la multiplicación. Aplicando la fórmula que consta
en Fórmula 2 se obtendría que el resultado de sumar a un entero u de longitud n el entero v también
de longitud n sería: