Algoritmo de Karatsuba

Fonte: testwiki
Saltar para a navegação Saltar para a pesquisa

Predefinição:Mais notas Assenálio ou Método de Multiplicação de Karatsuba é um método utilizado para multiplicar números grandes eficientemente, descoberto por Anatolii Alexeievitch Karatsuba em 1960; e publicado em 1962.[1][2] Este algoritmo reduz a multiplicação de dois números de n dígitos a no máximo:

M(n)=O(nlog23),log23=1,5849 multiplicações de dígitos simples e a exatamente nlog23 quando n é uma potência de 2.


É mais rápido que o método usual de multiplicação longa, que necessita de n2 multiplicações de um dígito simples.

Por exemplo, seja n=210=1024.

O cálculo final exato será 310=59.049 e (210)2=1.048.576, respectivamente.

O algoritmo de Toom-Cook é uma generalização mais rápida do algoritmo de Karatsuba. Para n suficientemente grande, o algoritmo de Schönhage-Strassen é melhor que o algoritmo de Karatsuba.

O algoritmo de Karatsuba é um exemplo de algoritmo do tipo divisão e conquista, e do modelo de algoritmo de partição binária. A classificação de algoritmos do tipo divisão e conquista foi usada pela primeira vez para este método.

Algoritmo

A demonstração será feita por fórmulas. Seja a igualdade:

(a+bx)2=a2+((a+b)2a2b2)x+b2x2.

Desde que 4ab=(a+b)2(ab)2, a multiplicação dos números a e b possui desempenho equivalente à ordem quadrática.

Seja X um número de n dígitos, que é igual a

X=e0+2e1++2n1en1,


onde ej0,1,j=0,1,,n1.

Assume-se por simplicidade que n=2m,m1;n=2k. Escrevendo-se X como

X=X1+2kX2,


onde

X1=e0+2e1++2k1ek1


e

X2=ek+2ek+1++2k1en1,


então calculando X2, fica como

X2=(X1+2kX2)2=X12+((X1+X2)2(X12+X22))2k+X222n.(1)


X1 e X2 possuem k dígitos. X1+X2 podem ter no máximo até k+1 dígitos. Neste caso, serão representados como 2X3+X4, onde X3 é um número de k dígitos e X4 é um número de um único dígito. Então

(X1+X2)2=4X32+4X3X4+X42.

Seja φ(n) o número de operações suficiente para a construção de n dígitos ao quadrado pela fórmula (1). Percebe-se que de (1) prossegue a desigualdade em φ(n):

φ(n)3φ(n21)+cn,(2),


onde c>0 é uma constante em valor absoluto. Na verdade, o lado direito de (1) contém a soma de três quadrados de k dígitos, k=n21, que para serem calculados necessitam de 3φ(m)=3φ(n21) operações.

Todos os outros cálculos no lado direito de (1), a saber, são a multiplicação por 4,2k,2n, cinco adições e uma subtração de no máximo 2n dígitos necessários a no máximo n operações. Disto resulta (2). Aplicando (2) sucessivamente para

φ(n21),φ(n22),,φ(n2m+1)


e tendo em conta que

φ(n2m)=φ(1)=1, obtemos
φ(n)3(3φ(n22)+cn21)+cn=32φ(n22)+3c(n21)+cn


3mφ(n2m)+3m1c(n2m+1)+3m2c(n2m+2)++3c(n21)+cn=
=3m+cn((32)m1+(32)m2++(32)+1)=


=3m+2cn((32)m1)<3m(2c+1)=(2c+1)nlog23.


Assim, para um número de φ(n) operações, suficientes para a construção de n dígitos ao quadrado pela fórmula (1), a estimativa será de:

φ(n)<(2c+1)nlog23,log23=1,5849


Se n não for uma potência de dois, então haverá um número inteiro de m dígitos especificando as desigualdades 2m1<n2m, expressando X como um número de 2m dígitos, isto é, deixando 2mn símbolos iguais a zero à esquerda:

en==e2m1=0.


Todos os outros argumentos válidos para φ(n) produzem a mesma cota superior ligada a essa ordem de n. Predefinição:Referências

Ver também

Predefinição:Teoria dos números