Алгоритм Берлекэмпа — Рабина
(также
метод Берлекэмпа
) — вероятностный метод нахождения
корней
многочленов
над
полем
с
полиномиальной
сложностью. Метод был описан американским математиком
Элвином Берлекэмпом
в 1970 году
в качестве побочного к
алгоритму
факторизации многочленов над конечными полями и позже (в 1979 году) был доработан
Михаэлем Рабином
для случая произвольных конечных полей
. Изначальная версия алгоритма, предложенная Берлекэмпом в 1967 году
, не была полиномиальной
. Опубликованная в 1970 году на основе результатов
версия алгоритма работала с большими значениями
, в ней заглавный метод использовался в качестве вспомогательного
. На момент публикации метод был распространён в профессиональной среде, однако редко встречался в литературе
.
Содержание
История
Метод был предложен Элвином Берлекэмпом в его работе по
факторизации многочленов
над конечными полями
. В ней факторизация многочлена на неприводимые сомножители над полем
сводится к нахождению корней некоторых других многочленов над полем
. При этом в оригинальной работе отсутствовало доказательство корректности алгоритма
. Алгоритм был доработан и обобщён на случай произвольных конечных полей
Михаэлем Рабином
. В 1986 году Рене Перальта описал похожий алгоритм
, решающий задачу нахождения квадратного корня в поле
, а в 2000 году метод Перальты был обобщён для решения кубических уравнений
.
В
алгоритме Берлекэмпа
многочлен
сперва представляется в виде произведения
, где
— произведение
многочленов степени
. Затем факторизация каждого такого многочлена
степени
сводится к поиску корней нового многочлена
степени
. В статье, вводящей алгоритм факторизации, было также предложено три метода для поиска корней многочлена в
поле Галуа
. Первые два сводят нахождение корней в поле
к поиску корней в поле
. Третий метод, являющийся предметом данной статьи, решает задачу поиска корней в поле
, что вместе с двумя другими решает задачу факторизации
.
Версия алгоритма факторизации, предложенная Берлекэмпом в его первой работе в 1967 г.
,
работала за
, где
— количество неприводимых сомножителей многочлена. Таким образом, алгоритм являлся неполиномиальным и был непрактичным в случае, когда простое число
было достаточно большим. В 1969 г. эта проблема была решена
, показавшим, как свести узкое место алгоритма к задаче поиска корней некоторого многочлена
. В 1970 г. статья Берлекэмпа была переиздана уже с учётом решений Цассенхауза
.
В 1980 г. Михаэль Рабин провёл строгий анализ алгоритма, обобщил его для работы с конечным полями вида
и доказал, что вероятность ошибки одной итерации алгоритма не превосходит
, а в 1981 г. Михаэль Бен-Ор усилил эту оценку до
, где
— количество различных корней многочлена
. Вопрос существования полиномиального
детерминированного
алгоритма для нахождения корней многочлена над конечным полем остаётся открытым — основные алгоритмы факторизации многочленов,
алгоритм Берлекэмпа
и
являются вероятностными. В 1981 году
показал
, что такой алгоритм существует для любого наперёд заданного числа
, однако этот результат исключительно теоретический и вопрос о возможности построения описанных им множеств на практике остаётся открытым
.
В первом издании второго тома «
Искусства программирования
» про получисленные алгоритмы
Дональд Кнут
пишет, что аналогичные процедуры факторизации были известны к 1960 г., однако редко встречались в открытом доступе
. Один из первых опубликованных примеров использования метода можно обнаружить в работе
Голомба
,
и
от 1959 года о факторизации трёхчленов над
, где рассматривался частный случай
.
Алгоритм
Постановка задачи
Пусть
— нечётное простое число. Рассмотрим многочлен
над полем
остатков по модулю
. Необходимо найти все числа
такие что
для всех возможных
.
Рандомизация
Пусть
. Нахождение всех корней такого многочлена равносильно его разбиению на линейные множители. Чтобы найти такое разбиение, достаточно научиться разбивать многочлен на любые два множителя, а затем запускаться в них рекурсивно. Для этого вводится в рассмотрение многочлен
, где
— случайное число из
. Если такой многочлен можно представить в виде произведения
, то в терминах исходного многочлена это значит, что
, что даёт разбиение на множители исходного многочлена
.
Если
, то указанные выше
дают нетривиальное разбиение
на множители,
В противном случае все корни
являются вычетами или невычетами одновременно и стоит попробовать другое значения
.
Если
также делится на некоторый многочлен
, не имеющий корней в
, то при подсчёте
с
и
будет получено разбиение бесквадратного многочлена
на нетривиальные сомножители, поэтому алгоритм позволяет найти все корни любых многочленов над
, а не только тех, которые разбиваются в произведение мономов
.
Извлечение квадратного корня
Пусть нужно решить сравнение
, решениями которого являются элементы
и
соответственно. Их нахождение эквивалентно факторизации многочлена
над полем
. В таком частном случае задача упрощается, так как для решения достаточно посчитать только
. Для полученного многочлена будет верно ровно одно из утверждений:
НОД равен
, из чего следует, что
и
являются квадратичными невычетами одновременно,
НОД равен
, из чего следует, что оба числа являются квадратичными вычетами,
НОД равен одночлену
, из чего следует, что ровно одно число из двух является квадратичным вычетом.
В третьем случае полученный одночлен должен быть равен или
, или
. Это позволяет записать решение в виде
.
Пример
Пусть нужно решить сравнение
. Для этого нужно факторизовать
. Рассмотрим возможные значения
:
Пусть
. Тогда
, откуда
. Оба числа
являются невычетами и нужно брать другое
.
Пусть
. Тогда
, откуда
. Отсюда
, значит
и
.
Проверка показывает, что действительно
и
.
Обоснование метода
Алгоритм находит разбиение
на нетривиальные множители во всех случаях, за исключением тех, в которых все числа
являются вычетами или невычетами одновременно. Согласно
, вероятность такого события для случая, когда
сами одновременно являются вычетами или невычетами одновременно (то есть, когда
не подходит для нашей процедуры), можно оценить как
, где
— количество различных чисел среди
. Таким образом, вероятность ошибки алгоритма не превосходит
.
Применение к факторизации многочленов
Из теории
конечных полей
известно, что если степень неприводимого многочлена
равна
, то такой многочлен является делителем
и не является делителем
для
.
Таким образом, последовательно рассматривая многочлены
где
и
для
, можно разбить многочлен
на множители вида
, где
— это произведение всех неприводимых многочленов степени
, которые делят многочлен
. Зная степень
, можно определить количество таких многочленов, равное
. Пусть
. Если рассмотреть многочлен
, где
, то порядок такого многочлена
в поле
должен делить число
. Если
не делится на
, то многочлен
делится на
, но не на
.
Исходя из этого
предложил искать делители многочлена
в виде
, где
— некоторый достаточно большой делитель
, например,
. В частном случае
получается в точности метод Берлекэмпа как он описан выше
.
Время работы
Поэтапно время работы одной итерации алгоритма можно оценить следующим образом, считая степень многочлена равной
:
Учитывая, что
по формуле
бинома Ньютона
, переход от
к
делается за
,
Таким образом, одна итерация алгоритма может быть произведена за
арифметических операций с элементами
, а нахождение всех корней многочлена требует в среднем
. В частном случае извлечения квадратного корня величина
равна двум, поэтому время работы оценивается как
на одну итерацию алгоритма
.
Примечания
↑
Berlekamp E. R.
(англ.)
// Mathematics of Computation. — 1970. —
Vol. 24
,
iss. 111
. —
P. 730—732
. —
ISSN
. —
doi
:
.
↑
Rabin M.
(англ.)
// SIAM Journal on Computing. — 1980. — 1 May (
vol. 9
,
iss. 2
). —
P. 273—280
. —
ISSN
. —
doi
:
.
23 июня 2019 года.
↑
Berlekamp E. R.
(англ.)
// The Bell System Technical Journal. — 1967. — October (
vol. 46
,
iss. 8
). —
P. 1853—1859
. —
ISSN
. —
doi
:
.
17 февраля 2019 года.
↑
Knuth D. E.
(англ.)
. — Reading, Massachusetts: Addison-Wesley Publishing Company, 1968. — Vol. 2. — P. 381—390. — 624 p. —
ISBN 0-201-03802-1
.
3 августа 2019 года.
Sze T. W.
(англ.)
// Mathematics of Computation. — 2011. — 3 January (
vol. 80
,
iss. 275
). —
P. 1797—1811
. —
ISSN
. —
doi
:
.
Peralta R.
(англ.)
// IEEE Transactions on Information Theory. — 1986. — November (
vol. 32
,
iss. 6
). —
P. 846—847
. —
ISSN
. —
doi
:
.
30 июня 2019 года.
Padró C., Sáez G.
(англ.)
// Applied Mathematics Letters. — 2002. — August (
vol. 15
,
iss. 6
). —
P. 703—708
. —
ISSN
. —
doi
:
.
↑
Ben-Or M.
(англ.)
// 22nd Annual Symposium on Foundations of Computer Science (sfcs 1981). — 1981. — October. —
P. 394—398
. —
doi
:
.
29 июля 2019 года.
Camion P.
(англ.)
// Combinatorial Mathematics, Proceedings of the International Colloquium on Graph Theory and Combinatorics. — Elsevier, 1983. —
P. 149—157
. —
ISBN 9780444865120
.
Grenet B., van der Hoeven J., Lecerf G.
(англ.)
// Applicable Algebra in Engineering, Communication and Computing. — 2015. —
Vol. 27
,
iss. 3
. —
P. 239
. —
ISSN
. —
doi
:
.
Golomb S. W., Hales A., Welch L. R.
(англ.)
// Shift Register Sequences. — World Scientific, 2017. — March. — P. 90—108. —
ISBN 978-981-4632-00-3
. —
doi
:
.
↑
Menezes A. J., Blake I. F., Gao X. H., Mullin R. C., Vanstone S. A.
(англ.)
. — Springer US, 1993. — P. 22—26. — 218 p. — (The Springer International Series in Engineering and Computer Science). —
ISBN 9780792392828
.
30 июня 2019 года.