Алгори́тм Шёнинга (англ. Schöning's Algorithm) — вероятностный алгоритм для решения задачи выполнимости булевых формул в k-конъюнктивной нормальной форме, предложенный Уве Шёнингом в 1999 году[1].
Описание для решения 3-SAT
- Дана булева формула в 3-конъюнктивной нормальной форме
.
- Повтори
раз:
- Случайно установи набор переменных
.
- Если булева формула
истинна, выведи
и заверши работу.
- Повтори
раз:
- Выбери дизъюнкцию
, которой не удовлетворяет
.
- Выбери переменную
из
.
- Установи
.
- Если булева формула
истинна, выведи
и заверши работу.
- Выведи "
невыполнима".
Временная сложность
Алгоритм Шёнинга имеет временную сложность
, где
- количество переменных, а
- количество дизъюнкций, при условии, что проверка выполнимости булевой формулы производится за
. Если булева формула
невыполнима, то алгоритм Шёнинга всегда возвращает верный результат.
Оценка ошибки
Если булева формула
выполнима, то вероятность ошибки всегда будет меньше
. Для доказательства обозначим за
набор переменных, при котором
истинна, а также
- вероятность, что алгоритм найдет
во вложенном цикле (эта стадия называется также локальным поиском). Таким образом
является нижним пределом вероятности нахождения удовлетворяющего набора переменных с помощью локального поиска. Далее мы покажем, что
. Расстоянием между двумя наборами
и
будем называть количество отличных в них бит. Определим класс
как множество наборов, отличающихся от
на
бит, т.е.
. Таким образом все наборы могут быть распределены на
классов. Для
справедливо
. Вероятность случайно выбрать элемент из
равна
. В локальном поиске рассматривается дизъюнкция
, которой не удовлетворяет сгенерированный набор переменных, и при случайном перевыборе набора вероятность найти удовлетворяющий равна
. Таким образом вероятность перейти из класса
к классу
равна минимум
. Вероятность же попасть из класса
в
равна максимум
. Пусть
- вероятностью попасть из класса
за
шагов в класс
, т.е. найти решение
. В таком случае
, где
- количество возможных переходов в направлении
, а вероятность достичь
из класса
равна
. После подстановки формул друг в друга и приблизительного вычисления результата, получим вероятность не найти удовлетворяющий набор переменных во время локального поиска равную
, а после
таких поисков вероятность станет уже равна
.
Примечания