Это не официальный сайт wikipedia.org 01.01.2023

Алгоритм «кенгуру» Полларда — Википедия

Алгоритм «кенгуру» Полларда

В вычислительной теории чисел[en] и вычислительной алгебре алгоритм «кенгуру» Полларда (а также лямбда-алгоритм Полларда, см. раздел «Название» ниже) — это алгоритм решения задачи дискретного логарифмирования. Алгоритм был предложен в 1978 специалистом в области теории чисел Дж. М. Поллардом[en] в той же статье[1], что и его более известный ρ-алгоритм для решения той же задачи. Хотя Поллард описывает применение этого алгоритма для задачи дискретного логарифмирования в мультипликативной группе по модулю простого p, он является, фактически, общим алгоритмом дискретного логарифмирования — он будет работать на любой циклической конечной группе.

АлгоритмПравить

Пусть G   — конечная циклическая группа порядка n  , генерируемая элементом α  , и мы ищем дискретный логарифм x   элемента β   по основанию α  . Другими словами, мы ищем x Z n  , такое, что α x = β  . Лямбда-алгоритм позволяет нам искать x   в некотором подмножестве { a , , b } Z n  . Мы можем искать полный набор возможных логарифмов, приняв a = 0   и b = n 1  , хотя в этом случае ρ-алгоритм будет эффективнее. Поступаем следующим образом:

1. Выбираем множество S   целых чисел и определяем псевдослучайное отображение[en] f : G S  .

2. Выберем целое число N   и вычислим последовательность элементов группы { x 0 , x 1 , , x N }   согласно формулам:

  • x 0 = α b  
  • x i + 1 = x i α f ( x i )   для i = 0 , 1 , , N 1  

3. Вычислим

d = i = 0 N 1 f ( x i )  .

Заметим, что

x N = x 0 α d = α b + d .  

4. Начинаем вычислять вторую последовательность элементов группы { y 0 , y 1 , }   по формулам

  • y 0 = β  
  • y i + 1 = y i α f ( y i )   для i = 0 , 1 , , N 1  

и соответствующую последовательность целых чисел согласно формуле

d n = i = 0 n 1 f ( y i )  .

Заметим, что

y i = y 0 α d i = β α d i   для i = 0 , 1 , , N 1  

5. Прекращаем вычисления { y i }   и { d i }  , когда выполняется одно из условий

A) y j = x N   для некоторого j  . Если последовательности { x i }   и { y j }   «сталкиваются» таким способом, мы имеем:
x N = y j α b + d = β α d j β = α b + d d j ( mod n ) x b + d d j ( mod n 1 )  
так что мы нашли требуемое.
B) d i > b a + d  . Если это случилось, алгоритм потерпел неудачу в поиске x  . Может быть сделана другая попытка путём изменения множества S   или/и отображения f  .

СложностьПравить

Поллард указал для алгоритма временную сложность O ( b a )  , основываясь на вероятностной аргументации, что вытекает из предположения, что f действует псевдослучайно. Заметим, что в случае, когда размер множества {a, …, b} измеряется а битах, что обычно в теории сложности, множество имеет размер log(b − a), так что алгоритмическая сложность равна O ( b a ) = O ( 2 1 2 log ( b a ) )  , что является экспонентой от размера задачи. По этой причине лямбда-алгоритм Полларда считается алгоритмом экспоненциальной сложности. За примером подэкспоненциального по времени алгоритма см. Алгоритм исчисления порядка.

НазваниеПравить

Алгоритм известен под двумя названиями.

Первое название — алгоритм «кенгуру» Полларда. Имя относится к аналогии, используемой в статье, где алгоритм был предложен. В статье алгоритм объясняется в терминах использования ручного кенгуру для поимки дикого. Как объяснял Поллард[2], эта аналогия была навеяна «обворожительной» статьёй, опубликованной в том же выпуске журнала Scientific American, что и публикация RSA криптосистемы с открытым ключом. Статья[3] описывает эксперимент, в котором «энергетическая цена движения кенгуру, измеренная в терминах потребления кислорода на различных скоростях, была определена путём помещения кенгуру на беговую дорожку».

Второе название — лямбда-алгоритм Полларда. Очень похоже на имя другого алгоритма Полларда для дискретного логарифмирования, ρ-алгоритма, и это имя связано с похожестью визуализации алгоритма с греческой буквой лямбда ( λ  ). Короткая линия буквы лямбда соответствует последовательности { x i }  . Соответственно, длинная линия соответствует последовательности { y i }  , которая «сталкивается с» первой последовательностью (подобно встрече короткой и длинной линии буквы).

Поллард предпочитает использование названия «алгоритм кенгуру»[4], чтобы избежать путнаницы с некоторыми параллельными версиями ρ-алгоритма, которые тоже носят название «лямбда-алгоритмы».

См. такжеПравить

ПримечанияПравить

  1. Pollard, 1978.
  2. Pollard, 2000, с. 437—447.
  3. Dawson, 1977, с. 78—89.
  4. jmptidcott2  (неопр.). Дата обращения: 5 ноября 2016. Архивировано 17 августа 2016 года.

ЛитератураПравить

  • J. Pollard. Monte Carlo methods for index computation mod p // Mathematics of Computation. — 1978. — Т. 32.
  • J. Pollard. Kangaroos, Monopoly and Discrete Logarithms // Journal of Cryptology. — 2000. — Т. 13. — С. 437—447.
  • T. J. Dawson. Kangaroos // Scientific American. — 1977. — С. 78—89.