Výpočetní složitost matematických operací

Z Wikipedie, otevřené encyklopedie
Skočit na navigaci Skočit na vyhledávání

Následující tabulky uvádějí časovou složitost matematických operací. S ohledem na to, že efektivita značné části složitějších operací závisí na efektivitě implementace násobení, kterou používají, je v patřičných vzorcích použito pro naznačení této skutečnosti.

Aritmetické operace[editovat | editovat zdroj]

Operace Vstup Výstup Algoritmus Složitost
sčítání dvě čísla o n číslicích číslo o až n+1 číslicích školské sčítání s přenosem Θ(n)
odčítání dvě čísla o n číslicích číslo o až n+1 číslicích školské odčítání s výpůjčkou Θ(n)
násobení dvě čísla o n číslicích číslo o 2n číslicích školské násobení O(n2)
Karacubův algoritmus O(n1.585)
trojcestné Toomovo–Cookovo násobení O(n1.465)
k-cestné Toomovo–Cookovo násobení O(nlog (2k − 1)/log k)
Toomovo-Cookovo násobení smíšené úrovně[1] O()
Schönhageův–Strassenův algoritmus O(n log n log log n)
Fürerův algoritmus[2] O(n log n 2log* n)
dělení dvě čísla o n číslicích číslo o n číslicích školské dělení O(n2)
Newtonovo–Raphsonovo dělení O(M(n))
druhá odmocnina číslo o n číslicích číslo o až n číslicích Newtonova metoda O(M(n))
modulární mocnění dvě čísla až o n číslicích a jeden exponent o k číslicích číslo o až n číslicích opakované násobení a modulení O(2kM(n))
dvojkové mocnění O(k M(n))
mocnění s Montgomeryho redukcí O(k M(n))

Algebraické funkce[editovat | editovat zdroj]

Operace Vstup Výstup Algoritmus Složitost
Vyhodnocení polynomu Jeden polynom stupně n s pevně danou velikostí koeficientů Jedno číslo omezené velikosti Přímé vyhodnocení Θ(n)
Hornerovo schéma Θ(n)
Největší společný dělitel (nad okruhy Z[x] nebo T[x]) Dva polynomy stupně n s koeficienty pevně dané velikosti Jeden polynom stupně nejvýše n Eukleidův algoritmus O(n2)
Rychlý Eukleidův algoritmus [3] O(n (log n)2 log log n)

Speciální funkce[editovat | editovat zdroj]

Elementární funkce[editovat | editovat zdroj]

Elementární funkce je možné zkonstruovat skládáním aritmetických operací, jedná se o exponenciální funkci (exp), přirozený logaritmus (log) a o goniometrické funkce a funkce k nim (částečně) inverzní. Složitost elementárních funkcí je rovna složitosti funkcí k nim inverzních, protože všechny elementární funkce jsou analytické a tedy invertovatelné newtonovou metodou. Zejména platí, že je-li exponenciální funkce nebo logaritimická funkce vyčíslitelná s nějakou složitostí, jsou se stejnou složitostí vyčíslitelné i ostatní elementární funkce.

V tabulce níže se proměnnou n označuje požadovaný počet číslic přesnosti.

Algoritmus Použitelnost Složitost
Taylorova řada; přímý součet a opakovaná redukce argumentu (t.j. exp(2x) = [exp(x)]2) exp, log, sin, cos O(n1/2 M(n))
Taylorova řada; zrychlení pomocí rychlé Fourierovy transformace exp, log, sin, cos O(n1/3 (log n)2 M(n))
Taylorova řada; binární dělení [4] exp, log, sin, cos O((log n)2 M(n))
iterace aritmeticko-geometrického průměru log O(log n M(n))

Není známo, zda O(log n M(n)) představuje optimální složitost výpočtu elementárních funkcí. Největší známý dolní odhad je Ω(M(n)).

Neelementární funkce[editovat | editovat zdroj]

Funkce Vstup Algoritmus Složitost
funkce Gama číslo o n číslicích Postupná aproximace neúplné funkce Gama O(n1/2 (log n)2 M(n))
pevně dané racionální číslo hypergeometrické řady O((log n)2 M(n))
m/24, m je celé číslo iterace aritmeticko-geometrického průměru O(log n M(n))
hypergeometrická funkce pFq číslo o n číslicích O(n1/2 (log n)2 M(n))
Pevně dané racionální číslo Hypergeometrické řady O((log n)2 M(n))

Matematické konstanty[editovat | editovat zdroj]

Tabulka níže shrnuje výpočetní složitost úlohy získat hodnotu dané konstanty s přesností n číslic.

Konstanta Algoritmus Složitost
Zlatý řez, φ Metoda tečen O(M(n))
druhá odmocnina ze dvou, Metoda tečen O(M(n))
Eulerovo číslo, e Binární dělení Taylorových řad pro exponenciální funkci O(log n M(n))
Newtonův inverz přirozeného logaritmu O(log n M(n))
Ludolfovo číslo, π Binární dělení arctanové řady v Machinově vzorci O((log n)2 M(n))
Salaminův–Brentův algoritmus O(log n M(n))
Eulerova–Mascheroniho konstanta, γ Sweeneyho metoda O((log n)2 M(n))

Teorie čísel[editovat | editovat zdroj]

Složitosti výpočtů z teorie čísel se věnuje výpočtová teorie čísel.

Operace Vstup Výstup Algoritmus Složitost
Největší společný dělitel Dvě čísla o n číslicích Číslo o nejvýše n číslicích Eukleidův algoritmus O(n2)
Steinův algoritmus O(n2)
Levý/pravýk-ární Steinův algoritmus[5] O(n2/ log n)
Stehlého–Zimmermannův algoritmus[6] O(log n M(n))
Schönhageho kontrolovaný eukleidovský sestup[7] O(log n M(n))
Jacobiho symbol Dvě čísla o n číslicích 0, −1, or 1
Schönhageho kontrolovaný eukleidovský sestup[8] O(log n M(n))
Stehlého–Zimmermannův algoritmus[9] O(log n M(n))
Faktoriál Pevně dané číslo m Číslo o O(m log m) číslicích Násobení odspodu O(m2 log m)
Binární dělení O(log m M(m log m))
Umocňování prvočíselných dělitelů m O(log log m M(m log m)),[10]
O(M(m log m))

Maticová algebra[editovat | editovat zdroj]

Hodnoty v následující tabulce jsou za platné za předpokládu, že maticové prvky lze násobit v konstantním čase.

Operace Vstup Výstup Algoritmus Složitost
Násobení matic Dvě matice rozměrů n×n Jedna matice o rozměru n×n Školské násobení O(n3)
Strassenův algoritmus O(n2,807)
Coppersmithův–Winogradův algoritmus O(n2,376)
Williamsův algoritmus[11] O(n2.373)
Násobení matic jedna matice o rozměrech n×m a jedna matice o rozměrech m×p jedna matice o rozměru n×p Školské násobení O(nmp)
Inverze matice matice o rozměrech n×n matice o rozměrech n×n Gaussova–Jordanova eliminace O(n3)
Strassenův algoritmus O(n2,807)
Coppersmithův–Winogradův algoritmus O(n2,376)
Williamsův algoritmus O(n2,373)
Determinant jedna matice o rozměrech n×n jedna hodnota Laplaceův rozvoj O(n!)
LU dekompozice O(n3)
Bareissův algoritmus O(n3)
Rychlé násobení matic O(n2,373)
Zpětné dosazení trojúhelníková matice n řešení Zpětné dosazení O(n2)[12]

Reference[editovat | editovat zdroj]

V tomto článku byl použit překlad textu z článku Computational complexity of mathematical operations na anglické Wikipedii.

  1. D. Knuth. The Art of Computer Programming, Volume 2. Third Edition, Addison-Wesley 1997.
  2. Martin Fürer. Faster Integer Multiplication Archivováno 25. 4. 2013 na Wayback Machine. Proceedings of the 39th Annual ACM Symposium on Theory of Computing, San Diego, California, USA, June 11–13, 2007, pp. 55–67.
  3. http://planetmath.org/fasteuclideanalgorithm
  4. David and Gregory Chudnovsky. Approximations and complex multiplication according to Ramanujan. Ramanujan revisited, Academic Press, 1988, pp 375–472.
  5. J. Sorenson. (1994).  "Two Fast GCD Algorithms". Journal of Algorithms 16 (1): 110–144. doi:10.1006/jagm.1994.1006. 
  6. R. Crandall & C. Pomerance. Prime Numbers – A Computational Perspective. Second Edition, Springer 2005.
  7. Möller N (2008).  "On Schönhage's algorithm and subquadratic integer gcd computation". Mathematics of Computation 77 (261): 589–607. doi:10.1090/S0025-5718-07-02017-0. 
  8. Bernstein D J. Faster Algorithms to Find Non-squares Modulo Worst-case Integers [online]. Dostupné online. (anglicky) 
  9. Šablona:Cite arxiv
  10. P. Borwein. "On the complexity of calculating factorials". Journal of Algorithms 6, 376-380 (1985)
  11. Virginia Vassilevska Williams, Breaking the Coppersmith-Winograd barrier, 2011 preprint.
  12. J. B. Fraleigh and R. A. Beauregard, "Linear Algebra," Addison-Wesley Publishing Company, 1987, p 95.