El algoritmo de Karatsuba es un método rápido para multiplicar números grandes . Normalmente, multiplicar dos números de n n n dígitos usando el método tradicional cuesta O ( n 2 ) O(n^2) O ( n 2 ) operaciones. Karatsuba reduce esto a aproximadamente O ( n log 2 3 ) ≈ O ( n 1.585 ) O(n^{\log_2 3}) \approx O(n^{1.585}) O ( n l o g 2 3 ) ≈ O ( n 1.585 ) , usando una técnica de divide y vencerás .
La idea clave es dividir los números en partes y multiplicarlas inteligentemente para reducir la cantidad de multiplicaciones necesarias.
VIDEO
Cómo funciona
Supongamos que queremos multiplicar dos números x x x y y y y , ambos con n n n dígitos.
Dividimos cada número en dos partes :
x = a ⋅ 10 m + b x = a \cdot 10^{m} + b x = a ⋅ 1 0 m + b
y = c ⋅ 10 m + d y = c \cdot 10^{m} + d y = c ⋅ 1 0 m + d
donde:
a a a y c c c son las partes altas (los dígitos más significativos).
b b b y d d d son las partes bajas (los dígitos menos significativos).
m m m es aproximadamente la mitad del número de dígitos.
Multiplicamos tres combinaciones :
a c , b d , ( a + b ) ( c + d ) ac, \quad bd, \quad (a+b)(c+d) a c , b d , ( a + b ) ( c + d )
Calculamos la parte cruzada usando:
a d + b c = ( a + b ) ( c + d ) − a c − b d ad + bc = (a+b)(c+d) - ac - bd a d + b c = ( a + b ) ( c + d ) − a c − b d
Combinamos los resultados:
x ⋅ y = a c ⋅ 10 2 m + ( a d + b c ) ⋅ 10 m + b d x \cdot y = ac \cdot 10^{2m} + (ad + bc) \cdot 10^{m} + bd x ⋅ y = a c ⋅ 1 0 2 m + ( a d + b c ) ⋅ 1 0 m + b d
Sólo usamos 3 multiplicaciones grandes en vez de 4.
Ejemplo sencillo
Multipliquemos x = 12 x = 12 x = 12 y y = 34 y = 34 y = 34 usando Karatsuba:
Dividimos los números en partes:
x = 12 ⇒ a = 1 , b = 2 x = 12 \Rightarrow a = 1, b = 2 x = 12 ⇒ a = 1 , b = 2
y = 34 ⇒ c = 3 , d = 4 y = 34 \Rightarrow c = 3, d = 4 y = 34 ⇒ c = 3 , d = 4
Multiplicamos las combinaciones:
a c = 1 ⋅ 3 = 3 ac = 1 \cdot 3 = 3 a c = 1 ⋅ 3 = 3
b d = 2 ⋅ 4 = 8 bd = 2 \cdot 4 = 8 b d = 2 ⋅ 4 = 8
( a + b ) ( c + d ) = ( 1 + 2 ) ( 3 + 4 ) = 3 ⋅ 7 = 21 (a+b)(c+d) = (1+2)(3+4) = 3 \cdot 7 = 21 ( a + b ) ( c + d ) = ( 1 + 2 ) ( 3 + 4 ) = 3 ⋅ 7 = 21
Calculamos la parte cruzada:
a d + b c = 21 − 3 − 8 = 10 ad + bc = 21 - 3 - 8 = 10 a d + b c = 21 − 3 − 8 = 10
Combinamos:
x ⋅ y = a c ⋅ 100 + ( a d + b c ) ⋅ 10 + b d x \cdot y = ac \cdot 100 + (ad+bc) \cdot 10 + bd x ⋅ y = a c ⋅ 100 + ( a d + b c ) ⋅ 10 + b d
x ⋅ y = 3 ⋅ 100 + 10 ⋅ 10 + 8 = 300 + 100 + 8 = 408 x \cdot y = 3 \cdot 100 + 10 \cdot 10 + 8 = 300 + 100 + 8 = 408 x ⋅ y = 3 ⋅ 100 + 10 ⋅ 10 + 8 = 300 + 100 + 8 = 408
Y efectivamente, 12 ⋅ 34 = 408 12 \cdot 34 = 408 12 ⋅ 34 = 408 .
Ejemplo más complejo
Perfecto, vamos a hacer un ejemplo de Karatsuba con los números:
x = 146123 , y = 352120 x = 146123, \quad y = 352120 x = 146123 , y = 352120
Para simplificar, vamos a dividir los números en mitades iguales de 3 dígitos (ya que tienen 6 dígitos cada uno):
x = 146123 ⇒ a = 146 , b = 123 x = 146123 \Rightarrow a = 146, \, b = 123 x = 146123 ⇒ a = 146 , b = 123
y = 352120 ⇒ c = 352 , d = 120 y = 352120 \Rightarrow c = 352, \, d = 120 y = 352120 ⇒ c = 352 , d = 120
Paso 1: Multiplicaciones principales
a c = 146 ⋅ 352 ac = 146 \cdot 352 a c = 146 ⋅ 352
Para hacerlo más simple, lo calculamos:
146 ⋅ 352 = 51392 146 \cdot 352 = 51392 146 ⋅ 352 = 51392
b d = 123 ⋅ 120 = 14760 bd = 123 \cdot 120 = 14760 b d = 123 ⋅ 120 = 14760
( a + b ) ( c + d ) = ( 146 + 123 ) ( 352 + 120 ) = 269 ⋅ 472 = 126968 (a+b)(c+d) = (146+123)(352+120) = 269 \cdot 472 = 126968 ( a + b ) ( c + d ) = ( 146 + 123 ) ( 352 + 120 ) = 269 ⋅ 472 = 126968
Paso 2: Calculamos la parte cruzada
a d + b c = ( a + b ) ( c + d ) − a c − b d ad + bc = (a+b)(c+d) - ac - bd a d + b c = ( a + b ) ( c + d ) − a c − b d
a d + b c = 126968 − 51392 − 14760 = 60816 ad + bc = 126968 - 51392 - 14760 = 60816 a d + b c = 126968 − 51392 − 14760 = 60816
Paso 3: Combinamos los resultados
x ⋅ y = a c ⋅ 10 6 + ( a d + b c ) ⋅ 10 3 + b d x \cdot y = ac \cdot 10^{6} + (ad+bc) \cdot 10^{3} + bd x ⋅ y = a c ⋅ 1 0 6 + ( a d + b c ) ⋅ 1 0 3 + b d
a c ⋅ 10 6 = 51392 000000 = 51 392 000 000 ac \cdot 10^6 = 51392 \,000000 = 51\,392\,000\,000 a c ⋅ 1 0 6 = 51392 000000 = 51 392 000 000
( a d + b c ) ⋅ 10 3 = 60816 000 = 60 816 000 (ad+bc) \cdot 10^3 = 60816\,000 = 60\,816\,000 ( a d + b c ) ⋅ 1 0 3 = 60816 000 = 60 816 000
b d = 14760 bd = 14760 b d = 14760
x ⋅ y = 51 392 000 000 + 60 816 000 + 14 760 = 51 452 830 760 x \cdot y = 51\,392\,000\,000 + 60\,816\,000 + 14\,760 = 51\,452\,830\,760 x ⋅ y = 51 392 000 000 + 60 816 000 + 14 760 = 51 452 830 760
Por lo tanto:
146123 ⋅ 352120 = 51 452 830 760 146123 \cdot 352120 = 51\,452\,830\,760 146123 ⋅ 352120 = 51 452 830 760