Karatsuba kertolasku on nopea kertolaskumenetelmä, jonka avulla voit kertoa kaksi n - numeroista lukua bitin laskennallisen monimutkaisuuden avulla :
.Sen keksi Anatoli Karatsuba vuonna 1960 . Se on historiallisesti ensimmäinen kertoalgoritmi, joka ylittää triviaalin asymptoottisessa kompleksisuudessa [1] [2] [3] [4] .
Vuonna 1960 Andrei Kolmogorov piti seminaarin kybernetiikan matemaattisista ongelmista. Yksi seminaarissa käsitellyistä tehtävistä oli kahden bitin kokonaislukujen kertominen . Tärkein tunnettu kertolaskutapa tuolloin oli kertominen ”sarakkeessa”, joka algoritmisesti toteutettuna vaati alkeisoperaatioita (yksinumeroisten lukujen yhteen- tai kertolaskuja). Kolmogorov oletti, että kertominen "sarakkeessa" on optimaalinen algoritmi kahden luvun kertomiselle siinä mielessä, että minkä tahansa kertolaskumenetelmän ajoaika on vähintään suuruusluokkaa. "Hypoteesin " uskottavuutta osoitti se, että "sarakkeessa" kertomismenetelmä on ollut tunnettu ainakin neljä vuosituhatta, ja jos olisi ollut nopeampi kertolaskumenetelmä, niin se olisi luultavasti jo löydetty. Kuitenkin viikkoa myöhemmin 23-vuotias Anatoli Karatsuba [5] [6] [7] [8] ehdotti uutta menetelmää kaksinumeroisten lukujen kertomiseksi käyntiajan arviolla ja kumosi näin "hypoteesin ".
Karatsuba-menetelmä kuuluu " jakaa ja hallitse " -algoritmeihin, samoin kuin algoritmit, kuten binäärihaku , pikalajittelu jne. Karatsuba-menetelmässä käytetyt rekursiiviset pelkistyskaavat tunsivat Charles Babbage , joka ei kuitenkaan kiinnittänyt huomiota mahdollisuus käyttää vain kolmea rekursiivista kertolaskua neljän sijasta [9] .
Kaksibittiset luvut voidaan esittää muodossa , , missä ; .
Kertominen ( bittisiirto ) ja yhteenlasku tehdään vakioajassa . Siksi kertolaskuongelma rajoittuu polynomin kertoimien laskemiseen . Identiteettiä käyttämällä
tämä polynomi voidaan esittää muodossa
Viimeinen lauseke sisältää kolme -numeroisten lukujen tuotetta. Jos laskemme kukin niistä saman kaavion mukaan, saamme algoritmin, jossa on rekursiivinen arvio ajoajasta
Vertailun vuoksi samanlainen algoritmi, joka suorittaa erikseen kaikki neljä kertolaskua , , , vaatisi tavanomaisen ajan
Esityksen helpottamiseksi käytämme desimaalijärjestelmää, eli muodon polynomin argumentteja . Numeroiden värimerkintä ei liity edelliseen osaan, vaan osoittaa vain, mistä numerosta yksi tai toinen osa on erotettu.
Lasketaan :
Lukuteoreettiset algoritmit | |
---|---|
Yksinkertaisuustestit | |
Alkulukujen löytäminen | |
Faktorisointi | |
Diskreetti logaritmi | |
GCD:n löytäminen |
|
Modulo-aritmetiikka | |
Lukujen kerto- ja jakolasku | |
Neliöjuuren laskeminen |