Szybkie mno»enie wielomianów i macierzy
ukasz Kowalik
Instytut Informatyki, Uniwersytet Warszawski
Szybka Transformata Fouriera
Wielomiany
Wielomian reprezentowany jako ci¡g wspóªczynników Niech R b¦dzie pier±cieniem (np. R = C, R, Z, . . .).
Wielomian stopnia n − 1 to funkcja A : C → C postaci
A(x) =
n−1
X
i=0
aixi, gdzie ai ∈R.
Wielomian A reprezentujemy jako ci¡g (a0, . . . ,an−1). Dodawanie
Dane dwa wielomiany A = (a0, . . . ,an−1)i B = (b0, . . . ,bn−1). Obliczy¢ wielomian C, C(x) = A(x) + B(x).
Rozwi¡zanie: C = (a0+b0, . . . ,an−1+bn−1).
Czas: O(n) operacji arytmetycznych (na elementach R).
Mno»enie wielomianów w O(n
2)
Problem
Dane dwa wielomiany A = (a0, . . . ,an−1)i B = (b0, . . . ,bn−1). Obliczy¢ wielomian C, C(x) = A(x) · B(x).
Rozwi¡zanie
Rozwi¡zanie: C = (c0, . . . ,c2n−2), gdzie
ck =
k
X
i=0
ai·bk−i.
Czas: O(n2) operacji arytmetycznych (na elementach R).
Mno»enie wielomianów w O(n)
A gdyby tak...
Wyobra¹my sobie nowy lepszy ±wiat, w którym wielomiany mno»y si¦
równo ªatwo jak dodaje. (Co to za ±wiat?)
Twierdzenie (O Interpolacji)
Dla dowolnego zbioru {(x0,y0), . . . , (xn−1,yn−1)}takiego, »e xi s¡ parami ró»ne, istnieje dokªadnie jeden wielomian P stopnia mniejszego ni» n taki,
»e P(xi) =yi dla ka»dego i = 0, . . . , n − 1. Reprezentacja przez warto±ci w 2n punktach
n par (xi,yi) jednoznacznie wyznacza wielomian stopnia < n. 2n par tym bardziej.
Niech A i B b¦d¡ stopnia < n, dane jako A = {(x0,y0), . . . , (x2n−1,y2n−1)}oraz B = {(x0,y00), . . . , (x2n−1,y2n−10 )}.
Wtedy C = A · B jest reprezentowany przez {(x0,y0·y00), . . . , (x2n−1,y2n−1·y2n−10 )} Obliczyli±my C w czasie O(n).
Mno»enie wielomianów w O(n)
Twierdzenie (O Interpolacji)
Dla dowolnego zbioru {(x0,y0), . . . , (xn−1,yn−1)}takiego, »e xi s¡ parami ró»ne, istnieje dokªadnie jeden wielomian P stopnia mniejszego ni» n taki,
»e P(xi) =yi dla ka»dego i = 0, . . . , n − 1.
Reprezentacja przez warto±ci w 2n punktach
n par (xi,yi) jednoznacznie wyznacza wielomian stopnia < n.
2n par tym bardziej.
Niech A i B b¦d¡ stopnia < n, dane jako A = {(x0,y0), . . . , (x2n−1,y2n−1)}oraz B = {(x0,y00), . . . , (x2n−1,y2n−10 )}.
Wtedy C = A · B jest reprezentowany przez {(x0,y0·y00), . . . , (x2n−1,y2n−1·y2n−10 )}
Obliczyli±my C w czasie O(n).
(Prawdziwe) mno»enie wielomianów w O(n log n)
(Prawdziwe) mno»enie wielomianów w O(n log n)
Liczby zepolone, pierwiastki z 1: przypomnienie
Liczby zespolone przedstawiamy jako:
z = x + yi = r(cos ϕ + i sin ϕ) z = r · eϕi
ωn=e2πn jest pierwiastkiem stopnia n z 1.
wszystkie pierwiastki stopnia n z 1: ω0n, ωn1, . . . ωnn−1.
DFT i FFT
Dyskretna Transformata Fouriera, DFT
Dany ci¡g (a0, . . . ,an−1)reprezentuj¡cy wielomian A(x) = Pn−1i=0 aixi. Obliczy¢ warto±ci A(x0), . . . ,A(xn−1), gdzie xj = ωjn dla j = 0, . . . , n.
Uwaga
W naszym zastosowaniu do mno»enia wielomianów stopnia < d, n = 2d oraz ad =ad+1= . . . =a2d−1=0.
Poka»emy algorytm, który oblicza DFT u»ywaj¡c O(n log n) operacji arytmetycznych (na liczbach zespolonych).
Ten algorytm to szybka transformata Fouriera (FFT), odkryty przez Cooleya i Tuckeya w 1965 (wªa±ciwie wywa»yli oni drzwi otwarte w 1805 przez Gaussa).
FFT: dziel i zwyci¦»aj
Zaªó»my, »e n = 2k (wpp. dodajemy an=0).
Okre±lmy 2 wielomiany stopnia < n/2:
A[0](x) = a0+a2x + a4x2+ . . . +an−2xn/2−1, A[1](x) = a1+a3x + a5x2+ . . . +an−1xn/2−1. Wtedy:
A(x) = A[0](x2) +xA[1](x2),
(tzn. wystarczy obliczy¢ n warto±ci 2 wielomianów stopnia <n/2.) fartownie, (ωn)2 = (e2πni)2=en/22πi = ωn/2.
st¡d, dla k = 0, . . . , n/2, mamy:
(ωkn)2 = ωkn/2 oraz (ωnk+n/2)2 = ωkn/2· ωn/2n/2 = ωkn/2.
czyli {(ω0n)2, (ω1n)2, . . . , (ωnn−1)2} = {ω0n/2, ωn/21 , . . . , ωn/2n/2−1}
Rekurencyjnie obliczamyn/2 warto±ci 2 wielomianów stopnia <n/2
FFT: dziel i zwyci¦»aj
Wniosek
Algorytm FFT dziaªa w czasie O(n log n).
Dowód
Bo T (n) = 2T (n/2) + O(n).
Mno»enie wielomianów w O(n log n): Czego jeszcze brakuje?
Odwrotna Dyskretna Transformata Fouriera (IDFT)
Odwrotna Dyskretna Transformata Fouriera, IDFT Dany ci¡g (y0, . . . ,yn−1) reprezentuj¡cy warto±ci wielomianu A(x) = Pn−1i=0 aixi odpowiednio w punktach 1, ω1n, . . . , ωnn−1. Wykona¢ interpolacj¦, tzn. obliczy¢ warto±ci a0, . . . ,an−1. Chcemy znale¹¢ a0, . . . ,an−1 takie, »e:
y0 = a0 + a1 + a2 + . . . + an−1, y1 = a0 + a1ωn + a2ω2n + . . . + an−1ωnn−1, y2 = a0 + a1ω2n + a2ω4n + . . . + an−1ωn2(n−1),
... ...
yn−1 = a0 +a1ωnn−1 +a2ωn2(n−1) + . . . + an−1ω(nn−1)(n−1).
Odwrotna Dyskretna Transformata Fouriera (IDFT)
Odwrotna Dyskretna Transformata Fouriera, IDFT Dany ci¡g (y0, . . . ,yn−1) reprezentuj¡cy warto±ci wielomianu A(x) = Pn−1i=0 aixi odpowiednio w punktach 1, ω1n, . . . , ωnn−1. Wykona¢ interpolacj¦, tzn. obliczy¢ warto±ci a0, . . . ,an−1. Chcemy znale¹¢ a0, . . . ,an−1 takie, »e:
y0 y1 y2
yn−1...
=
1 1 1 1 · · · 1
1 ωn ωn2 ω3n · · · ωnn−1 1 ω2n ωn4 ω6n · · · ω2(n−1)n
... ... ... ... ... ...
1 ωn−1n ωn2(n−1) ωn3(n−1) · · · ω(nn−1)(n−1)
·
a0 a1 a2
an−1...
czyli y = Vn·a, gdzie Vn jest macierz¡ Vandermonde'a
det Vn= Y
0≤i<j≤n−1
(ωjn− ωni) 6=0. St¡d, a = Vn−1y.
Odwrotna Dyskretna Transformata Fouriera (IDFT), cd
Chcemy obliczy¢ a = Vn−1y,
(Vn jest macierz¡ Vandermonde'a dla warto±ci 1, ωn, ωn2, . . . , ωn−1n .) Fakt (dowód: obliczenie Vn−1Vn, VnVn−1, nuda.)
(Vn−1)j,k = 1n ωn−jk Wniosek
aj =
n−1
X
k=0
1n ω−njk·yk = 1n
n−1
X
k=0
yk(ω−nj)k = n1Y (ωnn−j),
gdzie Y jest wielomianem o wspóªczynnikach (y0, . . . ,yn−1). Wniosek z wniosku
a = n1(DFT (y0, . . . ,yn−1))R, gdzie operacja vR odwraca wektor v, oprócz pierwszej skªadowej.
Czyli IDFT liczymy za pomoc¡ FFT w czasie O(n log n).
Uwagi
W algorytmie zakªadali±my dokªadn¡ arytmetyk¦ liczb rzeczywistych (zespolonych). W praktyce korzystamy z liczb o ograniczonej precyzji.
Nie prowadzi to do du»ych bªedów (algorytm FFT ma bardzo dobre wªasno±ci numeryczne)
Je±li wspóªczynniki na wej±ciu s¡ caªkowite (wi¦c na wyj±ciu chcemy równie» mie¢ caªkowite) to mo»emy zaokr¡gla¢/obcina¢, ale nale»y przeprowadzi¢ analiz¦ jak dokªadnej arytmetyki liczb rzeczywistych potrzebujemy.
Algorytm FFT bardzo ªatwo si¦ zrównolegla: mo»na go
zaimplementowa¢ jako obwód arytmetyczny o gª¦boko±ci log2n.
Zastosowanie 1: Mno»enie
Powiedzmy, »e chcemy pomno»y¢ przez siebie 2 liczby n-bitowe a = Pn−1i=0 ai2i i b = Pn−1i=0 bi2i.
1 a i b reprezentujemy jako wielomiany A(x), B(x):
mo»na po prostu jako A(x) = Pn−1i=0 aixi, gdzie ai ∈ {0, 1}
ale zwykle bardziej si¦ opªaca pokroi¢ liczby na grubsze bloki, `-bitowe.
Wtedy A(x) = Pdi=0n/`e−1aixi, gdzie ai ∈ {0, . . . , 2`−1}.
2 za pomoc¡ FFT obliczamy C(x) = A(x)B(x) (wówczas cj ∈ {0, . . . , n}).
3 wykonujemy przeniesienie za pomoc¡ O(n log n) operacji na bitach Przeniesienie pi zawsze ma co najwy»ej warto±¢ n:
Na pocz¡tku bc0/2c ≤ n, czyli OK Je±li pi ≤n to pi+1= b(pi+ci)/2c ≤ n.
St¡d, obliczenie i-tej cyfry wyniku wymaga O(log n) operacji bitowych.
Zastosowanie 1: Mno»enie
Powiedzmy, »e chcemy pomno»y¢ przez siebie 2 liczby n-bitowe a = Pn−1i=0 ai2i i b = Pn−1i=0 bi2i.
1 a i b reprezentujemy jako wielomiany A(x), B(x):
mo»na po prostu jako A(x) = Pn−1i=0 aixi, gdzie ai ∈ {0, 1}
ale zwykle bardziej si¦ opªaca pokroi¢ liczby na grubsze bloki, `-bitowe.
Wtedy A(x) = Pdi=0n/`e−1aixi, gdzie ai ∈ {0, . . . , 2`−1}.
2 za pomoc¡ FFT obliczamy C(x) = A(x)B(x) (wówczas cj ∈ {0, . . . , n}).
3 wykonujemy przeniesienie za pomoc¡ O(n log n) operacji na bitach Przeniesienie pi zawsze ma co najwy»ej warto±¢ n:
Na pocz¡tku bc0/2c ≤ n, czyli OK Je±li pi ≤n to pi+1= b(pi+ci)/2c ≤ n.
St¡d, obliczenie i-tej cyfry wyniku wymaga O(log n) operacji bitowych.
Zastosowanie 1: Mno»enie
Powiedzmy, »e chcemy pomno»y¢ przez siebie 2 liczby n-bitowe a = Pn−1i=0 ai2i i b = Pn−1i=0 bi2i.
1 a i b reprezentujemy jako wielomiany A(x), B(x):
mo»na po prostu jako A(x) = Pn−1i=0 aixi, gdzie ai ∈ {0, 1}
ale zwykle bardziej si¦ opªaca pokroi¢ liczby na grubsze bloki, `-bitowe.
Wtedy A(x) = Pdi=0n/`e−1aixi, gdzie ai ∈ {0, . . . , 2`−1}.
2 za pomoc¡ FFT obliczamy C(x) = A(x)B(x) (wówczas cj ∈ {0, . . . , n}).
3 wykonujemy przeniesienie za pomoc¡ O(n log n) operacji na bitach Przeniesienie pi zawsze ma co najwy»ej warto±¢ n:
Na pocz¡tku bc0/2c ≤ n, czyli OK Je±li pi ≤n to pi+1= b(pi+ci)/2c ≤ n.
St¡d, obliczenie i-tej cyfry wyniku wymaga O(log n) operacji bitowych.
Zastosowanie 1: Mno»enie, cd
Analiza
Powiedzmy, »e n bitów podzielili±my na ≈ 2k bloków dªugo±ci `.
Wówczas algorytm wykona si¦ w czasie O(n + k · Mn/`), gdzie M to czas mno»enia dwóch liczb zespolonych.
Powiedzmy, »e liczby zespolone reprezentujemy na m bitach.
Jak du»e powinno by¢ m »eby wynik mno»enia byª poprawny?
m ≥ 4k + 2` (patrz Knuth, t. II) Wnioski sytuacja praktyczna
W praktyce dla rozs¡dnych danych (np. n = 109) wystarczy liczby zespolone reprezentowa¢ jako par¦ liczb typu double.
Wówczas mno»enie dwóch liczb m-bitowych dziaªa w czasie O(1).
Bior¡c ` = k dostajemy algorytm w czasie O(n).
Zastosowanie 1: Mno»enie, cd
Analiza
Powiedzmy, »e n bitów podzielili±my na ≈ 2k bloków dªugo±ci `.
Wówczas algorytm wykona si¦ w czasie O(n + k · Mn/`), gdzie M to czas mno»enia dwóch liczb zespolonych.
Powiedzmy, »e liczby zespolone reprezentujemy na m bitach.
Jak du»e powinno by¢ m »eby wynik mno»enia byª poprawny?
m ≥ 4k + 2` (patrz Knuth, t. II) Teoria
(Schönhage-Strassen 1971) W powy»szej analizie we¹my ` = k.
Mamy rekurencj¦ T (n) = O(nT (log n)), st¡d T (n) = O(n log n log log n log log log n · · · )
(Schönhage-Strassen 1971) Zamiast ciaªa C bierzemy pier±cie« Z2e+1
dla pewnego e. Prowadzi to do czasu O(n log n log log n).
log∗n
Zastosowanie 2: Dodawanie zbiorów
Problem
Dane dwa zbiory A, B ⊂ {0, . . . , n}, Znale¹¢ C = {a + b : a ∈ A, b ∈ B}.
Rozwi¡zanie w czasie O(n log n)
We¹my A(x) = Pa∈Axa, B(x) = Pb∈Bxb. Obliczamy C(x) = A(x)B(x).
Je±li C(x) = P2nj=0cjxj to C = {j : cj 6=0}.
Szybkie mno»enie macierzy
Mno»enie macierzy (kwadratowych)
Problem
Dane macierze n × n: A i B.
Znale¹¢ macierz C = A · B.
Algorytm naiwny (wg zwykªego wzoru) cij =Pn
k=1aikbkj.
Czas: O(n3) operacji arytmetycznych.
Mno»enie macierzy: Dziel i zwyci¦»aj (1)
Bez straty ogólno±ci n = 2k.
Podzielmy A, B, C na podmacierze o wymiarach (n/2) × (n/2):
A =
A1,1 A1,2 A2,1 A2,2
, B =
B1,1 B1,2 B2,1 B2,2
Wówczas
C =
A1,1B1,1+A1,2B2,1 A1,1B1,2+A1,2B2,2 A2,1B1,1+A2,2B2,1 A2,1B1,2+A2,2B2,2
Mamy rekurencj¦ T (n) = 8T (n/2) + O(n2) czyli T (n) = O(n3). (Dominuj¡cy jest ostatni poziom, gdzie jest 8log2n=n3 w¦zªów.)
Mno»enie macierzy: Dziel i zwyci¦»aj (2)
A =
A1,1 A1,2 A2,1 A2,2
, B =
B1,1 B1,2 B2,1 B2,2
Drugie podej±cie (Strassen 1969):
M1 := (A1,1+A2,2)(B1,1+B2,2) M2 := (A2,1+A2,2)B1,1 M3 :=A1,1(B1,2−B2,2) M4 :=A2,2(B2,1−B1,1)
M5 := (A1,1+A1,2)B2,2 M6 := (A2,1−A1,1)(B1,1+B1,2) M7 := (A1,2−A2,2)(B2,1+B2,2).
Wtedy:
C =
A1,1B1,1+A1,2B2,1 A1,1B1,2+A1,2B2,2 A2,1B1,1+A2,2B2,1 A2,1B1,2+A2,2B2,2
=
M1+M4−M5+M7 M3+M5
M2+M4 M1−M2+M3+M6
Mamy rekurencj¦ T (n) = 7T (n/2) + O(n2) czyli
T (n) = O(7log2n) =O(nlog27) =O(n2.81).
Kilka faktów podanych bez dowodu
Najszybszy znany algorytm mno»enia macierzy Coppersmitha i Winograda (1990) dziaªa w czasie O(n2.38) (jest kompletnie niepraktyczny).
Najlepsze znane dolne ograniczenie to Ω(n2).
Ciekawe wyniki dla macierzy prostok¡tnych, np. je±li r ≤ 0.294 to macierz n × nr mo»na pomno»y¢ przez macierz nr ×n w czasie O(n2+o(1)).
Niech M(n) to czas mno»enia macierzy n × n.
Wiemy, »e M(n) = O(nω), gdzie ω < 2.38.
Mo»na znale¹¢ odwrotno±¢ macierzy w czasie O(M(n)).
Mo»na obliczy¢ wyznacznik macierzy w czasie O(M(n)).
Dowody dwóch ostatnich faktów mo»na znale¹¢ w podr¦czniku Cormena.
Zastosowanie 1: liczba marszrut
Lemat
Niech A b¦dzie macierz¡ s¡siedztwa n-wierzchoªkowego grafu G (skierowanego lub nieskierowanego). Dla k ∈ N>0. Wówczas dla
dowolnego i, j = 1, . . . , n element Aki,j zawiera liczb¦ marszrut dªugo±ci k od wierzchoªka i do wierzchoªka j
Dowód
Indukcja. Dla k = 1 OK.
Dla k > 1 mamy:
Ak−1i,` ·A`,j jest liczb¡ marszrut dªugo±ci k od i do j, w których przedostatni wierzchoªek to `.
St¡d, Aki,j =Pn
`=1Ak−1i,` ·A`,j jest liczb¡ wszystkich marszrut dªugo±ci k od i do j.
Wniosek Liczb¦ marszrut dªugo±ci k mi¦dzy wszystkimi parami wierzchoªków mo»emy policzy¢ w czase O(nωlog k).
Szybkie mno»enie macierzy: zastosowania
Oznaczmy przez O(nω) najlepszy znany czas mno»enia macierzy n × n.
1 Rozwi¡zywanie ukªadów równa« w O(nω)
2 Wyszukiwanie trójk¡tów w grae w O(nω)
3 Domkni¦cie przechodnie w O(nωlog n)
4 Sprawdzenie (ew. znajdowanie) czy graf zawiera skojarzenie doskonaªe w czasie (nω).
MAX-SAT (Williams 2004)
Problem MAX-SAT
Dana formuªa φ w postaci 2-CNF, zawieraj¡ca n zmiennych. Znale¹¢
warto±ciowanie zmiennych, które maksymalizuje liczb¦ speªnionych klauzul.
Zªo»ono±¢
Odpowiedni problem decyzyjny jest NP-zupeªny.
Algorytm naiwny ma zªo»ono±¢ O(2n)
Pytanie: Czy mo»na szybciej? Np. O(1.9n)?
B¦dziemy si¦ zajmowa¢ równowa»nym (z dokªadno±ci¡ do czynnika log(#klauzul)) problemem:
Problem MAX-SAT, wersja testuj¡ca
Dana formuªa φ w postaci 2-CNF, zawieraj¡ca n zmiennych oraz k ∈ N Czy istnieje warto±ciowanie zmiennych, dla którego jest dokªadnie k speªnionych klauzul.
MAX-SAT (Williams 2004)
Problem MAX-SAT
Dana formuªa φ w postaci 2-CNF, zawieraj¡ca n zmiennych. Znale¹¢
warto±ciowanie zmiennych, które maksymalizuje liczb¦ speªnionych klauzul.
Zªo»ono±¢
Odpowiedni problem decyzyjny jest NP-zupeªny.
Algorytm naiwny ma zªo»ono±¢ O(2n)
Pytanie: Czy mo»na szybciej? Np. O(1.9n)?
B¦dziemy si¦ zajmowa¢ równowa»nym (z dokªadno±ci¡ do czynnika log(#klauzul)) problemem:
Problem MAX-SAT, wersja testuj¡ca
Dana formuªa φ w postaci 2-CNF, zawieraj¡ca n zmiennych oraz k ∈ N Czy istnieje warto±ciowanie zmiennych, dla którego jest dokªadnie k speªnionych klauzul.
MAX-SAT (Williams 2004)
Zbudujemy pewien graf G o O(2n/3) wierzchoªkach.
Ustalmy dowolny podziaª V = V0∪V1∪V2 na trzy równe cz¦±ci (tak równe jak si¦ da).
Wierzchoªkami G s¡ wszystkie warto±ciowania vi :Vi → {0, 1} dla i = 0, 1, 2.
Dla dowolnych v ∈ Vi, w ∈ V(i+1) mod 3 graf G zawiera kraw¦d¹ vw.
2
V02
V12
V2MAX-SAT (Williams 2004)
Idea rozwi¡zania
Dobierzemy tak wagi na kraw¦dziach, »e waga trójk¡ta vwu w G b¦dzie równa liczbie speªnionych klauzul przy warto±ciowaniu (v, w, u).
Wtedy wystarczy sprawdzi¢, czy istnieje trójk¡t o wadze k w G.
2
V02
V12
V2MAX-SAT (Williams 2004)
Idea rozwi¡zania
Dobierzemy tak wagi na kraw¦dziach, »e waga trójk¡ta vwu w G b¦dzie równa liczbie speªnionych klauzul przy warto±ciowaniu (v, w, u).
Wtedy wystarczy sprawdzi¢, czy istnieje trójk¡t o wadze k w G.
Problem 1 Jak dobra¢ wagi?
Niech c(v) = wszystkie klauzule, które s¡ speªnione przy warto±ciowaniu v.
Wtedy liczba speªnionych klauzul przy warto±ciowaniu (v, w, u) wynosi:
|c(v) ∪ c(w) ∪ c(u)| = |c(v)| + |c(w)| + |c(u)|
− |c(v) ∩ c(w)| − |c(v) ∩ c(u)| − |c(w) ∩ c(u)|
+ |c(v) ∩ c(w) ∩ c(u)|.
MAX-SAT (Williams 2004)
Idea rozwi¡zania
Dobierzemy tak wagi na kraw¦dziach, »e waga trójk¡ta vwu w G b¦dzie równa liczbie speªnionych klauzul przy warto±ciowaniu (v, w, u).
Wtedy wystarczy sprawdzi¢, czy istnieje trójk¡t o wadze k w G.
Problem 1 Jak dobra¢ wagi?
Niech c(v) = wszystkie klauzule, które s¡ speªnione przy warto±ciowaniu v.
Wtedy liczba speªnionych klauzul przy warto±ciowaniu (v, w, u) wynosi:
|c(v) ∪ c(w) ∪ c(u)| = |c(v)| + |c(w)| + |c(u)|
− |c(v) ∩ c(w)| − |c(v) ∩ c(u)| − |c(w) ∩ c(u)|
+ |c(v) ∩ c(w) ∩ c(u)|
| {z }
0
.
MAX-SAT (Williams 2004)
Idea rozwi¡zania
Dobierzemy tak wagi na kraw¦dziach, »e waga trójk¡ta vwu w G b¦dzie równa liczbie speªnionych klauzul przy warto±ciowaniu (v, w, u).
Wtedy wystarczy sprawdzi¢, czy istnieje trójk¡t o wadze k w G.
Problem 1 Jak dobra¢ wagi?
Niech c(v) = wszystkie klauzule, które s¡ speªnione przy warto±ciowaniu v.
Wtedy liczba speªnionych klauzul przy warto±ciowaniu (v, w, u) wynosi:
|c(v) ∪ c(w) ∪ c(u)| =|c(v)|+|c(w)|+|c(u)|
−|c(v) ∩ c(w)|−|c(w) ∩ c(u)|−|c(u) ∩ c(v)|
+ |c(v) ∩ c(w) ∩ c(u)|
| {z }
0
.
Czyli dajemy waga(xy) = |c(x)| − |c(x) ∩ c(y)|.
MAX-SAT (Williams 2004)
Pozostaªo sprawdzi¢, czy istnieje trójk¡t o wadze k w G.
Trick
Rozwa»amy wszystkie O(m2) =O(n4) podziaªów (m = liczba klauzul) k = k0+k1+k2. Dla ka»dego podziaªu budujemy graf Gk0,k1,k2 zªo»ony tylko z:
kraw¦dzi o wadze k0 mi¦dzy 2V0 a 2V1, kraw¦dzi o wadze k1 mi¦dzy 2V1 a 2V2, kraw¦dzi o wadze k2 mi¦dzy 2V2 a 2V0. Wtedy wystarczy...
sprawdzi¢, czy istnieje dowolny trójk¡t.
MAX-SAT (Williams 2004)
Pozostaªo sprawdzi¢, czy istnieje trójk¡t o wadze k w G.
Trick
Rozwa»amy wszystkie O(m2) =O(n4) podziaªów (m = liczba klauzul) k = k0+k1+k2. Dla ka»dego podziaªu budujemy graf Gk0,k1,k2 zªo»ony tylko z:
kraw¦dzi o wadze k0 mi¦dzy 2V0 a 2V1, kraw¦dzi o wadze k1 mi¦dzy 2V1 a 2V2, kraw¦dzi o wadze k2 mi¦dzy 2V2 a 2V0.
Wtedy wystarczy... sprawdzi¢, czy istnieje dowolny trójk¡t.
Sprawdzanie, czy G
k0,k1,k2zawiera trój¡t
Wniosek
Graf Gk0,k1,k2 ma 3 · 2n/3 wierzchoªków.
Mo»emy sprawdzi¢, czy Gk0,k1,k2 zawiera trój¡t w czasie O(2ωn/3) =O(1.732n)
Czyli mo»emy sprawdzi¢, czy G zawiera trój¡t o wadze k w czasie O(n4·2ωn/3) =O(n4·1.732n) =O(1.733n)
MAX-SAT (Williams 2004): Podsumowanie
Wniosek
Mo»emy rozwi¡za¢ MAX-SAT w czasie i pami¦ci O(1.733n).
atwo przerobi¢ nasz algorytm (jak?) »eby dosta¢ Wniosek
Mo»emy zliczy¢ wszystkie rozwi¡zania optymalne MAX-SAT w czasie i pami¦ci O(1.733n).
MAX-SAT (Williams 2004): Podsumowanie
Wniosek
Mo»emy rozwi¡za¢ MAX-SAT w czasie i pami¦ci O(1.733n).
atwo przerobi¢ nasz algorytm (jak?) »eby dosta¢
Wniosek
Mo»emy zliczy¢ wszystkie rozwi¡zania optymalne MAX-SAT w czasie i pami¦ci O(1.733n).