Алгоритм Видемана

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Алгоритм Видемана — алгоритм, позволяющий получить решение системы линейных уравнений над конечным полем . Был предложен Дугласом Видеманом (англ. Douglas Wiedemann) в 1986 году. В течение некоторого времени после опубликования статьи, алгоритм не получил большой поддержки и считался пригодным только для получения наилучших оценок сложности[1]. Но позже алгоритмы Видемана были реализованы на компьютере и использовались, например, для поиска разложения многочленов на множители над конечными полями.

История возникновения[править | править код]

Алгоритмы Видемана были представлены общественности в прошлом столетии. В 1986 году в январском выпуске журнала IEEE Transactions on Information Theory была опубликована статья Дугласа Видемана под названием «Решение разреженной системы линейных уравнений над конечным полем» (англ. Solving sparse linear equations over finite fields). В ней были описаны алгоритмы для решения системы линейных уравнений над конечным полем в случае когда матрица системы является разреженной. Причём в статье были рассмотрены случаи с различными разреженными матрицами. Также в статье было опубликовано обоснование алгоритмов и оценка сложности их работы[2].

Задача[править | править код]

Алгоритм нужен чтобы решить систему линейных уравнений . Матрица имеет размерность и предполагается разреженной, количество ненулевых элементов в ней равно [1].

Теория[править | править код]

С помощью матрицы определяется невырожденное линейное отображение(которое обозначается также ) на пространстве . Рассматривается пространство , порождённое множеством векторов и определяется - линейное отображение на .

Обозначим минимальный многочлен , то есть ненулевой многочлен наименьшей степени, такой, что является нулевым отображением , при чём нормализованный так, что его свободный член равен единице. Отметим, что если , то - нулевое отображение тогда и только тогда, когда . Кроме того, делит многочлен , и поэтому .

Обозначим , где - коэффициенты . Если можно найти , то решение системы также находится: так как и , то


Пусть - какой-либо фиксированный вектор из . Обозначим стандартное билинейное отображение в как , то есть .

Так как , то последовательность

удовлетворяет линейному рекуррентному соотношению, характеристический многочлен которого равен . Пусть - характеристический многочлен самого короткого рекуррентного соотношения. Тогда . Действительно, если разделить с остатком

,

то из равенств

,

и минимальности будет следовать, что . Поскольку свободный член равен единице, то можно принять, что свободный член равен единице.

Минимальный многочлен для последовательности может быть получен с помощью алгоритма Берлекэмпа-Месси[3] по первым её членам. Существуют два метода решения исходной системы.

Первый метод. Выбирается случайный вектор . Строится и в предположении, что , находится по формуле

Этим путём с достаточно высокой вероятностью можно найти решение[2].

Второй метод. Пусть для некоторого вектора . Если вектор равен 0, то находится по формуле

(так как тогда ).


Если же , то повторяется процедура, то есть выбирается случайный вектор и строится минимальный многочлен для последовательности . Если , то и можно найти решение x по формуле

,

иначе выбирается и так далее.

Докажем, что если сделано итераций, то делит . Выше было показано, что . Далее, если предположить что делит , то поскольку - минимальный многочлен для последовательности , а многочлен её аннулирует, то , что и требовалось доказать.

Теперь очевидно, что если , то . То есть, как только будет найден нулевой вектор , то можно найти решение исходной системы по формуле

[4].

Алгоритм 1[править | править код]

В оригинальной статье алгоритм имеет такое название. На его основе строится детерминированный алгоритм, который в оригинальной статье называется алгоритм 2[5].

Описание алгоритма[править | править код]

1 этап. Приравнивается .

2 этап. Если , то решение равно , и алгоритм прекращает работу.

3 этап. Выбирается случайный вектор .

4 этап. Вычислить первые членов последовательности .

5 этап. Вычислить минимальный многочлен последовательности из 4-го этапа, причём нормализовать его так, чтобы его свободный член равнялся единице. Это можно осуществить с помощью алгоритма Берлекэмпа-Месси.

6 этап. Присвоить

, где

,

.

7 этап. Присвоить и вернуться на второй этап[5].

Обоснование корректности алгоритма с помощью метода математической индукции[править | править код]

соответствует правой части формулы без знака минус. При выбирается , рассматривается членов последовательности и находится по алгоритму Берлекэмпа-Месси. Тогда .

Пусть после проходов алгоритма выполнены равенства

Тогда после прохода

,

То есть формулы для и сохраняются. Теперь корректность алгоритма следует из раздела теория[6].

Детерминированный алгоритм[править | править код]

Описание алгоритма[править | править код]

1 этап. Найти значение .

2 этап. Приравнять нулю , а единице.

3 этап. Присвоить (единица находится на месте).

4 этап. Найти последовательность при помощи первого этапа.

5 этап. Найти последовательность , можно использовать дискретное преобразование Фурье[5].

6 этап. Найти минимальный многочлен со свободным членом равным единице с помощью алгоритма Берлекэмпа-Месси.

7 этап. Присвоить .

8 этап. Увеличить на единицу. Если и , то возвратиться на 3 этап.

9 этап. Для многочлена с помощью найденных на первом этапе значений отыскать решение системы с помощью формулы

[5].

Обоснование корректности алгоритма[править | править код]

Обратим внимание, что фактически алгоритм работает также, как и алгоритм 1, только векторы выбираются не случайно, а идёт перебор единичных векторов . Очевидно, что , где — минимальный многочлен для последовательности

.

Алгоритм закончил работу при некотором значении параметра . Предположим, что . Так как и , то . Отсюда следует, что на этапе 9 решение исходной системы точно будет найдено.

Теперь рассмотрим случай . Поскольку был совершён перебор всех единичных векторов , то вектор ортогонален . Следовательно, . Так как и -минимальный многочлен, то . Поэтому и в данном случае подтверждена корректность работы алгоритма[7].

Оценка сложности алгоритма[править | править код]

Для детерминированного алгоритма Видеманом была получена следующая оценка сложности: [5]. Полученная оценка сложности является наилучшей среди известных. Благодаря алгоритму Видемана возможно улучшение оценки сложности в других алгоритмах, использующих методы решения линейных систем[1].

Аналогичные алгоритмы[править | править код]

Где может пригодится решение системы линейных уравнений над конечным полем? Потребность в их решении возникает при использовании алгоритмов факторизации и при решении задач дискретного логарифмирования, использующих факторные базы[8]. Существует большое количество алгоритмов для получения решения системы линейных уравнений над конечными полями[9]. Помимо алгоритмов Видемана можно использовать гауссово и структурное гауссово исключения, алгоритм Ланцоша, метод сопряжённых градиентов [10] . Также известны алгоритмы основанные на быстром умножении матриц, например на алгоритмах Штрассена и Копперсмита-Винограда[11]. Свои алгоритмы были предложены Коновальцевым[12] и Бриллхартом[13][14].

В общем случае (матрица системы не является разреженной) в последнее время чаще используется алгоритм Ланцоша(вероятно, вместе со структурированным гауссовым исключением для получения более плотной матрицы подсистемы)[14]. Но в случае разреженной матрицы эффективнее всего использовать алгоритмы Видемана, так как оценки их сложности являются наилучшими из известных. Не сразу алгоритмы Видемана получили признание, но позже всё-таки были реализованы на компьютере. Алгоритмы использовались, например, для разложения многочленов на множители над конечными полями[1].

Позже появились различные модификации оригинального алгоритма, например блочный алгоритм Видемана[1].

Примечания[править | править код]

Литература[править | править код]

  • Василенко О. Н. Теоретико-числовые алгоритмы в криптографии. — М.: МЦНМО, 2003. — 328 с. — ISBN 5-94057-103-4. Архивная копия от 27 января 2007 на Wayback Machine
  • Wiedemann D.H. Solving sparce linear equations over finite fields (англ.). — 1986. — Январь (т. 32, № 1). — С. 54—62.
  • Kaltofen E.,Lobo A. Factoring high-degree polynomials by the black box Berlekamp algorithm (англ.) // Proceedings of ISSAC’94. — 1994. — С. 90—98.
  • Massey J. L. Shift-register synthesis and BCH decoding (англ.) // IEEE Trans. Inform. Theory. — 1969. — Т. 15. — С. 122—127.
  • Алексеев В. Б. Сложность умножения матриц. Обзор (рус.) // Кибернетич. сборн.. — 1988. — Т. 25. — С. 189-236.
  • Коновальцев И.В. Об одном алгоритме решения систем линеных уравнений в конечных полях (рус.) // Проблемы кибернетики. — 1967. — Т. 16. — С. 269-274.
  • Brillhart J. A note on finding depencensies over GF(2) (англ.) // Utilitas Math. — 1989. — Т. 36. — С. 211-213.
  • LaMacchia B., Odlyzko A. Solving large sparse linear systems over finite fields (англ.) // Advances in Cryptology—CRYPTO’90. — 1990. — Т. 537. — С. 109-113.
  • Coppersmith D., Odlyzko A., Schroeppel R. Discrete logarithms in GF(p) (англ.) // Algorithmica. — 1986. — Т. 1. — С. 1-15.