A Karatsuba szorzás egy gyors szorzási módszer, amely lehetővé teszi két n - jegyű szám szorzását bit számítási bonyolultsággal :
.Anatolij Karatsuba találta fel 1960- ban . Történelmileg ez az első olyan szorzási algoritmus, amely aszimptotikus összetettségében felülmúlja a triviálist [1] [2] [3] [4] .
1960-ban Andrej Kolmogorov szemináriumot tartott a kibernetika matematikai problémáiról. A szemináriumon az egyik feladat a kétbites egész számok szorzása volt . A fő ismert szorzási módszer akkoriban az „oszlopban” szorzás volt, amely algoritmikusan végrehajtva elemi műveleteket (egyjegyű számok összeadását vagy szorzását) igényelte. Kolmogorov feltételezte, hogy az "oszlopban" szorzás az optimális algoritmus két szám szorzására abban az értelemben, hogy bármely szorzási módszer futási ideje legalább egy nagyságrend. A „hipotézis ” valószerűségét jelezte, hogy az „oszlopos” szorzás módszere legalább négy évezrede ismert, és ha lenne gyorsabb szorzási mód, akkor valószínűleg már megtalálták volna. Egy héttel később azonban a 23 éves Anatolij Karatsuba [5] [6] [7] [8] egy új módszert javasolt a kétjegyű számok és a futási idő becsült szorzására, és ezzel megcáfolta a „hipotézist ”.
A Karatsuba módszer az „ oszd meg és uralkodj ” algoritmusokhoz tartozik, olyan algoritmusok mellett, mint a bináris keresés , gyors rendezés stb. A Karatsuba módszerben használt rekurzív redukciós képleteket Charles Babbage ismerte , aki azonban nem figyelt négy helyett csak három rekurzív szorzás használatának lehetősége [9] .
A kétbites számok , , ahol ; .
A szorzás ( biteltolás ) és az összeadás állandó időben történik . Ezért a szorzás problémája a polinom együtthatóinak kiszámítására redukálódik . Az identitás használata
ezt a polinomot úgy ábrázolhatjuk
Az utolsó kifejezés a -jegyű számok három szorzatát tartalmazza. Ha mindegyiket ugyanazon séma szerint számítjuk ki, akkor egy algoritmust kapunk a futási idő rekurzív becslésével
Összehasonlításképpen, egy hasonló algoritmus, amely külön-külön végrehajtja mind a négy szorzást , a , , , a szokásos időt igényelné
A bemutatás megkönnyítése érdekében a decimális rendszert, vagyis az alak polinomjának argumentumait használjuk a helyett . A számok színjelölése nem kapcsolódik az előző részhez, csak azt jelzi, hogy melyik számból van kiemelve egy vagy másik rész.
Számoljunk :
Számelméleti algoritmusok | |
---|---|
Egyszerűség tesztek | |
Prímszámok keresése | |
Faktorizáció | |
Diszkrét logaritmus | |
GCD keresése | |
Modulo aritmetika | |
Számok szorzása és osztása | |
A négyzetgyök kiszámítása |