Su pregunta ya está contestada en el artículo al que se hace referencia: "paso básico de Karatsuba funciona para cualquier base B y cualquier m, pero el algoritmo recursivo es más eficiente cuando m es igual a n/2, redondeado" ... n
siendo el número de dígitos, y 0 < = value_of_digit < B.
Algunos perspectiva que podría ayudar :
Se le permite (y se requiere) utilizar elemental operaciones como number_of_digits // 2
y divmod(digit_x * digit_x, B)
... en aritmética escolar, donde B es 10, se le requiere (por ejemplo) saber que divmod(9 * 8, 10)
produce (7, 2)
.
Al implementar la aritmética de números grandes en una computadora, es habitual hacer B la potencia más grande de 2 que admitirá la operación de multiplicación elemental convenientemente. Por ejemplo, en la implementación de CPython en una máquina de 32 bits, B se elige para que sea 2 ** 15 (es decir, 32768), porque entonces product = digit_x * digit_y; hi = product >> 15; lo = product & 0x7FFF;
funciona sin desbordamiento y sin preocuparse por un bit de signo.
No estoy seguro de lo que intenta lograr con una implementación en Python que usa B == 2, con números representados por Python, cuya implementación en C ya usa el algoritmo Karatsuba para multiplicar números que son lo suficientemente grandes para que valga la pena No puede ser velocidad.
Como ejercicio de aprendizaje, puede intentar representar un número como una lista de dígitos, siendo la base B un parámetro de entrada.
Específicamente para la base b = 2? (más fácil que generalizado b) – smci
¿Sabías que las multiplicaciones de longs en python usan la multiplicación de Karatsuba internamente? Siempre se puede bizquear en la fuente de Python si quieres algunas ideas. –