Karatsuba multiplikation är en snabb multiplikationsmetod som låter dig multiplicera två n -siffriga tal med bitberäkningskomplexitet :
.Uppfanns av Anatoly Karatsuba 1960 . Det är historiskt sett den första multiplikationsalgoritmen som överträffar den triviala i asymptotisk komplexitet [1] [2] [3] [4] .
1960 höll Andrey Kolmogorov ett seminarium om kybernetikens matematiska problem. En av uppgifterna som behandlades vid seminariet var multiplikationen av två -bitars heltal. Den främsta kända metoden för multiplikation vid den tiden var multiplikation "i en kolumn", som, när den implementerades algoritmiskt, krävde elementära operationer (additioner eller multiplikationer av ensiffriga tal). Kolmogorov antog att multiplikation "i en kolumn" är den optimala algoritmen för att multiplicera två tal i den meningen att körtiden för en multiplikationsmetod är åtminstone en storleksordning. Sannolikheten för "hypotesen " indikerades av det faktum att multiplikationsmetoden "i en kolumn" har varit känd i minst fyra årtusenden, och om det fanns en snabbare multiplikationsmetod, så skulle den förmodligen redan ha hittats. Men en vecka senare föreslog 23-åriga Anatoly Karatsuba [5] [6] [7] [8] en ny metod för att multiplicera tvåsiffriga tal med en uppskattning av löptiden och motbevisade därmed "hypotesen ".
Karatsuba-metoden tillhör " dela och erövra "-algoritmerna, tillsammans med sådana algoritmer som binär sökning , snabbsortering , etc. De rekursiva reduktionsformler som användes i Karatsuba-metoden var kända för Charles Babbage , som dock inte uppmärksammade möjligheten att använda endast tre rekursiva multiplikationer istället för fyra [9] .
Två -bitars nummer kan representeras som , , där ; .
Multiplikation med ( bitförskjutning ) och addition görs i konstant tid . Därför reduceras problemet med multiplikation till beräkningen av polynomets koefficienter . Använda identiteten
detta polynom kan representeras som
Det sista uttrycket involverar tre produkter av -siffriga tal. Om vi beräknar var och en av dem enligt samma schema får vi en algoritm med en rekursiv uppskattning av körtiden
Som jämförelse skulle en liknande algoritm som separat utför alla fyra multiplikationerna , , , , kräva den vanliga tiden
För att underlätta presentationen kommer vi att använda decimalsystemet, det vill säga argumenten för formens polynom istället för . Siffrornas färgmarkering är inte relaterad till föregående avsnitt, utan anger endast från vilket nummer en eller annan del är utpekad.
Låt oss räkna ut :
Talteoretiska algoritmer | |
---|---|
Enkelhetstest | |
Hitta primtal | |
Faktorisering | |
Diskret logaritm | |
Hitta GCD | |
Modulo aritmetik | |
Multiplikation och division av tal | |
Beräkna kvadratroten |