A рандомизированный алгоритм - это алгоритм, который использует степень случайности как часть его логики. Алгоритм обычно использует равномерно случайные биты в качестве вспомогательного входа для управления своим поведением в надежде на достижение хорошей производительности в «среднем случае» по всем возможным вариантам выбора случайных битов. Формально производительность алгоритма будет случайной величиной, определяемой случайными битами; таким образом, либо время выполнения, либо выход (или оба) являются случайными величинами.
Необходимо различать алгоритмы, которые используют случайный ввод, чтобы они всегда завершались правильным ответом, но где ожидаемое время выполнения конечно (алгоритмы Лас-Вегаса, например Quicksort ), и алгоритмы, которые могут дать неправильный результат (алгоритмы Монте-Карло, например, алгоритм Монте-Карло для проблемы MFAS ) или не могут дать результат либо сигнализируя об отказе, либо не завершая работу. В некоторых случаях вероятностные алгоритмы являются единственным практическим средством решения проблемы.
В обычной практике рандомизированные алгоритмы аппроксимируются с использованием генератора псевдослучайных чисел вместо истинного источника случайных битов. ; такая реализация может отклоняться от ожидаемого теоретического поведения.
В качестве мотивирующего примера рассмотрим проблему поиска буквы «а» в массив из n элементов.
Входные данные : массив из n≥2 элементов, половина из которых - «а», а другая половина - «b».
Выходные данные : Найдите «a» в массиве.
Мы даем две версии алгоритма: один алгоритм Лас-Вегаса и один алгоритм Монте-Карло.
алгоритм Лас-Вегаса:
findA_LV (array A, n) begin repeat Случайно выбрать один элемент из n элементов. пока не будет найдено 'a' end
Этот алгоритм будет успешным с вероятностью 1. Число итераций варьируется и может быть сколь угодно большим, но ожидаемое количество итераций равно
Поскольку он постоянен, ожидаемое время выполнения для многих вызовов составляет . (См. нотация Big O )
алгоритм Монте-Карло:
findA_MC (array A, n, k) begin i = 0 repeat Случайно выберите один элемент из n элементов. I = i + 1, пока i = k или найдено 'a' end
Если найдено 'a', алгоритм завершается успешно, иначе алгоритм не работает. После k итераций вероятность нахождения 'a' составляет:
Этот алгоритм не гарантирует успеха, но время выполнения ограничено. Число итераций всегда меньше или равно k. Принимая k постоянным, время выполнения (ожидаемое и абсолютное) равно .
Рандомизированные алгоритмы особенно полезен при столкновении со злонамеренным «противником» или злоумышленником, который намеренно пытается ввести неверные данные в алгоритм (см. сложность наихудшего случая и анализ конкуренции (онлайн-алгоритм) ), например, в дилемме заключенного. Именно по этой причине случайный s широко используется в криптографии. В криптографических приложениях нельзя использовать псевдослучайные числа, поскольку злоумышленник может их предсказать, что делает алгоритм эффективно детерминированным. Следовательно, требуется либо источник истинно случайных чисел, либо криптографически безопасный генератор псевдослучайных чисел. Другой областью, в которой присуща случайность, является квантовые вычисления.
. В приведенном выше примере алгоритм Лас-Вегаса всегда выдает правильный ответ, но время его выполнения является случайной величиной. Алгоритм Монте-Карло (связанный с методом Монте-Карло для моделирования) гарантированно завершится за время, которое может быть ограничено функцией размером входных данных и ее параметром k, но допускает небольшую вероятность ошибка. Обратите внимание, что любой алгоритм Лас-Вегаса может быть преобразован в алгоритм Монте-Карло (с помощью неравенства Маркова ), если он выдает произвольный, возможно, неправильный ответ, если он не может быть выполнен в течение заданного времени. И наоборот, если существует эффективная процедура проверки для проверки правильности ответа, то алгоритм Монте-Карло может быть преобразован в алгоритм Лас-Вегаса путем повторного запуска алгоритма Монте-Карло до получения правильного ответа.
.
Теория вычислительной сложности моделирует рандомизированные алгоритмы как вероятностные машины Тьюринга. Рассмотрены как Лас-Вегас, так и алгоритмы Монте-Карло, и изучается несколько классов сложности. Самым основным классом рандомизированной сложности является RP, который представляет собой класс задач принятия решений, для которых существует эффективный (полиномиальное время) рандомизированный алгоритм (или вероятностная машина Тьюринга), который распознает NO- экземпляров с абсолютной достоверностью и распознает YES-экземпляры с вероятностью не менее 1/2. Класс дополнения для RP - co-RP. Классы проблем, имеющие (возможно, не завершающиеся) алгоритмы с полиномиальным временем средним временем выполнения случая, вывод которого всегда правильный, называются в ZPP.
Класс проблем, для которых экземпляры ДА и НЕТ могут быть идентифицированы с некоторой ошибкой называется BPP. Этот класс действует как рандомизированный эквивалент P, то есть BPP представляет собой класс эффективных рандомизированных алгоритмов.
Исторически первым рандомизированным алгоритмом был метод, разработанный Майклом О. Рабином для задачи ближайшей пары в вычислительной геометрия. Исследование рандомизированных алгоритмов было стимулировано открытием в 1977 г. рандомизированного теста на простоту (т. Е. Определения простоты числа) Робертом М. Соловей и Фолькер Штрассен. Вскоре после этого Майкл О. Рабин продемонстрировал, что критерий простоты Миллера 1976 года можно превратить в рандомизированный алгоритм. В то время не было известно практического детерминированного алгоритма для простоты.
Тест простоты Миллера-Рабина основан на бинарном соотношении между двумя положительными целыми числами k и n, которое можно выразить, сказав, что k "является свидетельством составности" n. Можно показать, что
Обратите внимание, что это означает, что проблема простоты заключается в Co- RP.
. Если один случайным образом выбирает на 100 чисел меньше составного числа n, то вероятность не найти такого «свидетеля» равна ( 1/4), так что для большинства практических целей это хороший тест на простоту. Если n большое, возможно, нет другого практического теста. Вероятность ошибки можно снизить до произвольной степени, выполнив достаточно независимых тестов.
Следовательно, на практике нет штрафа, связанного с принятием малой вероятности ошибки, так как с небольшой осторожностью вероятность ошибки может быть сделана астрономически малой. Действительно, несмотря на то, что с тех пор был найден детерминированный тест на простоту за полиномиальное время (см. тест на простоту AKS ), он не заменил старые вероятностные тесты в криптографическом программном обеспечении И в обозримом будущем этого не ожидается.
Quicksort - знакомый, часто используемый алгоритм, в котором может быть полезна случайность. Любая детерминированная версия этого алгоритма требует O (n) времени для сортировки n чисел для некоторого четко определенного класса вырожденных входов (таких как уже отсортированный массив) с конкретным классом входных данных, которые генерируют это поведение определяется протоколом для выбора точки поворота. Однако, если алгоритм выбирает поворотные элементы равномерно и случайным образом, он имеет доказуемо высокую вероятность завершения за время O (n log n) независимо от характеристик входных данных.
В вычислительной геометрии - стандартный метод построения структуры, подобной выпуклой оболочке или триангуляции Делоне. - это случайным образом переставлять входные точки, а затем вставлять их одну за другой в существующую структуру. Рандомизация гарантирует, что ожидаемое количество изменений в структуре, вызванных вставкой, невелико, и поэтому ожидаемое время работы алгоритма может быть ограничено сверху. Этот метод известен как.
Input : A graph G (V, E)
Output : A cut разбиение вершин на L и R с минимальным количеством ребер между L и R.
Напомним, что сокращение двух узлов, u и v, в (мульти-) граф дает новый узел u 'с ребрами, которые представляют собой объединение ребер, инцидентных либо на u, либо на v, за исключением любого ребра (ребер), соединяющего u и v. На рисунке 1 показан пример сжатия вершины A и B. При сжатии результирующий граф может иметь параллельные ребра, но не содержать петель.
Рис. 2: Успешный запуск алгоритма Каргера на 10-вершинном графе. Минимальный разрез имеет размер 3 и обозначен цветами вершин. Рисунок 1: Сокращение вершин A и BБазовый алгоритм Каргера:
begin i = 1 repeat repeat Возьмите случайное ребро (u, v) ∈ E в G, замените u и v сжатием u ', пока не останется только 2 узла, получите соответствующий результат вырезания C i i = i + 1 до тех пор, пока i = m не выводит минимальный отрезок из C 1,C2,..., C m. end
При каждом выполнении внешнего цикла алгоритм повторяет внутренний цикл до тех пор, пока не останется только 2 узла, получится соответствующий разрез. Время выполнения одного выполнения составляет , а n обозначает количество вершин. После m раз выполнения внешнего цикла мы выводим минимальное сокращение среди всех результатов. На рисунке 2 приведен пример одного выполнения алгоритма. После выполнения мы получаем разрез размером 3.
Лемма 1 : Пусть k будет минимальным размером разреза, и пусть C = {e 1,e2,..., e k } быть минимальным сокращением. Если во время итерации i ни одно ребро e ∈ C не выбрано для сжатия, то C i = C.
Доказательство : если G не связно, то G можно разделить на L и R без ребра между ними. Таким образом, минимальный разрез в несвязном графе равен 0. Теперь предположим, что G связан. Пусть V = L∪R - разбиение V, индуцированное C: C = {{u, v} ∈ E: u ∈ L, v ∈ R} (определено корректно, поскольку G связна). Рассмотрим ребро {u, v} графа C. Изначально u, v - различные вершины. Пока мы выбираем край , u и v не объединяются. Таким образом, в конце алгоритма у нас есть два составных узла, покрывающих весь граф, один из которых состоит из вершин L, а другой - из вершин R. Как и на рисунке 2, размер минимального разреза равен 1, и С = {(А, В)}. Если мы не выберем (A, B) для сокращения, мы можем получить минимальное сокращение.
Лемма 2 : Если G - мультиграф с p вершинами и минимальный разрез которого имеет размер k, то G имеет не менее pk / 2 ребер.
Доказательство : поскольку минимальный разрез равен k, каждая вершина v должна удовлетворять степени (v) ≥ k. Следовательно, сумма степеней не меньше pk. Но, как известно, сумма степеней вершин равна 2 | E |. Лемма следует.
Анализ алгоритма
Вероятность успеха алгоритма равна 1 - вероятность того, что все попытки потерпят неудачу. По независимости вероятность того, что все попытки потерпят неудачу, равна
Согласно лемме 1 вероятность того, что C i = C, является вероятностью того, что ни одно ребро C не будет выбрано во время итерации i. Рассмотрим внутренний цикл. Пусть G j обозначает граф после j сжатий ребер, где j ∈ {0,1,..., n - 3}. G j имеет n - j вершин. Мы используем цепное правило условных возможностей. Вероятность того, что ребро, выбранное на итерации j, не входит в C, учитывая, что никакое ребро C не было выбрано ранее, составляет . Обратите внимание, что G j все еще имеет минимальный разрез размера k, поэтому по лемме 2 он все еще имеет не менее кромки.
Таким образом, .
Итак, по цепному правилу вероятность нахождения минимального разреза C составляет
Отмена дает . Таким образом, вероятность успеха алгоритма составляет не менее . Для , это эквивалентно на . Алгоритм находит минимальное сокращение с вероятностью за время .
Случайность можно рассматривать как ресурс, как пространство и время. Дерандомизация - это процесс удаления случайности (или использования как можно меньшего ее количества). В настоящее время неизвестно, можно ли дерандомизировать все алгоритмы без значительного увеличения времени их работы. Например, в вычислительной сложности неизвестно, является ли P = BPP, т. Е. Мы не знаем, можем ли мы взять произвольный рандомизированный алгоритм, который работает за полиномиальное время с небольшой вероятностью ошибки и дерандомизируйте его, чтобы он работал за полиномиальное время без использования случайности.
Существуют определенные методы, которые могут использоваться для дерандомизации конкретных рандомизированных алгоритмов:
Когда модель вычислений ограничена машинами Тьюринга, в настоящее время это открытый вопрос позволяет ли способность делать случайный выбор за полиномиальное время некоторые проблемы, которые не могут быть решены редактируется за полиномиальное время без этой способности; это вопрос, является ли P = BPP. Однако в других контекстах есть конкретные примеры проблем, в которых рандомизация приводит к строгим улучшениям.