Участник:Zerogerc
Содержание
Примеры рандомизированных алгоритмов
Проверка числа на простот
Задача
Дано целое число
. Определить является ли оно простым.Алгоритм
Нам нужен детерминированный алгоритм работающий за
, где — полином. Однако не существует такого эффективного алгоритма. Однако существует эффективный рандомизированный алгоритм. Формально, нам нужно проверить принадлежит ли число языку простое . Для каждого и , определим:
— Для каждого нечетного простого
и— Для каждого нечетного
определим симол Якоби как , где это простые делители (не обязательно различные) числа . Заметим что сивол Якоби вычислим за— Для каждого нечетного составного
Собирая эти факты вместе, получаем просто алгоритм. Для данного выбираем случайное число , если или тогда говорим что число составное, иначе говорим что оно простое. Этот алгоритм всегда скажет что число простое, если оно действительно простое. Однако если число составное, то алгоритм скажет что оно составное с вероятностью .
Заметим что повторяя этот алгоритм несколько раз можно увеличить вероятность правильного ответа.
Проверка двудольного графа на существование в нем полного паросочетания
Задача
— двудольный граф, где и , тогда полным паросочетанием называется такое что каждая вершина является концом ровно одного ребра из .
Алгоритм
Пусть у нас есть матрица
размером , где . Пусть если , иначе. Пусть детерминант матрицы . Где это множество всех перестановок . Каждая такая перестановка это возможное полное паросочетание. Тогда ясно что если когда в полное паросочетание. Таким образом: в графе полное паросочетаниеЗаметим две вещи. Первое: у полинома
всего переменных и общая степень не более . Второе: хотя размер может быть экспоненциальным, для точно заданных значений cуществуют известные полиномиальные алгоритмы. (задача вычисления детерминанта )Это ведет нас к алоритму, который называется рандомизированный алгоритм Ловаса. Сформулируем его: выберем случайные числа для
. Если значит говорим что в графе есть полное паросочетание, иначе говорим что нету. Основное преимущество этого алгоритма в том, что он может быть реализован с помощью рандомизированной схемы, а это значит что он может быть эффективно реализован используя параллельные вычисления.Проверка полиномов на равенство
В предыдущих двух примерах мы обсуждали задачи для которых известен детерминированный алгоритм работающий за полиноминильное время. Сейчас мы опишем задачу для которой такого алгоритма пока не придумали.
Задача
Есть полином с целыми коэффициентами. Нужно проверить, является ли полином тождественным нулем. Будем считать что полином представлен в виде арифметической схемы. Арифметическая схема похожа на логическую только вместо операций
она использует операции . Формально это ориентированный граф в котором есть источников и каждая вершина не являющаяся источником имеет входа и один выход. Есть одна вершина являющаяся стоком. Каждая внутрення вершина помечена одной из трех aрифметических операций. Значение полинома считается путем помещения на источники целых чисел и применения всех операций в порядке заданном графом.Заметим что исходная задача звучала как проверка двух полиномов не равенство. Мы свели ее к проверке полинома на равенство нулю путем такого преобразования. Пусть у нас было две арифметические схемы
которые нужно проверить на равенство. Мы строим новую схему .