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)
Nie podano opisu zmian
Linia 4: Linia 4:
W trakcie wykładu rozważaliśmy język
W trakcie wykładu rozważaliśmy język
<center><math>\displaystyle  
<center><math>\displaystyle  
L=\left\{3^k\: : \: k=i\cdot j  </math>  dla pewnych  <math>\displaystyle  i,j> 1\rbrace
L=\left\{3^k\: : \: k=i\cdot j  </math>  dla pewnych  <math>\displaystyle  i,j> 1\rbrace,
</math></center>
</math></center>


Linia 13: Linia 13:


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">   
Zastanów się, ile maksymalnie trzeba wykonać mnożeń aby zweryfikować istnienie <math>\displaystyle i,j>1</math> dla których
Zastanów się, ile maksymalnie trzeba wykonać mnożeń, aby zweryfikować istnienie <math>\displaystyle i,j>1</math>, dla których
<math>\displaystyle k=i\cdot j</math>
<math>\displaystyle k=i\cdot j</math>
</div></div>
</div></div>
Linia 21: Linia 21:
zależności <math>\displaystyle k=i\cdot j</math> (według uzasadnienia z wykładu) jest wykonywana w czasie wielomianowym.
zależności <math>\displaystyle k=i\cdot j</math> (według uzasadnienia z wykładu) jest wykonywana w czasie wielomianowym.


Pozostaje zaprojektować deterministyczną maszynę generującą ciągi. Można to zrobić według schematu (maszyna cztero-taśmowa):
Pozostaje zaprojektować deterministyczną maszynę generującą ciągi. Można to zrobić według schematu (maszyna czterotaśmowa):


# Taśma nr <math>\displaystyle 1</math> jest tylko do odczytu. Mamy na niej słowo <math>\displaystyle 3^k</math>.
# Taśma nr <math>\displaystyle 1</math> jest tylko do odczytu. Mamy na niej słowo <math>\displaystyle 3^k</math>.
# Rozpocznij od zapisania słowa <math>\displaystyle 11</math> na taśmie nr <math>\displaystyle 2</math> i słowa <math>\displaystyle 22</math> na taśmie nr <math>\displaystyle 3</math>
# Rozpocznij od zapisania słowa <math>\displaystyle 11</math> na taśmie nr <math>\displaystyle 2</math> i słowa <math>\displaystyle 22</math> na taśmie nr <math>\displaystyle 3</math>.
# {{kotwica|prz.3|}}Przepisz słowa na taśmę nr <math>\displaystyle 4</math> według kolejności taśm <math>\displaystyle 2,3,1</math>.
# {{kotwica|prz.3|}}Przepisz słowa na taśmę nr <math>\displaystyle 4</math> według kolejności taśm <math>\displaystyle 2,3,1</math>.
# Sprawdź na taśmie nr <math>\displaystyle 4</math> czy <math>\displaystyle k=i\cdot j</math>. Jeśli tak to akceptuj. Inaczej krok następny.
# Sprawdź na taśmie nr <math>\displaystyle 4</math>, czy <math>\displaystyle k=i\cdot j</math>. Jeśli tak, to akceptuj. Inaczej krok następny.
# Dopisz symbol <math>\displaystyle 1</math> na taśmie nr <math>\displaystyle 2</math>. Gdy powstało słowo dłuższe niż <math>\displaystyle k</math> dopisz symbol <math>\displaystyle 2</math> na taśmie nr <math>\displaystyle 3</math> a słowo na taśmie nr <math>\displaystyle 2</math> usuń i zapisz na niej słowo <math>\displaystyle 11</math>.
# Dopisz symbol <math>\displaystyle 1</math> na taśmie nr <math>\displaystyle 2</math>. Gdy powstało słowo dłuższe niż <math>\displaystyle k</math>, dopisz symbol <math>\displaystyle 2</math> na taśmie nr <math>\displaystyle 3</math>, a słowo na taśmie nr <math>\displaystyle 2</math> usuń i zapisz na niej słowo <math>\displaystyle 11</math>.
# Jeśli słowo na taśmie nr <math>\displaystyle 3</math> jest dłuższe niż <math>\displaystyle k</math> to odrzuć. W przeciwnym przypadku przejdź do kroku [[#prz.3|3]].
# Jeśli słowo na taśmie nr <math>\displaystyle 3</math> jest dłuższe niż <math>\displaystyle k</math>, to odrzuć. W przeciwnym przypadku przejdź do kroku [[#prz.3|3]].


Idea tej maszyny jest bardzo prosta. Wykorzystaj taśmy nr <math>\displaystyle 2</math> (licznik 1) i <math>\displaystyle 3</math> (licznik 2) jako liczniki a na taśmie <math>\displaystyle 4</math> wykonuj symulacje.
Idea tej maszyny jest bardzo prosta. Wykorzystaj taśmy nr <math>\displaystyle 2</math> (licznik 1) i <math>\displaystyle 3</math> (licznik 2) jako liczniki, a na taśmie <math>\displaystyle 4</math> wykonuj symulacje.
Zacznij od stanu liczników na <math>\displaystyle 2</math> i zwiększaj kolejno licznik 1 a po jego przepełnieniu zeruj go (do wartości początkowej <math>\displaystyle 2</math>)
Zacznij od stanu liczników na <math>\displaystyle 2</math> i zwiększaj kolejno licznik 1, a po jego przepełnieniu zeruj go (do wartości początkowej <math>\displaystyle 2</math>)
i zwiększ licznik <math>\displaystyle 2</math>. Gdy on także się przepełni, to iloczyn stanów liczników przekracza <math>\displaystyle k</math> zatem można zakończyć generowanie ciągów.
i zwiększ licznik <math>\displaystyle 2</math>. Gdy on także się przepełni, to iloczyn stanów liczników przekracza <math>\displaystyle k</math>, zatem można zakończyć generowanie ciągów.


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.
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.
Zatem <math>\displaystyle L\in </math> '''P''' .
Zatem <math>\displaystyle L\in </math> '''P''' .
</div></div>
</div></div>


{{cwiczenie|2||
{{cwiczenie|2||
Uzasadnij że funkcja <math>\displaystyle s(n)=3n</math> jest konstruowalna pamięciowo.
Uzasadnij, że funkcja <math>\displaystyle s(n)=3n</math> jest konstruowalna pamięciowo.
}}
}}


Linia 47: Linia 47:


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
Bierzemy maszynę <math>\displaystyle MT_4</math> z wykładu konstruującą funkcję <math>\displaystyle 2n</math>. Dodajemy jedna dodatkową taśmę (oznaczmy taśmy przez <math>\displaystyle I</math> oraz <math>\displaystyle S</math>).
Bierzemy maszynę <math>\displaystyle MT_4</math> z wykładu konstruującą funkcję <math>\displaystyle 2n</math>. Dodajemy jedną dodatkową taśmę (oznaczmy taśmy przez <math>\displaystyle I</math> oraz <math>\displaystyle S</math>).
Drugą taśmę realizujemy poprzez rozszerzenie alfabetu. Jest to spowodowane faktem, że w definicji konstruowalności pamięciowej wymagane jest istnienie jedno-taśmowej deterministycznej maszyny Turinga. Konstruujemy maszynę <math>\displaystyle \mathcal{M}</math> według schematu
Drugą taśmę realizujemy poprzez rozszerzenie alfabetu. Jest to spowodowane faktem, że w definicji konstruowalności pamięciowej wymagane jest istnienie jednotaśmowej deterministycznej maszyny Turinga. Konstruujemy maszynę <math>\displaystyle \mathcal{M}</math> według schematu:


# Jeśli słowo wejściowe jest puste to stop.
# Jeśli słowo wejściowe jest puste, to stop.
# 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ć.
# Przepisz słowo wejściowe tak aby znajdowało się na taśmie <math>\displaystyle I</math> a taśma <math>\displaystyle S</math> była pusta (gdy zaczynamy symulować dwie taśmy musimy przejść do innego zestawu symboli w którym rozróżniamy taśmy).
# Przepisz słowo wejściowe tak aby znajdowało się na taśmie <math>\displaystyle I</math>, a taśma <math>\displaystyle S</math> była pusta (gdy zaczynamy symulować dwie taśmy, musimy przejść do innego zestawu symboli, w którym rozróżniamy taśmy).
# Kopiujemy słowo wejściowe na taśmę <math>\displaystyle S</math>.
# Kopiujemy słowo wejściowe na taśmę <math>\displaystyle S</math>.
# Symulujemy maszynę <math>\displaystyle MT_4</math> na taśmie <math>\displaystyle S</math>.
# Symulujemy maszynę <math>\displaystyle MT_4</math> na taśmie <math>\displaystyle S</math>.
Linia 59: Linia 59:
do konfiguracji końcowej <math>\displaystyle s_1\in S_F</math>.
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^{3n} \sharp</math> co było wymagane w definicji.
Po zakończeniu cyklu doszliśmy do konfiguracji <math>\displaystyle \sharp s_1 1^{3n} \sharp</math>, co było wymagane w definicji.
</div></div>
</div></div>


{{cwiczenie|3||
{{cwiczenie|3||
Uzasadnij że funkcja <math>\displaystyle s(n)=3^n</math> jest konstruowalna pamięciowo.
Uzasadnij, że funkcja <math>\displaystyle s(n)=3^n</math> jest konstruowalna pamięciowo.
}}
}}


Linia 71: Linia 71:


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
Wykorzystujemy trzy taśmy (<math>\displaystyle I</math>, <math>\displaystyle C</math>, <math>\displaystyle S</math>) oraz maszynę <math>\displaystyle \mathcal{M}</math> konstruującą pamięciowo funkcję <math>\displaystyle g(n)=3n</math>. Docelowa maszyna <math>\displaystyle \mathcal{N}</math> działa według schematu.
Wykorzystujemy trzy taśmy (<math>\displaystyle I</math>, <math>\displaystyle C</math>, <math>\displaystyle S</math>) oraz maszynę <math>\displaystyle \mathcal{M}</math> konstruującą pamięciowo funkcję <math>\displaystyle g(n)=3n</math>. Docelowa maszyna <math>\displaystyle \mathcal{N}</math> działa według schematu:


# Jeśli słowo początkowe jest puste wypisz <math>\displaystyle 1</math> i zatrzymaj się. Inaczej wykonaj następny krok.
# Jeśli słowo początkowe jest puste, wypisz <math>\displaystyle 1</math> i zatrzymaj się. Inaczej wykonaj następny krok.
# 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>.
# {{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ę)
# {{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ę)
# 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 [[#prz.4|4]].
# 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) i przechodzimy do konfiguracji końcowej <math>\displaystyle s_1\in S_F</math>.
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>.


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 pamięciowej.
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 pamięciowej.
</div></div>
</div></div>


Linia 87: Linia 87:
Skonstruuj maszynę Turinga rozpoznającą język zadany gramatyką:
Skonstruuj maszynę Turinga rozpoznającą język zadany gramatyką:
<center><math>\displaystyle  
<center><math>\displaystyle  
S\rightarrow aTb|b \quad, \quad T\rightarrow Ta|1
S\rightarrow aTb|b \quad, \quad T\rightarrow Ta|1.
</math></center>
</math></center>


Linia 100: Linia 100:
maszyna ma rozpoznawać język postaci:
maszyna ma rozpoznawać język postaci:
<center><math>\displaystyle  
<center><math>\displaystyle  
L=\left\{a^n b\: :\; n\geqslant 0\right\}
L=\left\{a^n b\: :\; n\geqslant 0\right\}.
</math></center>
</math></center>


Jest to język regularny, więc 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:
Jest to język regularny, więc 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:


# 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.
# 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.
# Jeśli jesteś na ograniczniku to akceptuj, inaczej odrzuć.
# Jeśli jesteś na ograniczniku, to akceptuj, inaczej odrzuć.


</div></div>
</div></div>
Linia 113: Linia 113:
Przedstaw ideę działania maszyny Turinga rozpoznającej język
Przedstaw ideę działania maszyny Turinga rozpoznającej język
<center><math>\displaystyle  
<center><math>\displaystyle  
L=\left\{a^n b^{2n} c^{3n} \;:\; n>1\right\}
L=\left\{a^n b^{2n} c^{3n} \;:\; n>1\right\}.
</math></center>
</math></center>


Linia 123: Linia 123:


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
Idea działania poszukiwanej maszyny (cztero taśmowej) jest następująca:
Idea działania poszukiwanej maszyny (czterotaśmowej) jest następująca:


# Sprawdź czy słowo wjeściowe <math>\displaystyle w</math> zawiera jako pierwszy symbol <math>\displaystyle a</math>. Jeśli nie odrzuć.
# Sprawdź czy słowo wjeściowe <math>\displaystyle w</math> zawiera jako pierwszy symbol <math>\displaystyle a</math>. Jeśli nie, 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 2.
# 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 taśmie nr <math>\displaystyle 4</math>.
# 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 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 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.
# 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 138: Linia 138:
Dla dowolnych maszyn Turinga <math>\displaystyle TM_1</math>, <math>\displaystyle TM_2</math> istnieje maszyna <math>\displaystyle \mathcal{M}</math> o własności:
Dla dowolnych maszyn Turinga <math>\displaystyle TM_1</math>, <math>\displaystyle TM_2</math> istnieje maszyna <math>\displaystyle \mathcal{M}</math> o własności:


# <math>\displaystyle  L( \mathcal{M})=L(TM_1)\cup L(TM_2) </math>
# <math>\displaystyle  L( \mathcal{M})=L(TM_1)\cup L(TM_2), </math>
# <math>\displaystyle  L( \mathcal{M})=L(TM_1)\cap L(TM_2) </math>
# <math>\displaystyle  L( \mathcal{M})=L(TM_1)\cap L(TM_2). </math>


}}
}}
Linia 148: Linia 148:


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
'''(Ad. 1)''' Konstruujemy maszynę dwu-taśmową która działa według zasady:
'''(Ad. 1)''' Konstruujemy maszynę dwutaśmową, która działa według zasady:


# 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>.
# 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>.
# Jeśli któraś z maszyn zaakceptowała to akceptuj.
# Jeśli któraś z maszyn zaakceptowała, to akceptuj.


'''(Ad. 2)''' Konstrukcja jest niemalże identyczne. Jedynie w kroku (2) akceptujemy gdy obie maszyny zaakceptowały. Ponieważ może to się stać w różnych krokach czasowych, w momencie gdy jedna z maszyn zaakceptuje, kończymy jej symulację i symulujemy tylko drugą aż do momentu gdy zaakceptuje (o ile to nastąpi).
'''(Ad. 2)''' Konstrukcja jest niemalże identyczna. Jedynie w kroku (2) akceptujemy, gdy obie maszyny zaakceptowały. Ponieważ może to się stać w różnych krokach czasowych, w momencie, gdy jedna z maszyn zaakceptuje, kończymy jej symulację i symulujemy tylko drugą, aż do momentu, gdy zaakceptuje (o ile to nastąpi).
</div></div>
</div></div>


Linia 190: Linia 190:
Zatem własność Posta zachodzi dla tej listy.
Zatem własność Posta zachodzi dla tej listy.


'''(Ad. 2)''' Dany ciąg nie ma własności Posta. bez względu na kolejność indeksów pierwsze ze słów zawsze jest postaci <math>\displaystyle a^k</math> a drugi <math>\displaystyle b^j</math> dla pewnych <math>\displaystyle k,j>0</math>. Ale zawsze <math>\displaystyle a^k \neq b^j</math> czyli własność Posta nie może zachodzić.
'''(Ad. 2)''' Dany ciąg nie ma własności Posta. Bez względu na kolejność indeksów pierwsze ze słów zawsze jest postaci <math>\displaystyle a^k</math>, a drugie <math>\displaystyle b^j</math>, dla pewnych <math>\displaystyle k,j>0</math>. Ale zawsze <math>\displaystyle a^k \neq b^j</math>, czyli własność Posta nie może zachodzić.


'''(Ad. 3)''' Rozważmy ciąg indeksów <math>\displaystyle (4,2,3,2,3,1,1)</math>.
'''(Ad. 3)''' Rozważmy ciąg indeksów <math>\displaystyle (4,2,3,2,3,1,1)</math>.
Zestawiając zadane pary słów w tej kolejności otrzymujemy:
Zestawiając zadane pary słów w tej kolejności, otrzymujemy:
<center><math>\displaystyle  
<center><math>\displaystyle  
\left [\begin{array} {c} aa\\a\end{array} \right] \left [
\left [\begin{array} {c} aa\\a\end{array} \right] \left [
Linia 218: Linia 218:


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">   
Rozważ dwa przypadki, zależnie od tego czy lista zawiera tylko pary słów postaci <math>\displaystyle (a^k,a^j)</math>, gdzie <math>\displaystyle k>j</math> (lub tylko <math>\displaystyle k<j</math>) czy też jeszcze jakieś inne pary słów.
Rozważ dwa przypadki, zależnie od tego, czy lista zawiera tylko pary słów postaci <math>\displaystyle (a^k,a^j)</math>, gdzie <math>\displaystyle k>j</math> (lub tylko <math>\displaystyle k<j</math>), czy też jeszcze jakieś inne pary słów.
</div></div>
</div></div>


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">   
Rozważmy listę par słów <math>\displaystyle (u_1,v_1),\dots, (u_n,v_n)</math> nad alfabetem
Rozważmy listę par słów <math>\displaystyle (u_1,v_1),\dots, (u_n,v_n)</math> nad alfabetem
<math>\displaystyle \mathcal{A}</math>. Przedstawimy algorytm sprawdzający czy lista ma
<math>\displaystyle \mathcal{A}</math>. Przedstawimy algorytm sprawdzający, czy lista ma
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 <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
# 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 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 (u_i,v_i)=(1^k,1^l)\quad , \quad (u_j,v_j)=(1^p,1^q) </math></center>
<center><math>\displaystyle (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. Uzasadnienie jest następujące. Biorąc ciąg:
przy czym <math>\displaystyle k<l</math> i <math>\displaystyle p>q</math>. W tej sytuacji zachodzi własność Posta. Uzasadnienie jest następujące. Biorąc ciąg:
Linia 238: Linia 238:
<center><math>\displaystyle \begin{array} {c c c} (\underbrace{i\;,\; \dots\;,\;i}&,&\underbrace{j\;,\;\dots\;,\;j})\\ {\displaystyle p-q \mbox{ razy}\displaystyle && {\displaystyle l-k \mbox{ razy}\displaystyle \end{array}</math></center>
<center><math>\displaystyle \begin{array} {c c c} (\underbrace{i\;,\; \dots\;,\;i}&,&\underbrace{j\;,\;\dots\;,\;j})\\ {\displaystyle p-q \mbox{ razy}\displaystyle && {\displaystyle l-k \mbox{ razy}\displaystyle \end{array}</math></center>


Otrzymujemy słowa:
otrzymujemy słowa:
<center><math>\displaystyle  
<center><math>\displaystyle  
\left [ \begin{array} {c} u_1\\ v_1 \end{array} \right ]^{p-q} \left [
\left [ \begin{array} {c} u_1\\ v_1 \end{array} \right ]^{p-q} \left [
Linia 256: Linia 256:
</math></center>
</math></center>


Dla danej listy, można rostrzygnąć w czasie wielomianowym który z przypadków (1), (2), (3) zachodzi. Otrzymaliśmy rostrzygalność problemu Posta dla tej sytuacji.
Dla danej listy, można rostrzygnąć w czasie wielomianowym, który z przypadków (1), (2), (3) zachodzi. Otrzymaliśmy rozstrzygalność problemu Posta dla tej sytuacji.
</div></div>
</div></div>


Linia 265: Linia 265:
<math>\displaystyle \mathcal{MT}</math> akceptującej język:
<math>\displaystyle \mathcal{MT}</math> akceptującej język:
<center><math>\displaystyle  
<center><math>\displaystyle  
L_1=\left\{www\: : \: w\in \left\{\circ,\bullet,\star\right\}^*\right\}
L_1=\left\{www\: : \: w\in \left\{\circ,\bullet,\star\right\}^*\right\}.
</math></center>
</math></center>


Zmodyfikuj, ewentualnie, tę konstrukcję <math>\displaystyle \mathcal{MT}</math> aby udowodnić <math>\displaystyle L_1 \in  </math> '''P''' .
Zmodyfikuj, ewentualnie, tę konstrukcję <math>\displaystyle \mathcal{MT}</math>, aby udowodnić <math>\displaystyle L_1 \in  </math> '''P''' .
}}
}}


Linia 275: Linia 275:
<math>\displaystyle \mathcal{NMT}</math> akceptującej język:
<math>\displaystyle \mathcal{NMT}</math> akceptującej język:
<center><math>\displaystyle  
<center><math>\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\}
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\}.
</math></center>
</math></center>


Linia 283: Linia 283:
''Podpowiedź:'' wykorzystaj konstrukcję z wyrocznią. Dla słowa wejściowego <math>\displaystyle w</math>
''Podpowiedź:'' wykorzystaj konstrukcję z wyrocznią. Dla słowa wejściowego <math>\displaystyle w</math>
przeprowadź weryfikację w trzech
przeprowadź weryfikację w trzech
etapach: konstrukcja słów <math>\displaystyle w_1, \dots ,w_n</math> gdzie <math>\displaystyle n< |w|</math> (wyrocznia), sklejanie,
etapach: konstrukcja słów <math>\displaystyle w_1, \dots ,w_n</math>, gdzie <math>\displaystyle n< |w|</math> (wyrocznia), sklejanie, weryfikacja, czy <math>\displaystyle w=w_1w_1 w_2 w_2 \dots w_n w_n</math>.
weryfikacja czy <math>\displaystyle w=w_1w_1 w_2 w_2 \dots w_n w_n</math>.
}}
}}


{{cwiczenie|11||
{{cwiczenie|11||
Uzasadnij, że jeśli funkcja <math>\displaystyle s(n)</math> jest konstruowalna pamięciowo to obliczenie <math>\displaystyle d_1 \mapsto^* d_2</math> z definicji
Uzasadnij, że jeśli funkcja <math>\displaystyle s(n)</math> jest konstruowalna pamięciowo, to obliczenie <math>\displaystyle d_1 \mapsto^* d_2</math> z definicji
konstruowalności pamięciowej (tzn. <math>\displaystyle d_1=\sharp s_0 1^n \sharp</math>,
konstruowalności pamięciowej (tzn. <math>\displaystyle d_1=\sharp s_0 1^n \sharp</math>,
<math>\displaystyle d_2=\sharp s_1 1^{s(n)} w \sharp</math>) następuję w conajwyżej <math>\displaystyle c 2^{s(n)}</math> krokach gdzie <math>\displaystyle c</math> jest pewną
<math>\displaystyle d_2=\sharp s_1 1^{s(n)} w \sharp</math>) następuje w co najwyżej <math>\displaystyle c 2^{s(n)}</math> krokach, gdzie <math>\displaystyle c</math> jest pewną
stałą niezależną od <math>\displaystyle n</math>.<br>
stałą niezależną od <math>\displaystyle n</math>.<br>
''Podpowiedź:'' przeanalizuj ilość możliwych konfiguracji.
''Podpowiedź:'' przeanalizuj ilość możliwych konfiguracji.
Linia 296: Linia 295:


{{cwiczenie|12||
{{cwiczenie|12||
Uzasadnij że funkcja <math>\displaystyle n^3</math> jest konstruowalna pamięciowo.
Uzasadnij, że funkcja <math>\displaystyle n^3</math> jest konstruowalna pamięciowo.
}}
}}


{{cwiczenie|13||
{{cwiczenie|13||
Skonstruuj maszynę Turinga akceptującą słowo <math>\displaystyle u=1^n</math> w dokładnie <math>\displaystyle n^2</math> krokach. Jak zmodyfikować konstrukcję maszyny aby
Skonstruuj maszynę Turinga akceptującą słowo <math>\displaystyle u=1^n</math> w dokładnie <math>\displaystyle n^2</math> krokach. Jak zmodyfikować konstrukcję maszyny, aby akceptowała słowo <math>\displaystyle u</math> dokładnie w <math>\displaystyle 2^n</math> krokach?
akceptowała słowo <math>\displaystyle u</math> dokładnie w <math>\displaystyle 2^n</math> krokach?
}}
}}


Linia 308: Linia 306:
rozpoznających języki zadane gramatykami:
rozpoznających języki zadane gramatykami:
# <math>\displaystyle S\rightarrow AbC</math>  ,  <math>\displaystyle A\rightarrow
# <math>\displaystyle S\rightarrow AbC</math>  ,  <math>\displaystyle A\rightarrow
aAb|\varepsilon</math>, <math>\displaystyle C\rightarrow bCc|\varepsilon</math>
aAb|1</math>, <math>\displaystyle C\rightarrow bCc|1</math>
# <math>\displaystyle S\rightarrow ABACA\quad , \quad A\rightarrow Aa|a \quad,\quad B\rightarrow bb|b\quad ,\quad C\rightarrow c|\varepsilon</math>
# <math>\displaystyle S\rightarrow ABACA\quad , \quad A\rightarrow Aa|a \quad,\quad B\rightarrow bb|b\quad ,\quad C\rightarrow c|1.</math>


}}
}}


{{cwiczenie|15||
{{cwiczenie|15||
Wykaż (podając ideę kontrukcji) że dla maszyn Turinga <math>\displaystyle TM_1</math>, <math>\displaystyle TM_2</math>
Wykaż (podając ideę kontrukcji), że dla maszyn Turinga <math>\displaystyle TM_1</math>, <math>\displaystyle TM_2</math>
istnieje maszyna Turinga <math>\displaystyle \mathcal{M}</math> rozpoznająca język:
istnieje maszyna Turinga <math>\displaystyle \mathcal{M}</math> rozpoznająca język:
<center><math>\displaystyle  L(
<center><math>\displaystyle  L(
\mathcal{M})=\left\{uv\; : \; u\in L(TM_1), v\in L(TM_2)\right\}</math></center>
\mathcal{M})=\left\{uv\; : \; u\in L(TM_1), v\in L(TM_2)\right\}.
</math></center>


}}
}}

Wersja z 19:57, 2 wrz 2006

Ćwiczenia 13

Ćwiczenie 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 i,j>1},

wykazując, że L NP .

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

Ćwiczenie 2

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

Wskazówka
Rozwiązanie

Ćwiczenie 3

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

Wskazówka
Rozwiązanie

Ćwiczenie 4

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

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

Ćwiczenie 5

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

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

Ćwiczenie 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 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 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
ZADANIA DOMOWE

Ćwiczenie 9

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 10

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 11

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ępuje w co najwyżej c2s(n) krokach, gdzie c jest pewną stałą niezależną od n.
Podpowiedź: przeanalizuj ilość możliwych konfiguracji.

Ćwiczenie 12

Uzasadnij, że funkcja n3 jest konstruowalna pamięciowo.

Ćwiczenie 13

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 14

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

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

Ćwiczenie 15

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 16

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 17

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 .