Дискретное логарифмирование в группе — различия между версиями
| Строка 1: | Строка 1: | ||
| − | {{ | + | {{Требует доработки |
| + | |item1=Зачем нужен алгоритм с временем работы <tex>O(|G| log |G|)</tex>, если можно просто перебрать все степени за <tex>O(|G|)</tex>? | ||
| + | }} | ||
Рассмотрим конечную группу <tex>G</tex>. Для заданного <tex>a</tex> необходимо найти такое минимальное <tex>n</tex>, что <tex>a^n=e</tex>. <br> | Рассмотрим конечную группу <tex>G</tex>. Для заданного <tex>a</tex> необходимо найти такое минимальное <tex>n</tex>, что <tex>a^n=e</tex>. <br> | ||
Версия 11:12, 30 июня 2010
- Зачем нужен алгоритм с временем работы , если можно просто перебрать все степени за ?
Если Вы исправили некоторые из указанных выше замечаний, просьба дописать в начало соответствующего пункта (Исправлено).
Рассмотрим конечную группу . Для заданного необходимо найти такое минимальное , что .
Теперь рассмотрим обобщенную задачу поиска порядка, также называемую задачей дискретного логарифмирования: для заданных и из группы найти такое минимальное , что .
Очевидно, (следует из принципа Дирихле). Пусть . Будем искать в виде , где и .
Далее мы выписываем все полученные выражения для левой и правой частей при всех допустимых и (или складываем в удобную структуру данных: отсортированный массив, хеш, дерево и т. д.). После чего ищем пересечение. Для каждого элемента одной части поиск в структуре данных для другой части (в случае с отсортированным массивом) занимает время . Учитывая, что время на предварительную обработку , общее время работы алгоритма − .