Изменения
Нет описания правки
{{В разработке}}
Рассмотрим конечную группу <mathtex>G</mathtex>. Для заданного <mathtex>a</mathtex> необходимо найти такое минимальное <mathtex>n</mathtex>, что <mathtex>a^n=e</mathtex>. <br>Теперь рассмотрим '''обобщенную задачу поиска порядка''', также называемую '''задачей дискретного логарифмирования''': для заданных <mathtex>a</mathtex> и <mathtex>b</mathtex> из группы найти такое минимальное <mathtex>n</mathtex>, что <mathtex>a ^ n = b</mathtex>. <br>Очевидно, <mathtex>n < |G| </mathtex> (следует из принципа Дирихле). Пусть <mathtex>m = \lceil |G| \rceil</mathtex>. Будем искать <mathtex>n</mathtex> в виде <mathtex>xm-y</mathtex>, где <mathtex>y \in 0 \dots m - 1</mathtex> и <mathtex>x \in 1 \dots m</mathtex>.<br><mathtex>a ^ n = a ^ {xm - y} = b</mathtex> <br><mathtex>a ^ {xm} = b a ^ {y}</mathtex> <br><mathtex> {a ^ m} ^ x = b a ^ y </mathtex> <br>
Далее мы выписываем все полученные выражения для левой и правой частей при всех допустимых <mathtex>x</mathtex> и <mathtex>y</mathtex> (или складываем в удобную структуру данных: отсортированный массив, хеш, дерево и т. д.). После чего ищем пересечение. Для каждого элемента одной части поиск в структуре данных для другой части (в случае с отсортированным массивом) занимает время <mathtex>O(log |G|)</mathtex>. Учитывая, что время на предварительную обработку <mathtex>O(|G|)</mathtex>, общее время работы алгоритма − <mathtex>O(|G| log |G|)</mathtex>. [[Категория: Теория групп]]