Języki, automaty i obliczenia/Ćwiczenia 13: Złożoność obliczeniowa.: Różnice pomiędzy wersjami
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 | 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 | 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 | 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 ( | 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 | # 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ę | '''(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 | '''(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. | '''(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ść | <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: | |||
<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 | 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>) | <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| | 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| | # <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
wykazując, że NP .
Uzasadnij, że takżeĆwiczenie 2
Uzasadnij, że funkcja jest konstruowalna pamięciowo.
Ćwiczenie 3
Uzasadnij, że funkcja jest konstruowalna pamięciowo.
Ćwiczenie 4
Skonstruuj maszynę Turinga rozpoznającą język zadany gramatyką:
Ćwiczenie 5
Przedstaw ideę działania maszyny Turinga rozpoznającej język
Ć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 , istnieje maszyna o własności:
Ćwiczenie 7
Czy któraś z poniższych list słów ma własność Posta?
Ć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. ) problem Posta jest problemem rozstrzygalnym.
Ćwiczenie 9
Zadanie domowe 2.1 do wykładu 12 polegało na konstrukcji maszyny Turinga akceptującej język:
Zmodyfikuj, ewentualnie, tę konstrukcję , aby udowodnić P .
Ćwiczenie 10
Zadanie domowe 2.2 do wykładu 12 polegało na konstrukcji niedeterministycznej maszyny Turinga akceptującej język:
Zmodyfikuj, ewentualnie, tę konstrukcję aby udowodnić, że
NP .
Podpowiedź: wykorzystaj konstrukcję z wyrocznią. Dla słowa wejściowego przeprowadź weryfikację w trzech etapach: konstrukcja słów , gdzie (wyrocznia), sklejanie, weryfikacja, czy .
Ćwiczenie 11
Uzasadnij, że jeśli funkcja jest konstruowalna pamięciowo, to obliczenie z definicji
konstruowalności pamięciowej (tzn. ,
) następuje w co najwyżej krokach, gdzie jest pewną
stałą niezależną od .
Podpowiedź: przeanalizuj ilość możliwych konfiguracji.
Ćwiczenie 12
Uzasadnij, że funkcja jest konstruowalna pamięciowo.
Ćwiczenie 13
Skonstruuj maszynę Turinga akceptującą słowo w dokładnie krokach. Jak zmodyfikować konstrukcję maszyny, aby akceptowała słowo dokładnie w krokach?
Ćwiczenie 14
Wypisz dokładnie wszystkie elementy składowe maszyn Turinga rozpoznających języki zadane gramatykami:
- , ,
Ćwiczenie 15
Wykaż (podając ideę kontrukcji), że dla maszyn Turinga , istnieje maszyna Turinga rozpoznająca język:
Ćwiczenie 16
Czy któraś z poniższych list słów ma własność Posta?
Ć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 , jest postaci .