Алгоритм Шёнинга

Материал из testwiki
Перейти к навигации Перейти к поиску

Алгори́тм Шёнинга (англ. Schöning's Algorithm) — вероятностный алгоритм для решения задачи выполнимости булевых формул в k-конъюнктивной нормальной форме, предложенный Уве Шёнингом в 1999 году[1].

Описание для решения 3-SAT

  1. Дана булева формула в 3-конъюнктивной нормальной форме F(x1,x2,,xn).
  2. Повтори 203πn(43)n раз:
    1. Случайно установи набор переменных α=(α1,α2,,αn){0,1}n.
    2. Если булева формула F(α) истинна, выведи α и заверши работу.
    3. Повтори 3n раз:
      1. Выбери дизъюнкцию ci, которой не удовлетворяет α.
      2. Выбери переменную xj из ci.
      3. Установи α=(α1,α2,,αj,,αn).
      4. Если булева формула F(α) истинна, выведи α и заверши работу.
  3. Выведи "F невыполнима".

Временная сложность

Алгоритм Шёнинга имеет временную сложность O(mn3/2(4/3)n)=O(m1.334n), где n - количество переменных, а m - количество дизъюнкций, при условии, что проверка выполнимости булевой формулы производится за O(3m). Если булева формула F невыполнима, то алгоритм Шёнинга всегда возвращает верный результат.

Оценка ошибки

Если булева формула F выполнима, то вероятность ошибки всегда будет меньше 5105. Для доказательства обозначим за α* набор переменных, при котором F(α*) истинна, а также pl - вероятность, что алгоритм найдет α* во вложенном цикле (эта стадия называется также локальным поиском). Таким образом pl является нижним пределом вероятности нахождения удовлетворяющего набора переменных с помощью локального поиска. Далее мы покажем, что pl1203πn(34)n. Расстоянием между двумя наборами α и β будем называть количество отличных в них бит. Определим класс C(j) как множество наборов, отличающихся от α* на j бит, т.е. C(j)={β{0,1}ndist(α*,β)=j}. Таким образом все наборы могут быть распределены на n+1 классов. Для j{0,1,,n} справедливо |C(j)|=(nj). Вероятность случайно выбрать элемент из C(j) равна pj=(nj)2n. В локальном поиске рассматривается дизъюнкция ci, которой не удовлетворяет сгенерированный набор переменных, и при случайном перевыборе набора вероятность найти удовлетворяющий равна 1/3. Таким образом вероятность перейти из класса C(j) к классу C(j1) равна минимум 1/3. Вероятность же попасть из класса C(j) в C(j+1) равна максимум 2/3. Пусть qj,i - вероятностью попасть из класса C(j) за j+2i шагов в класс C(0), т.е. найти решение α*. В таком случае qi,j=(j+2ii)jj+2i(13)j+1(23)i, где (j+2ii)jj+2i - количество возможных переходов в направлении α*, а вероятность достичь α* из класса C(j) равна qj=i=0jqj,i. После подстановки формул друг в друга и приблизительного вычисления результата, получим вероятность не найти удовлетворяющий набор переменных во время локального поиска равную p~=1123πn(34)n, а после t таких поисков вероятность станет уже равна (1p~)203πn(43)ne105105.

Примечания

Шаблон:Примечания