Złożoność obliczeniowa (bioinformatyka) - egzamin 10 lutego 2015
1. Dla każdego z następujących języków proszę ustalić, czy jest to język regularny i czy jest to język bezkontekstowy:
(a) L
1= {a
mb
na
k| m ≡ n + k mod 2};
(b) L
2= {a
mb
na
k| m = n + k};
(c) L
3= {a
mb
na
k| m = n + k ∧ n = k}.
2. Czy wszystkie języki z zadania 1 należą do klasy Logspace?
3. Czy prawdziwe są następujące zawierania:
(a) S
k∈N
Nspace(log
kn) ⊆ S
k∈N
Dspace(log
kn)?
(b) Dtime(n
2√
n) ⊆ Dtime(n
2)?
4. Co to znaczy, że problem decyzyjny (język) jest nierozstrzygalny? Proszę podać przykład takiego problemu.
5. Co to znaczy, że problem (język) jest NP-zupełny? Proszę zdefiniować trzy takie pro-
blemy, w tym co najwyżej jeden odnoszący się do rachunku zdań.
Przykładowe rozwiązania
1a: Ten język jest regularny, określony np. wyrażeniem regularnym (a2)∗(ab ∪ ε)(b2)∗(ba ∪ ε)(a2)∗. 1b: Ten język jest bezkontekstowy, generowany przez gramatykę1 o produkcjach:
ξ0⇒ ξ | aξ0a; ξ ⇒ ε | aξb,
gdzie ξ0 jest symbolem początkowym. Ale nie jest to język regularny, bo ma nieskończenie wiele różnych ilorazów. Na przykład, dla różnych r ∈ N różne są języki
L2\ ar= {w | arw ∈ L2} = {ambnak | r + m = n + k}.
1c: Ten język nie jest bezkontekstowy. Przypuśćmy przeciwnie i niech N będzie stałą z lematu o pompowaniu. Słowo w = a2NbNaN można przedstawić w postaci w = uvzxy, gdzie uvizxiy ∈ L3
dla każdego i ∈ N. Przy tym vx 6= ε, a słowo vzx jest długości co najwyżej N .
W szczególności, słowo w0 = uv2zx2y musi być postaci a2MbMaM, gdzie M > N , bo w0 jest dłuższe niż w. Słowo vzx jest na tyle krótkie, że musi się zawierać w części a2NbN albo w części bNaN. W pierwszym przypadku otrzymamy w0 = w00baN (nie zmienia się końcowa część od ostatniego b włącznie) w drugim w0 = a2Nbw00 (nie zmieni się część początkowa do pierwszego b włącznie). Stąd M = N , sprzeczność.
2: Tak. Na przykład do sprawdzenia, czy dane słowo w długości n nalezy do L2 wystarczy licznik rozmiaru n (zajmujący na taśmie roboczej log n komórek). Maszyna Turinga przesuwa głowicę wejś- ciową w prawo, zwiększając w każdym kroku licznik o 1, aż do pierwszej litery b (jeśli jej nie ma, to jest jeszcze łatwiej, bo wystarczy sprawdzić czy słowo ma parzystą długość), a następnie zmniejsza- jąc licznik, który powinien osiągnąć wartość 0 na końcu słowa. Język L3 rozpoznajemy podobnie, używając dwóch liczników, a język L1w ogóle nie wymaga licznika, bo wystarczy automat skończony.
3a: Tak, bo Nspace(logkn) ⊆ Dspace(log2kn) z twierdzenia Savitcha.
3b: Nie. Ponieważ n2≤ n2√
n oraz lim
n→∞
n2log n n2√
n = 0, więc Dtime(n2) Dtime(n2√ n).
1Pani Paulinie Knut dziękuję za wykrycie pomyłki.