Алгоритм Харви — ван дер Хувена

Материал из testwiki
Перейти к навигации Перейти к поиску

Алгоритм Харви — ван дер Хувена — алгоритм умножения двух n-битных целых чисел с временной сложностью O(nlogn) в модели Шаблон:Не переведено 5. Предложен математиками Дэвидом Харви из университета Нового Южного Уэльса и Шаблон:Не переведено 5 из Национального центра научных исследований Франции. По состоянию на 2023 год является самым быстрым известным алгоритмом умножения чисел в данной модели, при этом оценка в O(nlogn) на временную сложность алгоритмов умножения, по всей видимости, является неулучшаемой.

История

Вопрос о существовании быстрых алгоритмов умножения целых чисел занимает важное место в теории сложности вычислений. Наиболее известные методы умножения, такие как умножение «в столбик» требуют O(n2) арифметических операций. Впервые данная оценка была улучшена в 1960 году Анатолием Карацубой, предложившим алгоритм умножения со временем работы O(nlog23)[1]. В 1971 году Шёнхаге и Штрассен предложили алгоритм на основе быстрого преобразования Фурье со временем работы O(nlognloglogn)[2]. В той же работе ими была выдвинута гипотеза о том, что оптимальный алгоритм умножения требует O(nlogn) элементарных операций. Однако долгое время оценка сверху, заданная алгоритмом Шёнхаге и Штрассена оставалась без улучшений. Только в 2007 году, спустя 36 лет, Мартин Фюрер предложил алгоритм со временем работы O(nlognKlog*n) для неуточнённой константы K>1, где log*n — итерированный логарифм[3]. В дальнейшем Харви и ван дер Хувен улучшили эту оценку сперва до O(nlogn4log*n)[4], а затем до O(nlogn), таким образом подтверждая выдвинутую в гипотезе Шёнхаге и Штрассена оценку сверху[5]. Алгоритм имеет большое теоретическое значение, так как на нём достигается предположительная нижняя оценка на время работы алгоритмов умножения чисел в модели многоленточной машины Тьюринга. Однако практическое ускорение достигается лишь на числах, длина двоичной записи которых превосходит 2172912271038 бит, в то время как число частиц в наблюдаемой вселенной оценивается как 2270[6].

Примечания

Шаблон:ПримечанияШаблон:Теоретико-числовые алгоритмы