Быстрые алгоритмы
Быстрые алгоритмы — это область вычислительной математики, которая изучает алгоритмы вычисления заданной функции с заданной точностью с использованием как можно меньшего числа битовых операций.
Битовая операция[править]
→ Битовая операция (теория алгоритмов)
Будем считать, что числа записаны в двоичной системе счисления, знаки которой и называются битами.
Определение. Запись знаков , сложение, вычитание и умножение двух битов назовём одной элементарной или битовой операцией.
Сложность вычисления (битовая)[править]
→ Сложность вычисления (битовая)
Для оценки качества быстрого метода или алгоритма используется функция битовая сложность вычисления которая обозначается через
- .
Функция сложности умножения имеет специальное обозначение
- .
Оценка сложности наилучшего (в асимптотике) из известных в настоящее время алгоритмов умножения[1] (и по всей видимости, асимптотически более быстрого метода не существует[2]):
- .
Быстрый алгоритм вычисления функции[править]
Назовём алгоритм вычисления функции быстрым, если, предполагая наилучшую оценку для , для этого алгоритма битовая сложность вычисления имеет вид:
где есть константа.
История вопроса[править]
Первые задачи по битовой сложности вычисления были поставлены А.Н. Колмогоровым[3], который при этом ссылался на работы Клода Шеннона и Норберта Винера, возбудившие его интерес к информатике.
Область быстрые алгоритмы появилась в 1960 году[4], когда был найден первый быстрый метод — метод умножения Карацубы. Впоследствии метод Карацубы был обобщён до парадигмы «Разделяй и властвуй», другими важными примерами которой являются метод двоичного разбиения[en], двоичный поиск, метод бисекции и др.
После метода Карацубы было построено много других быстрых методов, включая алгоритм Штрассена для быстрого умножения матриц Шаблон:Source-ref (обобщение идеи Карацубы на матрицы), метод умножения Шёнхаге — Штрассена[5][6], метод БВЕ[7] для вычисления простейших и высших трансцендентных функций. и т. д. Некоторые старые методы становятся быстрыми вычислительными методами, если использовать в них один из быстрых алгоритмов умножения, например, метод Ньютона для вычисления элементарных алгебраических функций и АГС метод Гаусса для вычисления простейших трансцендентных функций.
См. также[править]
- Сложность вычисления (битовая)
- Быстрое умножение
- Алгоритм быстрого возведения в степень
- АГС метод Гаусса
- Метод БВЕ
- Длинная арифметика
- Быстрое преобразование Фурье
Источники[править]
- ↑ David Harvey, Joris Van Der Hoeven Integer multiplication in time O(n log n)
- ↑ Peyman Afshani, Casper Benjamin Freksen, Lior Kamma, Kasper Green Larsen Lower Bounds for Multiplication via Network Coding
- ↑ А. Н. Колмогоров, {{{заглавие}}} // Теория информации и теория алгоритмов.. — Москва: Наука, 1987.
- ↑ Карацуба А. А. Сложность вычислений // Труды Математического института им. Стеклова. — 1995. — Vol. 211.
- ↑ Schönhage A., Strassen V. Schnelle Multiplikation großer Zahlen // Computing. — 1971. — № 7. — С. 281—292.
- ↑ Schönhage A., Grotefeld A. F. W., Vetter E. Fast algorithms: A multitape Turing machine implementation. — Zürich: B. I. Wissenschaftsverlag, 1994. — ISBN 3411168919.
- ↑ Карацуба Е. А. Быстрое вычисление трансцендентных функций // Проблемы передачи информации. — 1991. — Vol. 27. — № 4.
Ссылки[править]
- Карацуба Е. А. Быстрые алгоритмы и метод БВЕ