sat average

33
Полиномиальный в среднем алгоритм для «SAT» Н.Н. Кузюрин С.А. Фомин 10 октября 2008 г. Алгоритм динамического программирования для задачи «SAT» («Выполнимость»). Полиномиальность алгоритма «в среднем». 1 / 33

Upload: stas-fomin

Post on 27-Jun-2015

318 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Sat Average

Полиномиальный в среднем алгоритм для «SAT»

Н.Н. Кузюрин С.А. Фомин

10 октября 2008 г.

Алгоритм динамическогопрограммирования для задачи «SAT»(«Выполнимость»). Полиномиальностьалгоритма «в среднем».

1 / 33

Page 2: Sat Average

Полиномиальность в среднемОпределение

«Полиномиальный в среднем (точно)»Алгоритм A называется полиномиальным в среднем, если среднеевремя его работы ограничено полиномом от длины входа, т.е.существует константа c > 0, такая, что En TA = O(nc).

УпражнениеПриведите пример функции TA (времени работы некоторогоалгоритма A) и распределения исходных данных Pn(I ), для которыхTA является полиномиальной в среднем (En TA = O(nc)), а T 2

A — нет.

Определение

«Полиномиальный в среднем»Алгоритм называется полиномиальным в среднем, если существуетконстанта ε > 0, такая, что En T ε = O(n), где T — время работыалгоритма. 2 / 33

Page 3: Sat Average

Полиномиальность в среднемОпределение

«Полиномиальный в среднем (точно)»Алгоритм A называется полиномиальным в среднем, если среднеевремя его работы ограничено полиномом от длины входа, т.е.существует константа c > 0, такая, что En TA = O(nc).

УпражнениеПриведите пример функции TA (времени работы некоторогоалгоритма A) и распределения исходных данных Pn(I ), для которыхTA является полиномиальной в среднем (En TA = O(nc)), а T 2

A — нет.

Определение

«Полиномиальный в среднем»Алгоритм называется полиномиальным в среднем, если существуетконстанта ε > 0, такая, что En T ε = O(n), где T — время работыалгоритма. 3 / 33

Page 4: Sat Average

Полиномиальность в среднемОпределение

«Полиномиальный в среднем (точно)»Алгоритм A называется полиномиальным в среднем, если среднеевремя его работы ограничено полиномом от длины входа, т.е.существует константа c > 0, такая, что En TA = O(nc).

УпражнениеПриведите пример функции TA (времени работы некоторогоалгоритма A) и распределения исходных данных Pn(I ), для которыхTA является полиномиальной в среднем (En TA = O(nc)), а T 2

A — нет.

Определение

«Полиномиальный в среднем»Алгоритм называется полиномиальным в среднем, если существуетконстанта ε > 0, такая, что En T ε = O(n), где T — время работыалгоритма. 4 / 33

Page 5: Sat Average

Задача «SAT» («Выполнимость»)Задача

«Выполнимость/SAT»a. Дано булевское выражение, являющеесяконьюнктивной нормальной формой (КНФ):

CNF =m∧

i=1

Ci , (1)

где Ci — элементарные дизъюнкции вида

xσ1j1∨ . . . ∨ xσk

jk, (2)

1 ≤ k ≤ n, σj ∈ {0, 1}, x1 = x и x0 = (¬x).Существует ли (булевский) набор переменных xj , обращающий этуформу в 1 (т.е. в «Истину»)?

aВ англоязычной литературе — Satisfiability или просто SAT.

5 / 33

Page 6: Sat Average

Как решать?

1 Перебор всех входных наборов x = {x1, . . . , xn}, пока CNF (x) = 0.⇒ В худшем случае (CNF невыполнима) надо перебрать 2n

наборов x .2 Подсчитать количество невыполнимых наборов — |X0|,

X0 = {x : CNF (x) = 0}. Если |X0| = 2n ⇔ CNF — невыполнима.

Как подсчитать |X0|, более эффективно, нежели перебором x?

6 / 33

Page 7: Sat Average

Как решать?

1 Перебор всех входных наборов x = {x1, . . . , xn}, пока CNF (x) = 0.⇒ В худшем случае (CNF невыполнима) надо перебрать 2n

наборов x .2 Подсчитать количество невыполнимых наборов — |X0|,

X0 = {x : CNF (x) = 0}. Если |X0| = 2n ⇔ CNF — невыполнима.

Как подсчитать |X0|, более эффективно, нежели перебором x?

7 / 33

Page 8: Sat Average

Как решать?

1 Перебор всех входных наборов x = {x1, . . . , xn}, пока CNF (x) = 0.⇒ В худшем случае (CNF невыполнима) надо перебрать 2n

наборов x .2 Подсчитать количество невыполнимых наборов — |X0|,

X0 = {x : CNF (x) = 0}. Если |X0| = 2n ⇔ CNF — невыполнима.

Как подсчитать |X0|, более эффективно, нежели перебором x?

8 / 33

Page 9: Sat Average

Формула включений-исключений

CNF (x) = 0 ⇒ одна или несколько скобок-дизъюнкций Cj(x) = 0.Для подсчета мощности объединения пересекающихся множествприменяется комбинаторная формула включений-исключений

∣∣∣∣∣n⋃

i=1

Ai

∣∣∣∣∣ =n∑

i=1

|Ai | −∑

i ,j : i<j

|Ai ∩ Aj |+

+∑

i ,j ,k : i<j<k

|Ai ∩ Aj ∩ Ak | − · · · · · · (−1)n−1 |A1 ∩ · · · ∩ An| .

В нашем случае Ai обозначает множество наборов, для которых i-яскобка Ci равна нулю, поэтому

|X0| = | ∪mi=1 Ai |.

9 / 33

Page 10: Sat Average

Скобки, литералы, покрытие

Определение

Литерал — каждое вхождение переменной xi (или ее отрицания)в скобку. Например, для (x1 ∨ x2) ∧ (x1 ∨ x3) литералами будутx1, x2, x1, x3.

Рассмотрим некоторое подмножество из k скобок S = {Cj1 , . . . ,Cjk}.LitS — литералы S , все литералы lit = {xi , xi}, входящие в S .

CovS — покрытие S , все переменные xi , входящие в S .

10 / 33

Page 11: Sat Average

Зависимые и независимые множества скобок.CNF (x) = 0 ⇒ одна или несколько скобок-дизъюнкций Cj(x) = 0.Рассмотрим некоторое подмножество из k скобок S = {Cj1 , . . . ,Cjk}.Когда все скобки в S будут равны нулю?⇒ ZS(x) = 1, где

ZS(x) =k∧

i=1

Cji =k∧

i=1

∨lit∈Cji

lit =k∧

i=1

∧lit∈Cji

lit =∧

lit∈LitS

lit

Т.е. ZS(x) = 1 ⇔ ∀lit ∈ S lit(x) = 0.Множество S может быть:

зависимое — ∃i : литералы xi ∈ S и xi ∈ S ⇒ ZS ≡ 0.|x : ZS(x) = 1| = 0.

независимое — @i : xi ∈ S и xi ∈ S . Следовательно, ZS(x) = 1 ⇒∀xi ∈ CovS значение определено.|x : ZS(x) = 1| = 2n−|CovS | = 2n−|LitS |.

11 / 33

Page 12: Sat Average

Зависимые и независимые множества скобок.CNF (x) = 0 ⇒ одна или несколько скобок-дизъюнкций Cj(x) = 0.Рассмотрим некоторое подмножество из k скобок S = {Cj1 , . . . ,Cjk}.Когда все скобки в S будут равны нулю?⇒ ZS(x) = 1, где

ZS(x) =k∧

i=1

Cji =k∧

i=1

∨lit∈Cji

lit =k∧

i=1

∧lit∈Cji

lit =∧

lit∈LitS

lit

Т.е. ZS(x) = 1 ⇔ ∀lit ∈ S lit(x) = 0.Множество S может быть:

зависимое — ∃i : литералы xi ∈ S и xi ∈ S ⇒ ZS ≡ 0.|x : ZS(x) = 1| = 0.

независимое — @i : xi ∈ S и xi ∈ S . Следовательно, ZS(x) = 1 ⇒∀xi ∈ CovS значение определено.|x : ZS(x) = 1| = 2n−|CovS | = 2n−|LitS |.

12 / 33

Page 13: Sat Average

Зависимые и независимые множества скобок.CNF (x) = 0 ⇒ одна или несколько скобок-дизъюнкций Cj(x) = 0.Рассмотрим некоторое подмножество из k скобок S = {Cj1 , . . . ,Cjk}.Когда все скобки в S будут равны нулю?⇒ ZS(x) = 1, где

ZS(x) =k∧

i=1

Cji =k∧

i=1

∨lit∈Cji

lit =k∧

i=1

∧lit∈Cji

lit =∧

lit∈LitS

lit

Т.е. ZS(x) = 1 ⇔ ∀lit ∈ S lit(x) = 0.Множество S может быть:

зависимое — ∃i : литералы xi ∈ S и xi ∈ S ⇒ ZS ≡ 0.|x : ZS(x) = 1| = 0.

независимое — @i : xi ∈ S и xi ∈ S . Следовательно, ZS(x) = 1 ⇒∀xi ∈ CovS значение определено.|x : ZS(x) = 1| = 2n−|CovS | = 2n−|LitS |.

13 / 33

Page 14: Sat Average

Зависимые и независимые множества скобок.CNF (x) = 0 ⇒ одна или несколько скобок-дизъюнкций Cj(x) = 0.Рассмотрим некоторое подмножество из k скобок S = {Cj1 , . . . ,Cjk}.Когда все скобки в S будут равны нулю?⇒ ZS(x) = 1, где

ZS(x) =k∧

i=1

Cji =k∧

i=1

∨lit∈Cji

lit =k∧

i=1

∧lit∈Cji

lit =∧

lit∈LitS

lit

Т.е. ZS(x) = 1 ⇔ ∀lit ∈ S lit(x) = 0.Множество S может быть:

зависимое — ∃i : литералы xi ∈ S и xi ∈ S ⇒ ZS ≡ 0.|x : ZS(x) = 1| = 0.

независимое — @i : xi ∈ S и xi ∈ S . Следовательно, ZS(x) = 1 ⇒∀xi ∈ CovS значение определено.|x : ZS(x) = 1| = 2n−|CovS | = 2n−|LitS |.

14 / 33

Page 15: Sat Average

Зависимые и независимые множества скобок.CNF (x) = 0 ⇒ одна или несколько скобок-дизъюнкций Cj(x) = 0.Рассмотрим некоторое подмножество из k скобок S = {Cj1 , . . . ,Cjk}.Когда все скобки в S будут равны нулю?⇒ ZS(x) = 1, где

ZS(x) =k∧

i=1

Cji =k∧

i=1

∨lit∈Cji

lit =k∧

i=1

∧lit∈Cji

lit =∧

lit∈LitS

lit

Т.е. ZS(x) = 1 ⇔ ∀lit ∈ S lit(x) = 0.Множество S может быть:

зависимое — ∃i : литералы xi ∈ S и xi ∈ S ⇒ ZS ≡ 0.|x : ZS(x) = 1| = 0.

независимое — @i : xi ∈ S и xi ∈ S . Следовательно, ZS(x) = 1 ⇒∀xi ∈ CovS значение определено.|x : ZS(x) = 1| = 2n−|CovS | = 2n−|LitS |.

15 / 33

Page 16: Sat Average

Подсчет «нулевых» наборов

CNF (x) = 0 ⇒ ∃ независимое S , ⇒ построим все независимые S ,и для них посчитаем число «обнуляющих» наборов 2n−|LitS |.Как суммировать?

ЛеммаЛюбое подмножество независимого множества — независимо.

16 / 33

Page 17: Sat Average

Подсчет «нулевых» наборов

CNF (x) = 0 ⇒ ∃ независимое S , ⇒ построим все независимые S ,и для них посчитаем число «обнуляющих» наборов 2n−|LitS |.Как суммировать?

ЛеммаЛюбое подмножество независимого множества — независимо.

17 / 33

Page 18: Sat Average

Подсчет «нулевых» наборов

CNF (x) = 0 ⇒ ∃ независимое S , ⇒ построим все независимые S ,и для них посчитаем число «обнуляющих» наборов 2n−|LitS |.Как суммировать?

ЛеммаЛюбое подмножество независимого множества — независимо.

18 / 33

Page 19: Sat Average

Далее удобно разбить все независимые множества на «k-слои» Nk :независимые множества с k скобками, и организовать суммированиевключений-исключений по этим слоям:

|X0| =m∑

k=1

(−1)k−1 ·∑S∈Nk

2n−|LitS |.

19 / 33

Page 20: Sat Average

Формула «включений/исключений»

x : Z{C1} = 1

x : Z{C2} = 1

x : Z{C3} = 1

C1,C2

C1,C2,C3

C2,C3

C1,C3

Формула «включений/исключений»:

|X0| = Σmk=1ΣS∈Nk

(−1)k · 2n−|LitS |.

20 / 33

Page 21: Sat Average

Построение независимых множеств

Nk+1 строится из Nk

for all Cj ∈ {C1, . . . ,Cm} dofor all S ∈ Nk do

LitS ′ ← LitSfor all lit ∈ Cj do

if lit /∈ LitS ′ thenLitS ′ ← LitS ′ ∪ lit

elseотбрасываем зависимое Cj + S .

end ifend for

end forend for

21 / 33

Page 22: Sat Average

def SatDynP (CNF) :

size← 0 # счетчик выполняющих КНФ наборовn← CNF.numberOfVariables () # число переменных в КНФT ← {CNF.getEmptySetOfBraces () : CNF.getEmptySetOfLiterals ()}for (k, dummy) ∈ enumerate (CNF) : # цикл по слоям

S ← {} # новый слой независимых множествfor j ,C ∈ enumerate (CNF) : # цикл по скобкам

for t ∈ T : # цикл по независимым множествамif j 6∈ t : # если скобки в множестве нет

s ← t + j # добавляем её к множествуif s 6∈ S : # в слое S нет такого множества?

lit← copy (T [t]) # наследуем литералы из t

for x ∈ C : # для каждого литерала в C

ok← −x 6∈ lit # x совместен с другими?if ¬ok : breaklit.add (x)

if ok ∧ len (lit) > len (T [t]) :

S [s]← lit # да, s —независимоеsize← size + 2 ** (n − len (lit)) ∗ (−1) ** k

T ← S

return size 22 / 33

Page 23: Sat Average

CNF = (x2 ∨ x3 ∨ x1) ∧ (x3 ∨ x2) ∧ (x1 ∨ x3) ∧ (x1 ∨ x2 ∨ x4)

k size T

0 0 {}: {}1 12 {C0}: {x2, x3, x1}, {C3}: {x1, x2, x4}, {C1}: {x3, x2}, {C2}: {x1, x3}2 11 {C2, C3}: {x1, x2, x4, x3}3 11

end 1111 < 24 → КНФ выполнима.

CNF = (x3 ∨ x2) ∧ (x1 ∨ x3) ∧ (x3 ∨ x1) ∧ (x2 ∨ x3)

k size T

0 0 {}: {}1 8 {C0}: {x3, x2}, {C3}: {x2, x3}, {C1}: {x1, x3}, {C2}: {x3, x1}2 83 8

end 88 = 23 → КНФ невыполнима.

23 / 33

Page 24: Sat Average

ЛеммаСложность алгоритма в наихудшем случае — O(m2n ·maxk |Nk |).

УпражнениеКакие входные данные для этого алгоритма заставят его работатьэкспоненциально долго?

УпражнениеНа каких входных данных время работы этого алгоритма будет O(m)?

ТеоремаПусть для каждой скобки вероятность появления каждой из nпеременных (или ее отрицания) равна p, причем

np2 ≥ ln m.

Тогда алгоритм является полиномиальным в среднем.

24 / 33

Page 25: Sat Average

ЛеммаСложность алгоритма в наихудшем случае — O(m2n ·maxk |Nk |).

УпражнениеКакие входные данные для этого алгоритма заставят его работатьэкспоненциально долго?

УпражнениеНа каких входных данных время работы этого алгоритма будет O(m)?

ТеоремаПусть для каждой скобки вероятность появления каждой из nпеременных (или ее отрицания) равна p, причем

np2 ≥ ln m.

Тогда алгоритм является полиномиальным в среднем.

25 / 33

Page 26: Sat Average

ЛеммаСложность алгоритма в наихудшем случае — O(m2n ·maxk |Nk |).

УпражнениеКакие входные данные для этого алгоритма заставят его работатьэкспоненциально долго?

УпражнениеНа каких входных данных время работы этого алгоритма будет O(m)?

ТеоремаПусть для каждой скобки вероятность появления каждой из nпеременных (или ее отрицания) равна p, причем

np2 ≥ ln m.

Тогда алгоритм является полиномиальным в среднем.

26 / 33

Page 27: Sat Average

ЛеммаСложность алгоритма в наихудшем случае — O(m2n ·maxk |Nk |).

УпражнениеКакие входные данные для этого алгоритма заставят его работатьэкспоненциально долго?

УпражнениеНа каких входных данных время работы этого алгоритма будет O(m)?

ТеоремаПусть для каждой скобки вероятность появления каждой из nпеременных (или ее отрицания) равна p, причем

np2 ≥ ln m.

Тогда алгоритм является полиномиальным в среднем.

27 / 33

Page 28: Sat Average

ДоказательствоSk — некоторое множество скобок, |Sk | = k ;

pi (Sk) — P[в Sk нет одновременно xi и ¬xi ];P(Sk) — P[Sk — независимое].

pi (Sk) = (1− p)k + (1− p)k − (1− p)2k = (1− p)k(2− (1− p)k) ≤≤ (1− p)k(1 + kp) ≤ (1− p)k(1 + p)k = (1− p2)k .

P(Sk) =n∏

i=1

pi (Sk) ≤ (1− p2)kn.

E |Nk | ≤m∑

k=1

(m

k

)P(Sk) ≤

m∑k=1

(m

k

)(1− p2)kn ≤

≤m∑

k=1

mk exp{−np2k} ≤m∑

k=1

exp{k(ln m − np2)} ≤m∑

k=1

1 ≤ m.

28 / 33

Page 29: Sat Average

ДоказательствоSk — некоторое множество скобок, |Sk | = k ;

pi (Sk) — P[в Sk нет одновременно xi и ¬xi ];P(Sk) — P[Sk — независимое].

pi (Sk) = (1− p)k + (1− p)k − (1− p)2k = (1− p)k(2− (1− p)k) ≤≤ (1− p)k(1 + kp) ≤ (1− p)k(1 + p)k = (1− p2)k .

P(Sk) =n∏

i=1

pi (Sk) ≤ (1− p2)kn.

E |Nk | ≤m∑

k=1

(m

k

)P(Sk) ≤

m∑k=1

(m

k

)(1− p2)kn ≤

≤m∑

k=1

mk exp{−np2k} ≤m∑

k=1

exp{k(ln m − np2)} ≤m∑

k=1

1 ≤ m.

29 / 33

Page 30: Sat Average

ДоказательствоSk — некоторое множество скобок, |Sk | = k ;

pi (Sk) — P[в Sk нет одновременно xi и ¬xi ];P(Sk) — P[Sk — независимое].

pi (Sk) = (1− p)k + (1− p)k − (1− p)2k = (1− p)k(2− (1− p)k) ≤≤ (1− p)k(1 + kp) ≤ (1− p)k(1 + p)k = (1− p2)k .

P(Sk) =n∏

i=1

pi (Sk) ≤ (1− p2)kn.

E |Nk | ≤m∑

k=1

(m

k

)P(Sk) ≤

m∑k=1

(m

k

)(1− p2)kn ≤

≤m∑

k=1

mk exp{−np2k} ≤m∑

k=1

exp{k(ln m − np2)} ≤m∑

k=1

1 ≤ m.

30 / 33

Page 31: Sat Average

ДоказательствоSk — некоторое множество скобок, |Sk | = k ;

pi (Sk) — P[в Sk нет одновременно xi и ¬xi ];P(Sk) — P[Sk — независимое].

pi (Sk) = (1− p)k + (1− p)k − (1− p)2k = (1− p)k(2− (1− p)k) ≤≤ (1− p)k(1 + kp) ≤ (1− p)k(1 + p)k = (1− p2)k .

P(Sk) =n∏

i=1

pi (Sk) ≤ (1− p2)kn.

E |Nk | ≤m∑

k=1

(m

k

)P(Sk) ≤

m∑k=1

(m

k

)(1− p2)kn ≤

≤m∑

k=1

mk exp{−np2k} ≤m∑

k=1

exp{k(ln m − np2)} ≤m∑

k=1

1 ≤ m.

31 / 33

Page 32: Sat Average

�Карта памяти� лекции

32 / 33

Page 33: Sat Average

Интернет поддержка курса

http://discopal.ispras.ru/

Вопросы?

33 / 33