Вычислительная сложность математических операций

редактировать
Требования к алгоритмической среде выполнения для общих математических процедур Графики функций, обычно используемых при анализе алгоритмов, с указанием числа операций N {\ displaystyle N}N в зависимости от размера ввода n {\ displaystyle n}n для каждой функции

В следующих таблицах перечислены вычислительные сложность различных алгоритмов для общих математических операций.

Здесь под сложностью понимается временная сложность выполнения вычислений на многолентовой машине Тьюринга. См. нотация O для объяснения используемых нотаций.

Примечание. Из-за разнообразия алгоритмов умножения M (n) {\ displaystyle M (n)}M (n) ниже обозначает сложность выбранного алгоритма умножения.

Содержание
  • 1 Арифметические функции
  • 2 Алгебраические функции
  • 3 Специальные функции
    • 3.1 Элементарные функции
    • 3.2 Неэлементарные функции
    • 3.3 Математические константы
  • 4 Теория чисел
  • 5 Матричная алгебра
  • 6 Преобразования
  • 7 Примечания
  • 8 Ссылки
  • 9 Дополнительная литература
Арифметические функции
ОперацияВходВыходАлгоритмСложность
Сложение Два n {\ displaystyle n}n -значные числа, N {\ displaystyle N}N и N {\ displaystyle N}N Один n + 1 {\ displaystyle n + 1}n + 1 -цифровой номерДобавление в учебник с переносомΘ (n), Θ (журнал ⁡ (N)) {\ displaystyle \ Theta (n), \ Theta (\ log (N))}{\ displaystyle \ Theta (n), \ Theta (\ log (N)) }
Вычитание Два n {\ displaystyle n}n -значные числа, N {\ displaystyle N}N и N {\ displaystyle N}N One n + 1 {\ displaystyle n + 1}n + 1 -цифровое числоВычитание из учебника с заимствованиемΘ (n), Θ (log ⁡ (N)) {\ displaystyle \ Theta (n), \ Theta (\ log (N))}{\ displaystyle \ Theta (n), \ Theta (\ log (N)) }
Умножение Два n {\ displaystyle n}n -цифровые числа.Один 2 n {\ displaystyle 2n}2n -цифровое числоУчебное длинное умножение O (n 2) {\ displaystyle O (n ^ {2})}O (n ^ {{2}})
Алгоритм Карацубы O (n 1.585) {\ displaystyle O (n ^ {1.585})}{\ displaystyle O (n ^ {1.585})}
3-way Умножение Тоома – Кука O (n 1.465) {\ displaystyle O (n ^ {1.465})}{\ displaystyle O (n ^ {1.465})}
k {\ displaystyle k}k -way умножение Toom – CookO (n log ⁡ 2 k - 1 log ⁡ k) {\ displaystyle O (n ^ {\ frac {\ log 2k-1} {\ log k}})}{\ displaystyle O (n ^ {\ frac {\ log 2k-1} {\ log k}})}
Смешанный уровень Тоома – Кука (Knuth 4.3.3-T)O (n 2 2 log ⁡ n log ⁡ n) {\ displaystyle O (n \, 2 ^ {\ sqrt {2 \ log n}} \, \ log n)}{\ displaystyle O (n \, 2 ^ {\ sqrt {2 \ журнал n}} \, \ log n)}
алгоритм Шёнхаге – Штрассена O (n log ⁡ n log ⁡ log ⁡ n) { \ displaystyle O (n \ log n \ log \ log n)}O (n \ log n \ log \ log n)
алгоритм Фюрера O (n log ⁡ n 2 2 log ∗ ⁡ n) {\ displaystyle O (n \ log n \, 2 ^ { 2 \ log ^ {*} n})}{\ displaystyle O (n \ log n \, 2 ^ {2 \ log ^ {*} n})}
алгоритм Харви-Хувена O (n log ⁡ n) {\ displaystyle O (n \ log n)}O (n \ log n)
Division T wo n {\ displaystyle n}n -цифровые числаОдна n {\ displaystyle n}n -цифровое числоПолностное деление учебника О (n 2) {\ displaystyle O (n ^ {2})}O (n ^ {{2}})
Дивизион Бурникеля-Циглера «разделяй и властвуй»O (M (n) log ⁡ n) {\ displaystyle O ( M (n) \ log n)}{\ displaystyle O (M (n) \ log n)}
деление Ньютона – Рафсона O (M (n)) {\ displaystyle O (M (n))}O (M (n))
Квадратный корень One n {\ displaystyle n}n -значное числоОдно n {\ displaystyle n}n -цифровое числометод Ньютона O (M (n)) {\ displaystyle O (M (n))}O (M (n))
Модульное возведение в степень Два n {\ displaystyle n}n -цифровых целых чисел и k {\ displaystyle k}k -битный показатель степениОдин n {\ displaystyle n}n -значное целое числоПовторное умножение и уменьшениеО (M (n) 2 K) {\ displaystyle O (M (n) \, 2 ^ {k})}{\ displaystyle O (M (n) \, 2 ^ {k})}
Возведение в степень возведением в квадрат O (M (n) k) {\ displaystyle O (M (n) \, k)}{\ displaystyle O (M (n) \, k)}
Возведение в степень с редукцией Монтгомери O (M (n) k) {\ displaystyle O (M (n) \, k)}{\ displaystyle O (M (n) \, k)}
Алгебраические функции
ОперацияВходВыходАлгоритмСложность
Полином оценкаОдин полином степени n {\ displaystyle n}n с коэффициентами фиксированного размераОдно число фиксированного размераПрямая оценкаΘ (n) {\ displaystyle \ Theta (n)}\ Theta (n)
Метод Хорнера Θ (n) {\ displaystyle \ Theta (n)}\ Theta (n)
Полиномиальный НОД (более Z [x] {\ displaystyle \ mathbb {Z} [x]}\ mathbb {Z} [x] или F [x] {\ displaystyle F [x]}F [x] )Два полинома степени n {\ displaystyle n}n с целочисленными коэффициентами фиксированного размераОдин многочлен степени не выше n {\ displaystyle n}n алгоритм Евклида O (n 2) {\ displaystyle O (n ^ {2})}O (n ^ {{2}})
Быстрый алгоритм Евклида (Lehmer)O (M (n) log ⁡ n) {\ displaystyle O (M (n) \ log n)}{\ displaystyle O (M (n) \ log n)}
Специальные функции

Многие методы в этом разделе даны в Borwein Borwein.

Элементарные функции

элементарные функции построены путем составления арифметических операций, экспоненциальная функция (exp {\ displaystyle \ exp}\ ехр ), натуральный логарифм (log {\ displaystyle \ log}\ log ), тригонометрические функции (sin, cos {\ displaystyle \ sin, \ cos}{\ displaystyle \ sin, \ cos} ) и их обратные. Сложность элементарной функции эквивалентна сложности ее обратной, поскольку все элементарные функции аналитические и, следовательно, обратимы с помощью метода Ньютона. В частности, если exp {\ displaystyle \ exp}\ ехр или log {\ displaystyle \ log}\ log в сложном домене может быть вычислено с некоторой сложностью, тогда эта сложность достижима для всех остальных элементарных функций.

Ниже размер n {\ displaystyle n}n относится к числу цифр точности, с которой функция должна оцениваться.

АлгоритмПрименимостьСложность
Ряд Тейлора ; сокращение повторных аргументов (например, exp ⁡ (2 x) = [exp ⁡ (x)] 2 {\ displaystyle \ exp (2x) = [\ exp (x)] ^ {2}}{\ displaystyle \ exp (2x) = [\ exp (x)] ^ {2}} ) и прямое суммированиеexp, log, sin, cos, arctan {\ displaystyle \ exp, \ log, \ sin, \ cos, \ arctan}{\ displaystyle \ exp, \ log, \ sin, \ cos, \ arctan} O (M (n) n 1/2) {\ displaystyle O (M (n) n ^ {1/2})}{\ displaystyle O (M (n) n ^ {1/2})}
ряд Тейлора; Ускорение на основе БПФ exp, log, sin, cos, arctan {\ displaystyle \ exp, \ log, \ sin, \ cos, \ arctan}{\ displaystyle \ exp, \ log, \ sin, \ cos, \ arctan} O (M (n) n 1/3 (журнал ⁡ n) 2) {\ displaystyle O (M (n) n ^ {1/3} (\ log n) ^ {2})}{\ displaystyle O (M (n) n ^ {1/3} (\ lo gn) ^ {2})}
ряд Тейлора; двоичное разбиение +exp, log, sin, cos, arctan {\ displaystyle \ exp, \ log, \ sin, \ cos, \ arctan}{\ displaystyle \ exp, \ log, \ sin, \ cos, \ arctan} O (M (n) (log ⁡ n) 2) {\ displaystyle O (M (n) (\ log n) ^ {2})}{\ displaystyle O (M (n) (\ log n) ^ { 2})}
Среднее арифметико-геометрическое итерацияexp, log, sin, cos, arctan {\ displaystyle \ exp, \ log, \ sin, \ cos, \ arctan}{\ displaystyle \ exp, \ log, \ sin, \ cos, \ arctan} O (M (n) log ⁡ n) {\ displaystyle O (M (n) \ log n)}{\ displaystyle O (M (n) \ log n)}

Неизвестно, O (M (n) log ⁡ n) {\ displaystyle O (M (n) \ log n)}{\ displaystyle O (M (n) \ log n)} - оптимальная сложность для элементарных функций. Самая известная нижняя граница - это тривиальная граница Ω {\ displaystyle \ Omega}\ Omega (M (n)) {\ displaystyle (M (n))}{\ displaystyle (M (n))} .

Неэлементарные функции

ФункцияВходАлгоритмСложность
Гамма-функция n {\ displaystyle n}n -цифровое числоПоследовательная аппроксимация неполной гамма-функции O (M (n) n 1/2 (log ⁡ n) 2) {\ displaystyle O (M (n) n ^ {1/2} (\ log n) ^ {2})}{\ displaystyle O (M (n) n ^ {1/2} (\ log n) ^ {2})}
Фиксированное рациональное числоГипергеометрический рядO (M (n) (log ⁡ n) 2) {\ displaystyle O (M (n) (\ log n) ^ {2})}{\ displaystyle O (M (n) (\ log n) ^ { 2})}
m / 24 {\ displaystyle m / 24}{\ displaystyle m / 24} для m {\ displaystyle m}mцелое число.Среднее арифметико-геометрическое итерацияO (M (n) log ⁡ n) {\ displaystyle O (M (n) \ log n)}{\ displaystyle O (M (n) \ log n)}
Гипергеометрическая функция p F q {\ displaystyle {} _ {p} \! F_ {q}}{\ displaystyle {} _ {p} \! F_ {q}} n {\ displaystyle n}n -цифровое число(как описано в Borwein Borwein)О (M (n) n 1/2 (журнал ⁡ n) 2) {\ Displaystyle O (M (n) n ^ {1/2} (\ log n) ^ {2})}{\ displaystyle O (M (n) n ^ {1/2} (\ log n) ^ {2})}
Фиксированное рациональное числоГипергеометрический рядO (M (n) (log ⁡ n) 2) {\ displaystyle O (M (n) (\ log n) ^ {2})}{\ displaystyle O (M (n) (\ log n) ^ { 2})}

Математические константы

В этой таблице указана сложность вычисления приближений к заданным константам для n {\ displaystyle n}n правильных цифр.

КонстантаАлгоритмСложность
Золотое сечение, ϕ {\ displaystyle \ phi}\ phi Метод Ньютона O (M (n)) {\ displaystyle O (M (n))}O (M (n))
квадратный корень из 2, 2 {\ displaystyle {\ sqrt {2}}}{\ sqrt {2}} метод НьютонаO (M (n)) {\ displaystyle O (M (n))}O (M (n))
число Эйлера, e {\ displaystyle e}e двоичное расщепление ряда Тейлора для экспоненциальной функцииO (M (n) журнал ⁡ n) {\ displaystyle O (M (n) \ log n)}{\ displaystyle O (M (n) \ log n)}
Обращение натурального логарифма НьютонаO (M (n) log ⁡ n) {\ displaystyle O (M (n) \ log n)}{\ displaystyle O (M (n) \ log n)}
Pi, π {\ displaystyle \ pi}\ pi Двоичное разбиение ряда arctan в формуле Мачина O (M (n) (log ⁡ n) 2) {\ displaystyle O (M (n) (\ log n) ^ {2})}{\ displaystyle O (M (n) (\ log n) ^ { 2})}
алгоритм Гаусса – Лежандра O (M (n) log ⁡ n) {\ displaystyle O (M ( n) \ log n)}{\ displaystyle O (M (n) \ log n)}
постоянная Эйлера, γ {\ displaystyle \ gamma}\ gamma метод Суини (аппроксимация в терминах экспоненциального интеграла )O (M (n) (журнал ⁡ n) 2) {\ displaystyle O (M (n) (\ log n) ^ {2})}{\ displaystyle O (M (n) (\ log n) ^ { 2})}
Теория чисел

Алгоритмы для теоретико-числовых вычислений изучаются в теория вычислительных чисел.

ОперацияВходВыходАлгоритмСложность
Наибольший общий делитель Два n {\ displaystyle n}n -цифровые целые числаОдно целое число, состоящее не более чем из n {\ displaystyle n}n цифралгоритм Евклида O (n 2) {\ displaystyle O (n ^ {2})}O (n ^ {{2}})
Алгоритм двоичного GCD O (n 2) {\ displaystyle O (n ^ {2})}O (n ^ {{2}})
влево / вправо k- арный алгоритм двоичного НОДO (n 2 log ⁡ n) {\ displaystyle O (n ^ {2} \ log n)}{\ displaystyle O (n ^ {2} \ log n)}
O (M (n) log ⁡ n) {\ displaystyle O (M ( n) \ log n)}{\ displaystyle O (M (n) \ log n)}
O (M (n) log ⁡ n) {\ displaystyle O (M (n) \ log n)}{\ displaystyle O (M (n) \ log n)}
символ Якоби Два n {\ displaystyle n}n -цифровые целые0 {\ displaystyle 0}{\ displaystyle 0} , - 1 {\ displaystyle -1}-1или 1 {\ displaystyle 1}1Управляемый Шёнхаге алгоритм евклидова спускаO (M ( n) журнал ⁡ N) {\ displaystyle O (M (n) \ log n)}{\ displaystyle O (M (n) \ log n)}
алгоритм Стеле – ЦиммерманаO (M (n) log ⁡ n) {\ displaystyle O (M (n) \ log n)}{\ displaystyle O (M (n) \ log n)}
Факториал Положительное целое число меньше m {\ displaystyle m}mOne O (m log ⁡ m) {\ displaystyle O (m \ log m)}O (m \ log m) -цифровое целое числоУмножение снизу вверхO (M (m 2) log ⁡ m) {\ displaystyle O (M (m ^ {2}) \ log m) }{\ displaystyle O (M (m ^ {2}) \ log m)}
Двоичное разбиениеO (M (m log ⁡ m) log ⁡ m) {\ displaystyle O (M (m \ log m) \ log m)}{\ displaystyle О (М (м \ журнал м) \ журнал м)}
Возведение в степень простых множителей m {\ displaystyle m}mO (M (m log ⁡ m) log ⁡ log ⁡ m) {\ displaystyle O (M (m \ log m) \ log \ log m)}{\ displaystyle O (M (m \ log m) \ log \ log m)} ,. O (M (m log ⁡ m)) {\ displaystyle O (M (m \ log m))}{\ displaystyle O (M (m \ log m))}
Тест на простоту A n {\ displaystyle n}n -цифровое целое числоВерно или нетТест простоты AKS O (n 6) {\ displaystyle O (n ^ {6})}{\ displaystyle O (n ^ {6})} или O (n 6 + ε) {\ displaystyle O (n ^ {6+ \ varepsilon})}{\ displaystyle O (n ^ {6+ \ varepsilon})} ,. O (n 3) {\ displaystyle O (n ^ {3})}O (n ^ {{3}}) , предполагая гипотезу Агравала
Доказательство простоты эллиптической кривой O (n 4 + ε) {\ displaystyle O (n ^ {4+ \ varepsilon})}{ \ Displaystyle O (п ^ {4+ \ varepsilon})} эвристически
тест простоты Baillie-PSW О (n 2 + ε) {\ displaystyle O (n ^ {2+ \ varepsilon})}{\ displaystyle O (n ^ {2+ \ varepsilon})}
Тест простоты Миллера – Рабина O (kn 2 + ε) {\ displaystyle O (kn ^ {2+ \ varepsilon})}{\ displaystyle O (kn ^ {2+ \ varepsilon})}
Тест простоты Соловея – Штрассена O (kn 2 + ε) {\ displaystyle O (kn ^ {2+ \ varepsilon})}{\ displaystyle O (kn ^ {2+ \ varepsilon})}
Целочисленная факторизация A b {\ displaystyle b}b -битовое целое числоНабор множителейСито общего числового поля O ((1 + ε) b) {\ displaystyle O ((1+ \ varepsilon) ^ {b})}{\ displaystyle O ((1+ \ varepsilon) ^ {b})}
алгоритм Шора O (b 3) {\ displaystyle O (b ^ {3})}{\ displaystyle O (b ^ {3})} на квантовом компьютере
Матричная алгебра

Следующие цифры сложности предполагают, что арифметика с отдельными элементами имеет сложность O (1), как и в случае с фиксированной точностью арифметикой с плавающей запятой или операциями над Конечное поле.

ОперацияВходВыходАлгоритмСложность
Умножение матриц Две n × n {\ displaystyle n \ times n}n \ times n матрицыOne n × n { \ displaystyle n \ times n}n \ times n матрицаУмножение матриц учебника O (n 3) {\ displaystyle O (n ^ {3})}O (n ^ {{3}})
алгоритм Штрассена O ( n 2.807) {\ displaystyle O (n ^ {2.807})}{\ displaystyle O (n ^ {2.807})}
алгоритм Копперсмита – Винограда O (n 2.376) {\ displaystyle O (n ^ {2.376})}{\ displaystyle O (n ^ {2.376})}
Оптимизированные алгоритмы, подобные CWO (n 2.373) {\ displaystyle O (n ^ {2.373})}{\ displaystyle O (n ^ {2.373})}
Умножение матрицыOne n × m {\ displaystyle n \ times m}п \ раз м матрица

одна m × p {\ displaystyle m \ times p}{\ displaystyle m \ times p} матрица

One n × p {\ displaystyle n \ times p}п \ умножить на p матрицаУмножение матриц в учебникеO (nmp) {\ displaystyle O (nmp)}{\ displaystyle O (nmp)}
Умножение матрицOne n × ⌈ n ⌉ {\ displaystyle n \ times \ lceil n \ rceil}{\ displaystyle n \ times \ lceil n \ rceil} matrix

one ⌈ n ⌉ × n {\ displaystyle \ lceil n \ rceil \ times n}{\ displaystyle \ lceil n \ rceil \ times n} matrix

Один n × n {\ displaystyle n \ times n}n \ times n matrixАлгоритмы, указанные вO (n ω (k) + ϵ) {\ displaystyle O (n ^ {\ omega (k) + \ epsilon})}{\ displaystyle O (n ^ {\ omega (k) + \ epsilon})} , где верхние границы для ω (k) {\ displaystyle \ omega (k)}\ omega (k) даны в
Инверсия матриц Один n × n {\ displaystyle n \ times n}n \ times n матрицаOne n × n {\ displaystyle n \ times n}n \ times n матрицаисключение Гаусса – Джордана O (n 3) {\ displaystyle O (n ^ {3})}O (n ^ {{3}})
алгоритм ШтрассенаO (n 2.807) {\ displaystyle O (n ^ {2.807})}{\ displaystyle O (n ^ {2.807})}
Алгоритм Копперсмита – ВиноградаO (n 2.376) {\ displaystyle O (n ^ {2.376})}{\ displaystyle O (n ^ {2.376})}
Оптимизированные алгоритмы, подобные CWO (n 2.373) {\ displaystyle O (n ^ {2.373})}{\ displaystyle O (n ^ {2.373})}
Разложение по сингулярным числам Один m × n {\ displaystyle m \ times n}м \ раз п матрицаОдна матрица m × m {\ displaystyle m \ times m}m \ times m ,. одна m × n {\ displaystyle m \ times n}м \ раз п матрица,. один n × n {\ displaystyle n \ times n}n \ times n матрица ixБидиагонализация и алгоритм QRO (mn 2 + m 2 n) {\ displaystyle O (mn ^ {2} + m ^ {2} n)}{\ displaystyle O (mn ^ {2} + m ^ {2} n)} . (m ≥ n {\ displaystyle m \ geq n}m \ geq n )
Одна m × n {\ displaystyle m \ times n}м \ раз п матрица,. одна n × n {\ displaystyle n \ times n}n \ times n матрица. одна n × n {\ displaystyle n \ times n}n \ times n матрицаБидиагонализация и QR-алгоритмO (mn 2) {\ displaystyle O (mn ^ {2})}{\ displaystyle O (mn ^ {2})} . (m ≥ n {\ displaystyle m \ geq n}m \ geq n )
Определитель One n × n {\ displaystyle n \ times n}n \ times n матрицаОдно числорасширение Лапласа O (n!) {\ displaystyle O (n!)}O (n!)
Алгоритм без деленияO (n 4) {\ displaystyle O (n ^ {4})}{\ displaystyle O (n ^ {4})}
LU-разложение O (n 3) {\ displaystyle O (n ^ {3})}O (n ^ {{3}})
алгоритм Барейсса O (n 3) {\ displaystyle O (n ^ {3})}O (n ^ {{3}})
Быстрое умножение матрицO (n 2.373) {\ displaystyle O (n ^ {2.373})}{\ displaystyle O (n ^ {2.373})}
Обратная подстановкаТреугольная матрица n {\ displaystyle n}n решенияОбратная подстановкаO (n 2) {\ displaystyle O (n ^ {2})}O (n ^ {{2}})

В 2005 году Генри Кон, Роберт Клейнберг, Балаж Сегеди, и Крис Уманс показал, что любая из двух различных гипотез подразумевает, что показатель умножения матриц равен 2.

^*Из-за возможности поблочного обращения матрицы, где инверсия матрица n × n {\ displaystyle n \ times n}n \ times n требует инверсии двух матриц половинного размера и шести умножений между двумя матрицами половинного размера, а так как умножение матриц имеет нижнюю границу Ом {\ дис playstyle \ Omega}\ Omega (n 2 log ⁡ n {\ displaystyle n ^ {2} \ log n}{\ displaystyle n ^ {2} \ log n} ) операций, можно показать, что алгоритм разделяй и властвуй, который использует поблочное обращение для инвертирования матрицы, выполняется с той же временной сложностью, что и алгоритм умножения матриц, который используется внутри.

Преобразует

Алгоритмы для вычисления преобразовывают функций (особенно интегральные преобразования ) широко используются во всех областях математики, в частности, анализ и обработка сигналов.

ОперацияВходВыходАлгоритмСложность
Дискретное преобразование Фурье Конечная последовательность данных размера n {\ displaystyle n}n Набор комплексных чиселБыстрое преобразование Фурье O (n log ⁡ n) {\ displaystyle O (n \ log n)}O (n \ log n)
Примечания
Ссылки
Дополнительная литература
  • Брент, Ричард П. ; Циммерманн, Пол (2010). Современная компьютерная арифметика. Издательство Кембриджского университета. ISBN 978-0-521-19469-3.
  • Кнут, Дональд Эрвин (1997). Искусство программирования. Том 2: получисловые алгоритмы (3-е изд.). Эддисон-Уэсли. ISBN 978-0-201-89684-8.
Последняя правка сделана 2021-05-15 08:29:51
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте