Złożoność obliczeniowa (bioinformatyka) - egzamin 31 stycznia 2018
1. Dla każdego z następujących języków nad alfabetem {a, b} proszę ustalić, czy jest to język regularny, czy jest to język bezkontekstowy i czy należy do klasy P.
(a) L
1= {a
nbw | n ∈ N ∧ |w| = n};
(b) L
2= {a
nbw | n ∈ N ∧ |w| = 4};
(c) L
3= {a
nbw | n ∈ N ∧ |w| = n
2}.
Wskazówka: W punkcie (c) można zacząć od języka L
03= {a
nb
n2+1| n ∈ N}.
2. Które z następujących stwierdzeń jest prawdziwe?
(a) Jeśli L
1≤
logL
2, to −L
1≤
log−L
2. (b) Jeśli L
1jest Pspace-zupełny, to −L
1też.
(c) Jeśli L
1jest Pspace-zupełny i L
1⊆ L
2, to L
2też jest Pspace-zupełny.
(d) Jeśli L
1i L
2są Pspace-zupełne, to L
1∪ L
2lub L
1∩ L
2jest Pspace-zupełny.
(e) Jeśli L jest Pspace-zupełny, to L jest NP-trudny.
3. Zbiór A ⊆ N jest obliczalny (rekurencyjny), funkcja f : N → N jest też obliczalna. Czy obraz f (A) musi być obliczalny? Czy musi być rekurencyjnie przeliczalny? Co się zmieni jeśli zamiast o obraz zapytamy o przeciwobraz f
−1(A)?
4. Udowodnić, że jeśli NP = co-NP, to Nexptime = co-Nexptime.
Przykładowe rozwiązania
1a: Język L1jest bezkontekstowy. Generuje go gramatyka o produkcjach ξ0::= b | aξ0b | aξ0a.
Nie jest to język regularny, bo ma nieskończenie wiele ilorazów. Istotnie, wszystkie języki postaci L1\an = {ambw | m ∈ N ∧ |w| = n + m} są różne. Ponieważ każdy język bezkontekstowy należy do klasy P, więc L1 też.
1b: Język L2 jest regularny, bo L2= a∗b(a ∪ b)4. W szczególności L2jest bezkontekstowy i L2∈ P . 1c: Język L3 jest w klasie P. Deterministyczna maszyna Turinga zlicza litery a na początku słowa wejściowego oraz wszystkie litery tego słowa, używając dwóch liczników binarnych c1 i c2 na dwóch taśmach roboczych. Wymaga to czasu rzędu O(n). Następnie maszyna oblicza wartość c21 na trzeciej taśmie (w czasie rzędu O(log2n)) i sprawdza, czy c1+ 1 + c21= c2(w czasie rzędu O(log n)). Wszystko razem wymaga więc czasu liniowego.
Język L3nie jest bezkontekstowy. Wystarczy udowodnić, że język L03= L3∩ a∗b∗= {anbn2+1| n ∈ N}
nie jest bezkontekstowy (bo iloczyn języka bezkontekstowego i regularnego jest bezkontekstowy).
Załóżmy przeciwnie. Niech N będzie stałą dla języka L03z lematu o pompowaniu i niech w = aNbN2+1. Wtedy w = xyzuv, gdzie |yzu| ≤ N , yu 6= ε, oraz wr = xyrzurv ∈ L03 dla dowolnego r. Niech k i m będzie odpowiednio liczbą liter a i b w słowie yu. Dla r = 2 otrzymujemy, że słowo w2ma N + k liter a i N2+ 1 + m liter b. Natomiast przy r = 3 mamy N + 2k liter a i N2+ 1 + 2m liter b w słowie w3. Ponieważ w2, w3 ∈ L03, więc (N + k)2+ 1 = N2+ 1 + m oraz (N + 2k)2+ 1 = N2+ 1 + 2m. Z tych równań łatwo wynika, że m = k = 0, czyli yu = ε i mamy sprzeczność.
2a: Tak. Jeśli L1≤logL2, to dla każdego słowa x zachodzi równoważność x ∈ L1⇔ f (x) ∈ L2, gdzie f jest odpowiednią funkcją obliczalną w pamięci logarytmicznej. Jasne, że wtedy x 6∈ L1⇔ f (x) 6∈ L2. 2b: Tak. Skoro L1jest Pspace-zupełny, to należy do Pspace, zamkniętego ze względu na dopełnienie.
Stąd −L1∈ Pspace. A jeśli L ∈ Pspace, to −L ∈ Pspace, więc −L ≤logL1, skąd także L ≤log−L1. 2c: Nie. Język QBF jest zawarty w zbiorze Σ∗ wszystkich słów, który nie jest Pspace-zupełny, bo łatwo widzieć, że jeśli L ≤log Σ∗, to L = Σ∗.
2d: Nie. Z części 2b wynika, że język −QBF jest Pspace-zupełny, tymczasem QBF ∪ −QBF = Σ∗, oraz QBF ∩ −QBF = ∅. Tymczasem ani Σ∗ ani ∅ = −Σ∗ nie są Pspace-zupełne.
2e: Tak. Wprost z definicji, bo NP ⊆ Pspace.
3: Obraz f (A) = {f (a) | a ∈ A} jest zbiorem rekurencyjnie przeliczalnym (częściowo obliczalnym), bo istnieje częściowy algorytm sprawdzający, że dana liczba n ∈ N należy do f (A). Dla a = 0, 1, 2, . . . wystarczy sprawdzać, czy a ∈ A i czy f (a) = n, aż się takie a znajdzie. Obraz zbioru obliczalnego nie musi być obliczalny. Na przykład niech k ∈ K = {m | Mm akceptuje m} i niech f (m, n) = m, jeśli maszyna Mmakceptuje m w co najwyżej n krokach, a w przeciwnym razie niech f (m, n) = k. Wtedy f (N × N) = K. Dwuargumentową funkcję f można zastąpić przez jednoargumentową funkcję f ◦ g, gdzie g : N−→1−1
na N × N jest obliczalna, np. taka że g(2m(2n + 1) − 1) = hm, ni.
Przeciwobraz f−1(A) = {x ∈ N | f (x) ∈ A} jest obliczalny, bo aby ustalić czy x ∈ f−1(A) wystarczy obliczyć f (x) i sprawdzić, czy f (x) ∈ A.
4: Załóżmy, że NP = co-NP. Pokażemy, że Nexptime ⊆ co-Nexptime. Niech L ∈ Nexptime, tj. L ∈ Ntime(2nk) dla pewnego k. Wtedy L0 = {w$2|w|k−|w| | w ∈ L} należy do Ntime(O(n)) ⊆ NP, ponieważ słowa postaci w$2|w|k−|w| o długości n można rozpoznawać niedeterministycznie w czasie proporcjonalnym do 2|w|k = n. Z naszego założenia wynika, że L0 ∈ co-NP, czyli −L0 ∈ NP, powiedzmy −L0 ∈ Ntime(nr). Ale wtedy język −L jest w klasie Nexptime. Istotnie, aby sprawdzić, że dane słowo w długości n należy do −L wystarczy ustalić, że w$2|w|k−|w| ∈ −L0. To można zrobić niedeterministycznie w czasie wielomianowym od długości słowa w$2|w|k−|w|, dokładniej w czasie (2nk)r= 2rnk≤ 2nk+1 (prawie wszędzie). Zatem −L ∈ Ntime(2nk+1), więc L ∈ co-Nexptime.
Inkluzja co-Nexptime ⊆ Nexptime wynika natychmiast z Nexptime ⊆ co-Nexptime. Jeśli bowiem L ∈ co-Nexptime, to −L ∈ Nexptime, skąd −L ∈ co-Nexptime i wreszcie L ∈ Nexptime.