• Nie Znaleziono Wyników

Szybkie mno»enie wielomianów i macierzy

N/A
N/A
Protected

Academic year: 2021

Share "Szybkie mno»enie wielomianów i macierzy"

Copied!
42
0
0

Pełen tekst

(1)

Szybkie mno»enie wielomianów i macierzy

Šukasz Kowalik

Instytut Informatyki, Uniwersytet Warszawski

(2)

Szybka Transformata Fouriera

(3)

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).

(4)

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).

(5)

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).

(6)

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).

(7)

(Prawdziwe) mno»enie wielomianów w O(n log n)

(8)

(Prawdziwe) mno»enie wielomianów w O(n log n)

(9)

Liczby zepolone, pierwiastki z 1: przypomnienie

Liczby zespolone przedstawiamy jako:

z = x + yi = r(cos ϕ + i sin ϕ) z = r · eϕi

ωn=en jest pierwiastkiem stopnia n z 1.

wszystkie pierwiastki stopnia n z 1: ω0n, ωn1, . . . ωnn−1.

(10)

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).

(11)

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 = (eni)2=en/2i = ω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

(12)

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).

(13)

Mno»enie wielomianów w O(n log n): Czego jeszcze brakuje?

(14)

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).

(15)

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 = Vn1y.

(16)

Odwrotna Dyskretna Transformata Fouriera (IDFT), cd

Chcemy obliczy¢ a = Vn1y,

(Vn jest macierz¡ Vandermonde'a dla warto±ci 1, ωn, ωn2, . . . , ωn−1n .) Fakt (dowód: obliczenie Vn1Vn, VnVn1, nuda.)

(Vn1)j,k = 1n ωnjk Wniosek

aj =

n−1

X

k=0

1n ωnjk·yk = 1n

n−1

X

k=0

yknj)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).

(17)

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.

(18)

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.

(19)

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.

(20)

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.

(21)

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).

(22)

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).

logn

(23)

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}.

(24)

Szybkie mno»enie macierzy

(25)

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.

(26)

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.)

(27)

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).

(28)

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.

(29)

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).

(30)

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ω).

(31)

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.

(32)

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.

(33)

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

V0

2

V1

2

V2

(34)

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.

2

V0

2

V1

2

V2

(35)

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)|.

(36)

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

.

(37)

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)|.

(38)

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.

(39)

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.

(40)

Sprawdzanie, czy G

k0,k1,k2

zawiera 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)

(41)

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).

(42)

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).

Cytaty

Powiązane dokumenty

Sprawdź z definicji, czy ciąg zmiennych losowych {X n } ∞ n=1 określony na tej przestrzeni probabilistycznej jest zbieżny do zmiennej losowej X: z prawdopodobieństwem jeden,

[r]

Pierścień bez właściwych dzielników zera nazywamy pierścieniem całkowitym (lub

Każdy element macierzy C – c ij jest równy iloczynowi skalarnemu i-tego wiersza macierzy stojącej po lewej stronie znaku mnożnie, przez j-tą kolumnę macierzy stojącej

[r]

[r]

Niech przestrze« wektorowa V oznacza zbiór wszystkich wielomianów co najwy»ej drugiego stopnia w

oznacza ten sam obiekt (izomorzm szeregów i ci¡gów); szeregi w sposób bardziej intuicyjny wprowadzaj¡ operacj¦ mno»enia (tak jak mno»enie wielomianów);. operacja splotu