Násobení Karatsuba je rychlá metoda násobení, která vám umožňuje násobit dvě n -ciferná čísla s bitovou výpočetní složitostí :
.Vynalezl Anatoly Karatsuba v roce 1960 . Je to historicky první násobící algoritmus, který překonává triviální v asymptotické složitosti [1] [2] [3] [4] .
V roce 1960 Andrey Kolmogorov uspořádal seminář o matematických problémech kybernetiky. Jedním z úkolů semináře bylo násobení dvoubitových celých čísel. Hlavní známou metodou násobení v té době bylo násobení „ve sloupci“, které při algoritmické implementaci vyžadovalo elementární operace (sčítání nebo násobení jednociferných čísel). Kolmogorov předpokládal, že násobení „ve sloupci“ je optimálním algoritmem pro násobení dvou čísel v tom smyslu, že doba běhu jakékoli metody násobení je přinejmenším řádově velká. Věrohodnost „hypotézy “ naznačoval fakt, že způsob násobení „ve sloupci“ je znám nejméně čtyři tisíciletí, a pokud by existoval rychlejší způsob násobení, pak by se pravděpodobně již našel. O týden později však 23letý Anatolij Karatsuba [5] [6] [7] [8] navrhl novou metodu násobení dvouciferných čísel s odhadem průběžného času a tím vyvrátil „hypotézu “.
Metoda Karatsuba patří k algoritmům „ rozděl a panuj “ spolu s takovými algoritmy jako binární vyhledávání , rychlé řazení atd. Vzorce rekurzivní redukce používané v metodě Karatsuba znal Charles Babbage , který však nevěnoval pozornost možnost použití pouze tří rekurzivních násobení místo čtyř [9] .
Dvoubitová čísla mohou být reprezentována jako , , kde ; .
Násobení ( bitový posun ) a sčítání se provádějí v konstantním čase . Proto je problém násobení redukován na výpočet koeficientů polynomu . Použití identity
tento polynom může být reprezentován jako
Poslední výraz zahrnuje tři součiny -ciferných čísel. Pokud vypočítáme každý z nich podle stejného schématu, dostaneme algoritmus s rekurzivním odhadem doby běhu
Pro srovnání, podobný algoritmus, který samostatně provádí všechna čtyři násobení , , , , by vyžadoval obvyklý čas
Pro usnadnění prezentace použijeme desítkovou soustavu, tedy argumenty polynomu tvaru místo . Barevné označení čísel nesouvisí s předchozí částí, ale pouze naznačuje, ze kterého čísla je vyčleněna ta či ona část.
Pojďme počítat :
Číselné teoretické algoritmy | |
---|---|
Testy jednoduchosti | |
Hledání prvočísel | |
Faktorizace | |
Diskrétní logaritmus | |
Hledání GCD | |
Modulová aritmetika | |
Násobení a dělení čísel | |
Výpočet druhé odmocniny |