Języki, automaty i obliczenia/Ćwiczenia 13: Złożoność obliczeniowa.: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Matiunreal (dyskusja | edycje)
Matiunreal (dyskusja | edycje)
Linia 37: Linia 37:
W oczywisty sposób otrzymujemy, że ilość wymaganych kroków czasowych maszyny jest ograniczona przez wielomian (dla dużych <math>\displaystyle n</math>).
W oczywisty sposób otrzymujemy, że ilość wymaganych kroków czasowych maszyny jest ograniczona przez wielomian (dla dużych <math>\displaystyle n</math>).
Dla małych <math>\displaystyle n</math> możemy zawsze rozbudować maszynę tak aby akceptowała słowa bez żadnego testowania.
Dla małych <math>\displaystyle n</math> możemy zawsze rozbudować maszynę tak aby akceptowała słowa bez żadnego testowania.
Zatem <math>\displaystyle L\in   </math> '''P''' .
Zatem <math>\displaystyle L\in </math> '''P''' .
</div></div>
</div></div>


Linia 79: Linia 79:
# Jeśli słowo wejściowe jest inne niż <math>\displaystyle 1^n</math> to odrzuć.
# Jeśli słowo wejściowe jest inne niż <math>\displaystyle 1^n</math> to odrzuć.
# Na taśmie <math>\displaystyle I</math> wypisz słowo wejściowe, na taśmach <math>\displaystyle C</math> i <math>\displaystyle S</math> wypisz słowo <math>\displaystyle 1</math>.
# Na taśmie <math>\displaystyle I</math> wypisz słowo wejściowe, na taśmach <math>\displaystyle C</math> i <math>\displaystyle S</math> wypisz słowo <math>\displaystyle 1</math>.
# Wykonaj symulację maszyny <math>\displaystyle \mathcal{M}</math> na taśmie <math>\displaystyle S</math> oraz dopisz symbol <math>\displaystyle 1</math> do taśmy <math>\displaystyle C</math> (po jednym
# {{kotwica|prz.4|}}Wykonaj symulację maszyny <math>\displaystyle \mathcal{M}</math> na taśmie <math>\displaystyle S</math> oraz dopisz symbol <math>\displaystyle 1</math> do taśmy <math>\displaystyle C</math> (po jednym przebiegu ilość symboli na taśmie <math>\displaystyle S</math> potraja się)
przebiegu ilość symboli na taśmie <math>\displaystyle S</math> potraja się)
# Jeśli słowo na taśmie <math>\displaystyle C</math> jest krótsze niż słowo na taśmie <math>\displaystyle I</math> wykonaj ponownie krok [[#prz.4|4]].
# Jeśli słowo na taśmie <math>\displaystyle C</math> jest krótsze niż słowo na taśmie <math>\displaystyle I</math> wykonaj ponownie krok&nbsp;[[##step4|Uzupelnic step4|]].
# W tym momencie na taśmie <math>\displaystyle S</math> zostało zaznaczone <math>\displaystyle 3^n</math>  komórek.
# W tym momencie na taśmie <math>\displaystyle S</math> zostało zaznaczone <math>\displaystyle 3^n</math>  komórek.
Zamieniamy wypisane symbole na <math>\displaystyle 1</math> (zapominamy o symulacji taśm), wracamy nad pierwszy symbol (przed lewym markerem)
Zamieniamy wypisane symbole na <math>\displaystyle 1</math> (zapominamy o symulacji taśm), wracamy nad pierwszy symbol (przed lewym markerem) i przechodzimy do konfiguracji końcowej <math>\displaystyle s_1\in S_F</math>.
i przechodzimy do konfiguracji końcowej <math>\displaystyle s_1\in S_F</math>.


Po zakończeniu cyklu doszliśmy do konfiguracji <math>\displaystyle \sharp s_1 1^{3^n} \sharp</math> co było wymagane w definicji konstruowalności
Po zakończeniu cyklu doszliśmy do konfiguracji <math>\displaystyle \sharp s_1 1^{3^n} \sharp</math> co było wymagane w definicji konstruowalności
Linia 112: Linia 110:
rozpoznawany przez automat skończenie stanowy. Zatem do akceptacji tego języka wystarczy,
rozpoznawany przez automat skończenie stanowy. Zatem do akceptacji tego języka wystarczy,
aby maszyna przeszła taśmę z lewej strony do prawej według zasad:
aby maszyna przeszła taśmę z lewej strony do prawej według zasad:
# Jeśli czytasz symbol <math>\displaystyle a</math> wypisz <math>\displaystyle a</math> i przejdź w prawo
# Jeśli czytasz symbol <math>\displaystyle a</math> wypisz <math>\displaystyle a</math> i przejdź w prawo powtarzając ten krok. Jeśli czytasz <math>\displaystyle b</math> przejdź w prawo i wykonaj krok następny.
powtarzając ten krok. Jeśli czytasz <math>\displaystyle b</math> przejdź w prawo i wykonaj
krok następny.
# Jeśli jesteś na ograniczniku to akceptuj, inaczej odrzuć.
# Jeśli jesteś na ograniczniku to akceptuj, inaczej odrzuć.


Linia 134: Linia 130:
Idea działania poszukiwanej maszyny (cztero taśmowej) jest
Idea działania poszukiwanej maszyny (cztero taśmowej) jest
następująca:
następująca:
# Sprawdź czy słowo wjeściowe <math>\displaystyle w</math> zawiera jako pierwszy symbol <math>\displaystyle a</math>. Jeśli nie
# Sprawdź czy słowo wjeściowe <math>\displaystyle w</math> zawiera jako pierwszy symbol <math>\displaystyle a</math>. Jeśli nie odrzuć.
odrzuć.
# Skopiuj najdłuższy prefiks słowa wejściowego <math>\displaystyle w</math> postaci <math>\displaystyle a^k</math> na taśmę nr dwa.
# Skopiuj najdłuższy prefiks słowa wejściowego <math>\displaystyle w</math> postaci <math>\displaystyle a^k</math> na
taśmę nr dwa.
# Korzystając z konstruowalności pamięciowej funkcji <math>\displaystyle 2k</math> oraz
# Korzystając z konstruowalności pamięciowej funkcji <math>\displaystyle 2k</math> oraz
<math>\displaystyle 3k</math> wypisz słowo <math>\displaystyle b^{2k}</math> na taśmie nr <math>\displaystyle 3</math> oraz słowo <math>\displaystyle c^{3k}</math> na
<math>\displaystyle 3k</math> wypisz słowo <math>\displaystyle b^{2k}</math> na taśmie nr <math>\displaystyle 3</math> oraz słowo <math>\displaystyle c^{3k}</math> na taśmie nr <math>\displaystyle 4</math>.
taśmie nr <math>\displaystyle 4</math>.
# Dopisz słowo z taśmy nr <math>\displaystyle 3</math> i <math>\displaystyle 4</math> do słowa na taśmie nr <math>\displaystyle 2</math>. W tym momencie na taśmie nr <math>\displaystyle 2</math> znajduje się słowo <math>\displaystyle a^k b^{2k} c^{3k}</math>.
# Dopisz słowo z taśmy nr <math>\displaystyle 3</math> i <math>\displaystyle 4</math> do słowa na taśmie nr <math>\displaystyle 2</math>. W
# Porównaj słowo z taśmy nr <math>\displaystyle 2</math> ze słowem <math>\displaystyle w</math>. Jeśli są identyczne to akceptuj.
tym momencie na taśmie nr <math>\displaystyle 2</math> znajduje się słowo <math>\displaystyle a^k b^{2k}
c^{3k}</math>.
# Porównaj słowo z taśmy nr <math>\displaystyle 2</math> ze słowem <math>\displaystyle w</math>. Jeśli są
identyczne to akceptuj.


</div></div>
</div></div>
Linia 168: Linia 158:
'''(Ad. 1)''' Konstruujemy maszynę dwu-taśmową która działa
'''(Ad. 1)''' Konstruujemy maszynę dwu-taśmową która działa
według zasady:
według zasady:
# Kopiuj słowo wejściowe na taśmę nr 2. Symuluj kolejno jeden
# Kopiuj słowo wejściowe na taśmę nr 2. Symuluj kolejno jeden krok czasowy <math>\displaystyle TM_1</math> na taśmie <math>\displaystyle 1</math> i jeden krok <math>\displaystyle TM_2</math> na taśmie <math>\displaystyle 2</math>.
krok czasowy <math>\displaystyle TM_1</math> na taśmie <math>\displaystyle 1</math> i jeden krok <math>\displaystyle TM_2</math> na taśmie <math>\displaystyle 2</math>.
# Jeśli któraś z maszyn zaakceptowała to akceptuj.
# Jeśli któraś z maszyn zaakceptowała to akceptuj.


Linia 273: Linia 262:
własność Posta.
własność Posta.
# Jeśli lista zawiera parę <math>\displaystyle (1^k,1^k)</math> to mamy własność Posta.
# Jeśli lista zawiera parę <math>\displaystyle (1^k,1^k)</math> to mamy własność Posta.
# Jeśli jedyne pary to takie w których
# Jeśli jedyne pary to takie w których <math>\displaystyle (u_i,v_i)=(1^{k_i},1^{l_i})</math> oraz <math>\displaystyle k_i>l_i</math> (lub <math>\displaystyle k_i<l_i</math>) dla
<math>\displaystyle (u_i,v_i)=(1^{k_i},1^{l_i})</math> oraz <math>\displaystyle k_i>l_i</math> (lub <math>\displaystyle k_i<l_i</math>) dla
<math>\displaystyle i=1,\dots,n</math> to własność posta nie jest spełniona (słowo dane przez
<math>\displaystyle i=1,\dots,n</math> to własność posta nie jest spełniona (słowo dane przez
katenację dowolnych <math>\displaystyle u_i</math> zawsze zawiera więcej (odp. mniej) symboli
katenację dowolnych <math>\displaystyle u_i</math> zawsze zawiera więcej (odp. mniej) symboli
niż odpowiadająca mu katenacja słow <math>\displaystyle v_i</math> )
niż odpowiadająca mu katenacja słow <math>\displaystyle v_i</math> )
# W ostatnim przypadku istnieją indeksy <math>\displaystyle i,j</math> takie, że
# W ostatnim przypadku istnieją indeksy <math>\displaystyle i,j</math> takie, że
<center><math>\displaystyle  
<center><math>\displaystyle (u_i,v_i)=(1^k,1^l)\quad , \quad (u_j,v_j)=(1^p,1^q) </math></center>
(u_i,v_i)=(1^k,1^l)\quad , \quad (u_j,v_j)=(1^p,1^q)
</math></center>


przy czym <math>\displaystyle k<l</math> i <math>\displaystyle p>q</math>. W tej sytuacji zachodzi własność Posta.
przy czym <math>\displaystyle k<l</math> i <math>\displaystyle p>q</math>. W tej sytuacji zachodzi własność Posta.

Wersja z 08:50, 24 sie 2006

1. ĆWICZENIA 13

Ćwiczenie 1.1

W trakcie wykładu rozważaliśmy język

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L=\left\{3^k\: : \: k=i\cdot j } dla pewnych Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle i,j> 1\right\} }

wykazując, że L NP .

Uzasadnij, że także
L P .
Wskazówka
Rozwiązanie

Ćwiczenie 1.2

Uzasadnij że funkcja s(n)=3n jest konstruowalna pamięciowo.

Wskazówka
Rozwiązanie

Ćwiczenie 1.3

Uzasadnij że funkcja s(n)=3n jest konstruowalna pamięciowo.

Wskazówka
Rozwiązanie

Ćwiczenie 1.4

Skonstruuj maszynę Turinga rozpoznającą język zadany gramatyką:

SaTb|b,TTa|1
Wskazówka
Rozwiązanie

Ćwiczenie 1.5

Przedstaw ideę działania maszyny Turinga rozpoznającej język

L={anb2nc3n:n>1}
Wskazówka
Rozwiązanie

Ćwiczenie 1.6

W trakcie wykładu rozważaliśmy zamkniętość klas języków w klasyfikacji Chomsky'ego ze względu na różne działania. Podaj uzasadnienie (ideę konstrukcji) następującego faktu:

Dla dowolnych maszyn Turinga TM1, TM2 istnieje maszyna o własności:

  1. L()=L(TM1)L(TM2)
  2. L()=L(TM1)L(TM2)
Wskazówka
Rozwiązanie

Ćwiczenie 1.7

Czy któraś z poniższych list słów ma własność Posta?

  1. (u1,v1)=[a2a2b],(u2,v2)=[b2ba],(u3,v3)=[ab2b]
  2. (u1,v1)=[ab2],(u2,v2)=[a2b]
  3. (u1,v1)=[baabab],(u2,v2)=[ba],(u3,v3)=[abab],(u4,v4)=[aaa]
Rozwiązanie

Ćwiczenie 1.8

W definicji problemu Posta zakłada się, że alfabet 𝒜 zawiera co najmniej dwa elementy. Wykaż, że gdy to założenie nie jest spełnione (tzn. 𝒜={1}) problem Posta jest problemem rozstrzygalnym.

Wskazówka
Rozwiązanie

2. Zadania domowe

Ćwiczenie 2.1

Zadanie domowe 2.1 do wykładu 12 polegało na konstrukcji maszyny Turinga 𝒯 akceptującej język:

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L_1=\left\{www\: : \: w\in \left\{\circ,\bullet,\star\right\}^*\right\} }

Zmodyfikuj, ewentualnie, tę konstrukcję 𝒯 aby udowodnić L1 P .

Ćwiczenie 2.2

Zadanie domowe 2.2 do wykładu 12 polegało na konstrukcji niedeterministycznej maszyny Turinga 𝒩𝒯 akceptującej język:

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L_2=\left\{w_1 w_1 w_2 w_2 \dots w_n w_n \: : \: w_i \in \left\{\circ,\bullet\right\}^+, n>0 \right\} }

Zmodyfikuj, ewentualnie, tę konstrukcję 𝒩𝒯 aby udowodnić, że L2 NP .

Podpowiedź: wykorzystaj konstrukcję z wyrocznią. Dla słowa wejściowego w przeprowadź weryfikację w trzech etapach: konstrukcja słów w1,,wn gdzie n<|w| (wyrocznia), sklejanie, weryfikacja czy w=w1w1w2w2wnwn.

Ćwiczenie 2.3

Uzasadnij, że jeśli funkcja s(n) jest konstruowalna pamięciowo to obliczenie d1*d2 z definicji konstruowalności pamięciowej (tzn. d1=s01n, d2=s11s(n)w) następuję w conajwyżej c2s(n) krokach gdzie c jest pewną stałą niezależną od n.
Podpowiedź: przeanalizuj ilość możliwych konfiguracji.

Ćwiczenie 2.4

Uzasadnij że funkcja n3 jest konstruowalna pamięciowo.

Ćwiczenie 2.5

Skonstruuj maszynę Turinga akceptującą słowo u=1n w dokładnie n2 krokach. Jak zmodyfikować konstrukcję maszyny aby akceptowała słowo u dokładnie w 2n krokach?

Ćwiczenie 2.6

Wypisz dokładnie wszystkie elementy składowe maszyn Turinga rozpoznających języki zadane gramatykami:

  1. SAbC , AaAb|ε, CbCc|ε
  2. SABACA,AAa|a,Bbb|b,Cc|ε

Ćwiczenie 2.7

Wykaż (podając ideę kontrukcji) że dla maszyn Turinga TM1, TM2 istnieje maszyna Turinga rozpoznająca język:

L()={uv:uL(TM1),vL(TM2)}

Ćwiczenie 2.8

Czy któraś z poniższych list słów ma własność Posta?

  1. (u1,v1)=[aa2b],(u2,v2)=[ba2a2]
  2. (u1,v1)=[aba],(u2,v2)=[aba2]
  3. (u1,v1)=[aaaa],(u2,v2)=[bba](u3,v3)=[bbb](u4,v4)=[baab]

Ćwiczenie 2.9

Udowodnij Twierdzenie 2.1 z wykładu:

Twierdzenie. Dla każdej gramatyki istnieje równoważna gramatyka tego samego typu taka, że każda produkcja, w której występuje symbol terminalny a , jest postaci va .