Алгоритм Ленстры — Ленстры — Ловаса: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Содержимое удалено Содержимое добавлено
Новая страница: «'''Алгоритм Ленстра-Ленстра-Ловаса''' (ЛЛЛ) - алгоритм {{iw|сокращения ба...»
(нет различий)

Версия от 23:52, 5 декабря 2019

Алгоритм Ленстра-Ленстра-Ловаса (ЛЛЛ) - алгоритм сокращения базиса решетки[англ.], изобретенный Арьеном Ленстра, Хендриком Ленстра и Ласло Ловасом в 1982 году.[1] Алгоритм является основой проведения манипуляций с базисами на решетках в евклидовом пространстве.

Имея на входе базис целочисленных n-мерных векторов , алгоритм, заданный на решетке (подгруппе Rn ) с , экспоненциально приближает кратчайший ортогональный базис на решётке за полиномиальное время

где - максимальная длина по Евклидовой норме, то есть .[2] Изначально, алгоритм ЛЛЛ, работая за полиномиальное время, использовался для факторизации многочленов с целыми коэффициентами, для одновременного приближения действительных чисел рациональными, и для решения задачи целочисленного линейного программирования в пространстве фиксированной размерности.

Базис, сокращенный методом ЛЛЛ

Описание исходных данных и работы ЛЛЛ следующее: Пусть дан базис

преобразованный с помощью процесса Грамма-Шмидта в ортогональный базис

с коэффициентами Грамма-Шмидта, определяемыми следующим образом

, для всех таких, что .

Таким образом (упорядоченный) базис называется сокращенным по методу ЛЛЛ базисом, если существует параметр из промежутка (0.25,1] такой, что выполняются условия:[2]

  1. (Условие сокращения размера) Для всех таких, что . По определению это свойство гарантирует сокращение длины векторов упорядоченного базиса.
  2. (Условие Ловаса) For k = 1,2,..,n .

Оценив значение параметра , можно сказать насколько хорошо базис сокращен. Если значение параметра большое (но лежит в промежутке (0.25,1]), то базис сокращен достаточно. Изначально А. Ленстра, Х. Ленстра и Л. Ловас в своей статье продемонстрировали работу ЛЛЛ алгоритма для параметра . Несмотря на то что алгоритм ЛЛЛ остается корректным и для , его работа за полиномиальное время гарантируется только для в промежутке .

Не существует алгоритма, который бы вычислял почти ортогональный базис с векторами наименьшей длины из возможных для базиса на решётке с размерностью более 4 за полиномиальное время.[3] В то же время, базис, преобразованный методом ЛЛЛ, почти самый короткий из всех возможных, в том смысле, что существуют абсолютные границы такие, что первый базисный вектор не боле чем в раз длиннее чем самый короткий вектор решётки, аналогично, второй вектор базиса не более чем в раз превосходит второй кратчайший вектор решетки, и так далее.

Алгоритм ЛЛЛ

Следующее описание основано на (Hoffstein, Pipher & Silverman 2008, Теорема 6.68).[4]

ВВОД:

базис решетки ,
параметр c , чаще всего

ПРОЦЕСС:

   Выполнить процесса Грамма-Шмидта без нормировки:
   
   Define , который должен всегда использовать самые последние значения .
   Let 
   while  do
       for j  from  to 0 do
           if  do
               
               Обновить входные данные для ortho и все данные, зависящие от , если необходимо. 
               (Простой метод это пересчет  если  меняется.)
           end if
       end for
       if  then
           
       else
           Поменять  и .
           Обновить входные данные для ortho и все данные, зависящие от , если необходимо. (См. выше комментарий.)
           
       end if
   end while

ВЫВОД: Сокращенный методом ЛЛЛ базис:

Свойства уменьшенного базиса

Пусть - сокращенный по алгоритму ЛЛЛ с параметром базис на решётке . Из определения такого базиса можно получить несколько свойств .

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

Пример

Следующий пример основывается на тексте Босма В.[6]

ВВОД:

Пусть базис решетки , задан столбцами матрицы:

По ходу алгоритма ЛЛЛ получается следующее:

  1. For DO:
    1. For присвоить и
  2. Здесь 4 шаг алгоритма ЛЛЛ пропущен так как соответствует условию уменьшения размера
  3. For и For вычислить и : поэтому и поэтому и
  4. While DO
    1. Сократить размер и скорректировать и

      в соответствии с процедурой сокращения в 4 шаге: Для выполнить подпрограмму сокращения для (3,1):

      1. и
      2. Присвоить

      For выполнить подпрограмму сокращения для (3,2):

      1. и
      2. Присвоить
    2. Так как , следовательно:
      1. Поменять местами и

Применить замену, продолжить исполнение алгоритма с базисом решетки, который задан следующим образом

Повторить шаги алгоритма.

  1. .
  2. .
  3. For выполнить подпрограмму сокращения для (2,1):
    1. и
    2. Set
  4. Так как , следовательно:
  5. Поменять местами и

ВЫВОД: базис, сокращенный методом ЛЛЛ

Применение алгоритма

ЛЛЛ часто применяется в алгоритмах обнаружения MIMO [7] и криптосистемах с открытым ключем: криптосистемах, основанных на задаче о ранце[англ.], RSA с конкретными настройками, NTRUEncrypt, и так далее. Алгоритм может быть использован для нахождения целочисленных решений в разных задачах.[8]

В частности, алгоритм ЛЛЛ формирует ядро алгоритмов поиска целочисленных решений. К примеру, зная, что r = 1.618034 это (округленный) корень полинома, неизвестное квадратное уравнение с целыми коэффициентами получить с помощью алгоритма ЛЛЛ уменьшения базиса решетки в , порожденной векторами and . Первый вектор в уменьшенном базисе будет целочисленной линейной комбинацией трех данных, поэтому будет обязательно представим в виде ; но такой вектор будет коротким, только если a, b, c достаточно маленькие и еще меньше. Поэтому первые три координаты полученного короткого вектора с большой вероятностью будут коэффициентами целочисленного квадратного полинома, у которого один из корней - r. В этом примере алгоритм ЛЛЛ в качестве результата выводит вектор [1, -1, -1, 0.00025], и, действительно, у есть корень, равный золотому сечению, 1.6180339887....

Реализации алгоритма

ЛЛЛ реализован в следующих функциях и методах:

См. также

Примечания

  1. Ленстра А., Ленстра Х., Ловас Л. Factoring polynomials with rational coefficients // Mathematische Annalen. — 1982. — С. 515–534. — ISSN 4. — doi:10.1007/BF01457454.
  2. 1 2 3 4 Galbraith, Steven. Часть 17 // Mathematics of Public Key Cryptography (англ.). — 2012.
  3. Nguyen, Phong Q., Stehlé, Damien. Low-dimensional lattice basis reduction revisited (англ.) // ACM Transactions on Algorithms. — P. 1–48. — doi:10.1145/1597036.1597050.
  4. Silverman,Joseph. Introduction to Mathematical Cryptography Errata.
  5. Regev, Oded. Lattices in Computer Science: LLL Algorithm // New York University.
  6. Bosma, Wieb. 4. LLL.
  7. Shahabuddin, Shahriar et al., "A Customized Lattice Reduction Multiprocessor for MIMO Detection", in Arxiv preprint, Январь 2015.
  8. D. Simon. Selected applications of LLL in number theory // LLL+25 Conference дата=2007. — Caen, France.

Литература