Professional Documents
Culture Documents
SAT-Algorithmus
Uwe Schöning
Universität Ulm
Abteilung Theoretische Informatik
schoenin@informatik.uni-ulm.de
Das 3-SAT-Problem:
F = (x ∨ y ∨ z) ∧ (x ∨ u ∨ v) ∧ (y ∨ u) ∧ (z ∨ v)
∨ = oder
∧ = und
= nicht
n
nicht polynomial begrenzt: nn, 2n, n!, 22 .
Verbesserung von 2n bis auf 1.414n = 2n/2:
Rechenzeit 2n 2n/2
q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q - n
n0 2n0
2n Wahrheitstafel, backtracking
1.618n Monien, Speckenmeyer (1985)
1.505n Kullmann (1999)
1.481n Dantsin, Goerdt, Hirsch, Schöning (2000)
*
*
@
Z
Z QQ sH
~
Z j
H :
@R
@ -
@ :
Q
P erfüllende Belegung
F - R
@ s
Q P q
P
Z
Z 3@
*
ZZ
Z~
Z R
@
HH HH *Q Z
~
Q
H jH
H s
Q s
Q
j
H Hj
H
PROC test(a:Belegung,m:CARDINAL):BOOL;
{Liefert TRUE, genau dann wenn es eine
erfüllende Belegung a∗ mit d(a, a∗) ≤ m gibt.
Hierbei ist d(...) die Hamming-Distanz.}
IF F (a) = 1 THEN RETURN TRUE;
IF m = 0 THEN RETURN FALSE;
{Sei K = (x ∨ y ∨ z) eine Teilformel
in F mit K(a) = 0}
IF test(ax , m − 1) THEN RETURN TRUE;
IF test(ay , m − 1) THEN RETURN TRUE;
IF test(az , m − 1) THEN RETURN TRUE;
RETURN FALSE;
Verbesserung (probabilistischer
Algorithmus):
FOR i := 1 TO t(n) DO
Wähle eine zufällige Belegung a ∈ {0, 1}n;
IF test(a, β · n) THEN RETURN TRUE;
RETURN FALSE
'$
'$
'$ r
r
'$ '$
r &%
&% r
'$ r '$
&%
r '$
&% &% r
'$ '$
'$
r
&% &%
r '$ rr Laufzeit: t(n) · 3βn
&%
&% r&%
&%
&% Wie wählt man t(n) und β, so
{0, 1}n
dass die Laufzeit, aber auch die
Fehlerwahrscheinlichkeit, mini-
miert wird?
Wahrscheinlichkeit, dass erfüllende
Belegung a∗ bei einem Versuch gefunden
wird:
Pβn n
i=0 i 2h(β)n n
≈ = q
2n 2n
20 · (3β /q)n
Die optimale Wahl von β ergibt sich (durch
Ableiten von 3β /q nach β und auf Null setzen)
als β = 1/4.
u u u
u u u
u u
u
u u u
{0, 1}n
u
u u
u u u
? ?
Verbesserung auf 1.481n:
[Dantsin,Goerdt,Hirsch,Schöning’2000]:
H
HH
HH
HH
HH
HH
HH
HH
@ @ @
@ @ @
@ @ @
@ @ @
@ @ @
L L L L L L L L L
L L L L L L L L L
L L L L L L L L L
L L L L L L L L L
FOR i := 1 TO t(n) DO
Wähle eine zufällige Belegung a ∈ {0, 1}n;
FOR j := 1 TO 3n DO
IF F (a) = 1 THEN STOP;
Wähle eine Teilformel K mit K(a) = 0 aus;
{Sei K = (x ∨ y ∨ z)}
Wähle zufällig u ∈ {x, y, z} aus;
a := au ;
- {0, 1}n
6
?- -
w- w-
6
?
?
w
?
?-
? w
6
- ? ?
6
?- g
-
w
6
Modellvorstellung (Markov-Kette):
' $
Start
!! & %
! aa
! aa
!! @ aa
!! @ aa
! ! aa
! @ aa
! @
!! aa
a
@
@ A
A
@
@ A
A
@
@ A
'
# $ ' $ ' $ ' $ ' $
@ A
R
@ AU
1/3 1/3
1/3 1/3 1/3
0 1 2 ··· n-1 n
"!
- - - -
& % & % & % 2/3 2/3 2/3 & % & % 2/3
und
∗
P (a) · (1/2)d(a,a )
X
P ( Erfolg ) =
a
X
= E [(1/2) 1 +···+X n]
n
(1/2)Xi ]
Y
= E[
i
n
E [(1/2)Xi ]
Y
=
i
= E [(1/2)Xi ]n
= ((1/2) · 1 + (1/2) · (1/2))n = (3/4)n
⇒ Komplexität O((4/3)n)
Entscheidend ist E [(1/2)Hammingabstand].
→ Komplexität O(1.3302n).
→ Komplexität O(1.3298n).