Участник:Zerogerc — различия между версиями
Zerogerc (обсуждение | вклад) (→Алгоритм) |
Zerogerc (обсуждение | вклад) (→Алгоритм) |
||
Строка 23: | Строка 23: | ||
{{---}} Для каждого нечетного составного <tex>N, |\{A \in [N - 1]: gcd(N, A) = 1 \,and\,(\frac{N}{A}) = A^{\frac{N - 1}{2}}\}| \le \frac{1}{2}</tex> <tex>\,| \{A \in [N - 1]: gcd(N, A) = 1\}|</tex> | {{---}} Для каждого нечетного составного <tex>N, |\{A \in [N - 1]: gcd(N, A) = 1 \,and\,(\frac{N}{A}) = A^{\frac{N - 1}{2}}\}| \le \frac{1}{2}</tex> <tex>\,| \{A \in [N - 1]: gcd(N, A) = 1\}|</tex> | ||
+ | |||
+ | |||
+ | Собирая эти факты вместе, получаем просто алгоритм. Для данного <tex>N</tex> выбираем случайное число <tex>A: 1 \le A < N</tex>, если <tex>gcd(N,A) > 1</tex> или <tex>(\frac{N}{A}) \ne A^{\frac{N - 1}{2}} (mod \, N)</tex> тогда говорим что число составное, иначе говорим что оно простое. Этот алгоритм всегда скажет что число простое, если оно действительно простое. Однако если число составное, то алгоритм скажет что оно составное с вероятностью <tex> \ge \frac{1}{2}</tex>. | ||
+ | |||
+ | Заметим что повторяя этот алгоритм несколько раз можно увеличить вероятность правильного ответа. | ||
===Проверка двудольного графа на существование в нем полного паросочетания=== | ===Проверка двудольного графа на существование в нем полного паросочетания=== |
Версия 13:06, 25 апреля 2017
Содержание
Примеры рандомизированных алгоритмов
Проверка числа на простот
Задача
Дано целое число
. Определить является ли оно простым.Алгоритм
Нам нужен детерминированный алгоритм работающий за
, где — полином. Однако не существует такого эффективного алгоритма. Однако существует эффективный рандомизированный алгоритм. Формально, нам нужно проверить принадлежит ли число языку простое . Для каждого и , определим:
— Для каждого нечетного простого
и— Для каждого нечетного
определим симол Якоби как , где это простые делители (не обязательно различные) числа . Заметим что сивол Якоби вычислим за— Для каждого нечетного составного
Собирая эти факты вместе, получаем просто алгоритм. Для данного выбираем случайное число , если или тогда говорим что число составное, иначе говорим что оно простое. Этот алгоритм всегда скажет что число простое, если оно действительно простое. Однако если число составное, то алгоритм скажет что оно составное с вероятностью .
Заметим что повторяя этот алгоритм несколько раз можно увеличить вероятность правильного ответа.
Проверка двудольного графа на существование в нем полного паросочетания
Задача
— двудольный граф, где и , тогда полным паросочетанием называется такое что каждая вершина является концом ровно одного ребра из .
Алгоритм
Пусть у нас есть матрица
размером , где . Пусть если , иначе. Пусть детерминант матрицы . Где это множество всех перестановок . Каждая такая перестановка это возможное полное паросочетание. Тогда ясно что если когда в полное паросочетание. Таким образом: в графе полное паросочетаниеЗаметим две вещи. Первое: у полинома
всего переменных и общая??? степень не более . Второе: хотя размер может быть экспоненциальным, для точно заданных значений cуществуют известные полиномиальные алгоритмы. (задача вычисления детерминанта )Это ведет нас к алоритму, который называется рандомизированный алгоритм Ловаса. Сформулируем его: выберем случайные числа для
. Если значит говорим что в графе есть полное паросочетание, иначе говорим что нету. Основное преимущество этого алгоритма в том, что он может быть реализован с помощью рандомизированной схемы, а это значит что он может быть эффективно реализован используя параллельные вычисления.