Algoritmus Karatsuba

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 17. října 2021; kontroly vyžadují 13 úprav .

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] .

Historie

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] .

Popis metody

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

Příklady

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 :

Poznámky

  1. V praxi se algoritmus stává efektivnější než konvenční násobení při násobení čísel o délce řádově stovek binárních (desítek desetinných) číslic, na číslech menší délky algoritmus neposkytuje výraznou výhodu z důvodu větší počet požadovaných sčítání, odečítání a posunu než v naivním algoritmu.
  2. S. A. Gritsenko, E. A. Karatsuba, M. A. Korolev, I. S. Rezvyakova, D. I. Tolev, M. E. Changa. Vědecké úspěchy Anatolije Alekseeviče Karatsuby  // Matematika a informatika, 1, K 75. výročí narození Anatolije Alekseeviče Karatsuby, Sovrem. prob. Mat., 16, MIAN, M., 2012, 7–30.
  3. Karatsuba E. A. Fast Algorithms and the BEE Method Archived 4. listopadu 2012 na Wayback Machine , 2008.
  4. Alekseev V. B. Od metody Karatsuba pro rychlé násobení čísel k rychlým algoritmům pro diskrétní funkce  // Tr. MIAN. - 1997. - T. 218 . — S. 20–27 .
  5. Karatsuba A., Ofman Yu. Násobení vícehodnotových čísel na automatech // Zprávy Akademie věd SSSR. - 1962. - T. 145 , č. 2 .
  6. Karacuba A. Berechnungen und die Kompliziertheit von Beziehungen  (německy)  // Elektronische Informationsverarbeitung und Kybernetik. - 1975. - Bd. 11 .
  7. Karatsuba A. A. Výpočetní složitost  // Tr. MIAN. - 1995. - T. 211 . — S. 186–202 .
  8. Knut D. Umění programování. - 3. vyd. - M .: Williams , 2007. - V. 2. Získané algoritmy. — 832 s. — ISBN 0-201-89684-2 .
  9. A. Shen . Gaussův trik s násobením?  // Matematické osvícení . - 2019. - T. 24 .

Odkazy