Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Obliczalność czyli co da się policzyć i jak Nieobliczalność Model obliczeń :maszyna Turinga dr Kamila Barylska.

Podobne prezentacje


Prezentacja na temat: "Obliczalność czyli co da się policzyć i jak Nieobliczalność Model obliczeń :maszyna Turinga dr Kamila Barylska."— Zapis prezentacji:

1 Obliczalność czyli co da się policzyć i jak Nieobliczalność Model obliczeń :maszyna Turinga
dr Kamila Barylska

2 Wykład 1: Obliczalność. Maszyna licznikowa.
Plan zajęć Wykład 1: Obliczalność. Maszyna licznikowa. Ćwiczenia 1: Programy na maszynę licznikową. Wykład 2: Maszyna Turinga. Problemy, których nie da się rozwiązać. Ćwiczenia 2: Programy na maszynę Turinga. Wykład 3: Liczące sieci Petriego. Ćwiczenia 3: Konstruowanie sieci liczących.

3 Problemy nieobliczalne
Naukowcy badający pojęcie obliczalności: Kurt Gödel, Emil Post i Alan Turing dostrzegli problemy, których „nie da się rozwiązać” a dokładniej: „nie sposób rozwiązać algorytmicznie, za pomocą algorytmów dla maszyn cyfrowych”. Takie właśnie problemy nazywamy problemami nieobliczalnymi.

4 Problem stopu Jednym z najważniejszych zagadnień nieobliczalnych jest tzw. problem stopu czyli pytanie: „Czy istnieje uniwersalny algorytm-wyrocznia, który analizując symboliczne zapisy innych algorytmów oraz ich dane wejściowe, byłby w stanie odpowiedzieć jednoznacznie, i to w każdym analizowanym przypadku, CZY DANY ALGORYTM dla podanych danych wejściowych ZATRZYMA SIĘ, czy też będzie przetwarzał dane w nieskończoność?”. Alan Turing udowodnił, że nie istnieje taki algorytm. Problem stopu jest jednym z najbardziej znanych problemów nieobliczalnych.

5 „Trudne” problemy obliczalne
Istnieje bardzo liczna grupa zagadnień, które mogą zostać rozwiązane, bo istnieją dla nich algorytmy, jednak w praktyce rozwiązanie tych problemów zajmuje astronomicznie dużo czasu. Czas potrzebny do wykonania algorytmu rośnie wykładniczo lub silniowo w stosunku do rozmiaru danych wejściowych.

6 „Trudne” problemy obliczalne – Algorytm Euklidesa
Problem (NWD) Dla danych dwóch liczb naturalnych a i b znaleźć największą liczbę naturalną c, która dzieli bez reszty liczbę a i dzieli bez reszty liczbę b. Rozwiązanie: Algorytm Euklidesa Wejście: a, b – liczby naturalne, których NWD poszukujemy Wyjście: NWD liczb a i b Lista kroków: K01: Dopóki a ≠ b wykonuj krok K02   K02: Jeśli a < b, to b := b – a w przeciwnym przypadku  a := a - b K03: Wypisz a K04: Zakończ

7 „Trudne” problemy obliczalne – Algorytm Euklidesa
Analiza algorytmu: Ile razy nasz algorytm wykona główną pętlę? Załóżmy, że dane wejściowe nie przekraczają 230. Superkomputer wykonuje jeden obrót pętli w czasie jednej dziesięciomiliardowej sekundy. To daje 315361013 obrotów pętli rocznie. Przyjmijmy wariant pesymistyczny: a=1030, b=1. Pamiętając, że od Wielkiego Wybuchu minęło niespełna 14 miliardów lat, gdyby nasz komputer włączyć na początku Wszechświata i uruchomić tak napisany program na tych pesymistycznych danych… … do dziś wykonałby niespełna jedną dwudziestą niezbędnych obliczeń.

8 Q jest skończonym zbiorem stanów
Maszyna Turinga Maszyną Turinga nazywamy siódemkę uporządkowaną MT = (Q, , , , q0, qACC, qREJ ), gdzie: Q jest skończonym zbiorem stanów  jest alfabetem wejściowym (nie zawierającym specjalnego symbolu pustego )  jest alfabetem taśmy ( oraz )  : Q ×   Q ×  × {L, R, S} jest funkcją przejścia q0 jest wyróżnionym stanem początkowym qACC jest wyróżnionym stanem akceptującym qREJ jest wyróżnionym stanem odrzucającym (qACC  qREJ )

9 Maszyna Turinga - mniej formalnie
pamięć nieskończona (obustronnie) głowica może poruszać się w prawo (R), lewo (L) lub stać w miejscu (S) q0 aktualny stan świadomości

10 Maszyna Turinga – działanie (obliczanie funkcji)
Wprowadzamy dane na taśmę (wszystkie pozostałe komórki pamięci są „wyblankowane”). f(x)=0

11 Maszyna Turinga – działanie (obliczanie funkcji)
1 Wprowadzamy dane na taśmę (wszystkie pozostałe komórki pamięci są „wyblankowane”). f(x)=0

12 Maszyna Turinga – działanie (obliczanie funkcji)
1 Wprowadzamy dane na taśmę (wszystkie pozostałe komórki pamięci są „wyblankowane”). f(x)=0

13 Maszyna Turinga – działanie (obliczanie funkcji)
1 Wprowadzamy dane na taśmę (wszystkie pozostałe komórki pamięci są „wyblankowane”). f(x)=0

14 Maszyna Turinga – działanie (obliczanie funkcji)
1 Wprowadzamy dane na taśmę (wszystkie pozostałe komórki pamięci są „wyblankowane”). Głowica wskazuje na początek danych wejściowych. f(x)=0

15 Maszyna Turinga – działanie (obliczanie funkcji)
1 Wprowadzamy dane na taśmę (wszystkie pozostałe komórki pamięci są „wyblankowane”). Głowica wskazuje na początek danych wejściowych. Wykonujemy instrukcje programu. f(x)=0

16 Maszyna Turinga – działanie (obliczanie funkcji)
Wprowadzamy dane na taśmę (wszystkie pozostałe komórki pamięci są „wyblankowane”). Głowica wskazuje na początek danych wejściowych. Wykonujemy instrukcje programu. Na taśmie pozostaje tylko wynik. f(x)=0

17 Maszyna Turinga – działanie (obliczanie funkcji)
Wprowadzamy dane na taśmę (wszystkie pozostałe komórki pamięci są „wyblankowane”). Głowica wskazuje na początek danych wejściowych. Wykonujemy instrukcje programu. Na taśmie pozostaje tylko wynik. Głowica wskazuje na początek wyniku. f(x)=0

18 Maszyna Turinga – działanie (akceptowanie słowa)
Wprowadzamy dane na taśmę (wszystkie pozostałe komórki pamięci są „wyblankowane”). PALINDROMY

19 Maszyna Turinga – działanie (akceptowanie słowa)
a b Wprowadzamy dane na taśmę (wszystkie pozostałe komórki pamięci są „wyblankowane”). PALINDROMY

20 Maszyna Turinga – działanie (akceptowanie słowa)
a b Wprowadzamy dane na taśmę (wszystkie pozostałe komórki pamięci są „wyblankowane”). Głowica wskazuje na początek danych wejściowych. PALINDROMY

21 Maszyna Turinga – działanie (akceptowanie słowa)
a b Wprowadzamy dane na taśmę (wszystkie pozostałe komórki pamięci są „wyblankowane”). Głowica wskazuje na początek danych wejściowych. Wykonujemy instrukcje programu. PALINDROMY

22 Maszyna Turinga – działanie (akceptowanie słowa)
Wprowadzamy dane na taśmę (wszystkie pozostałe komórki pamięci są „wyblankowane”). Głowica wskazuje na początek danych wejściowych. Wykonujemy instrukcje programu. Taśma pozostaje pusta, zaś maszyna znajduje się w stanie akceptującym, gdy słowo należy do języka. PALINDROMY

23 Maszyna Turinga – działanie (akceptowanie słowa)
Wprowadzamy dane na taśmę (wszystkie pozostałe komórki pamięci są „wyblankowane”). Głowica wskazuje na początek danych wejściowych. Wykonujemy instrukcje programu. Taśma pozostaje pusta, zaś maszyna znajduje się w stanie akceptującym, gdy słowo należy do języka. Maszyna znajduje się w stanie odrzucającym, gdy słowo nie należy do języka. PALINDROMY

24 Problem stopu dla maszyny Turinga
Pytanie: Czy możliwe jest stworzenie narzędzia, które dla dowolnego opisu maszyny Turinga M podanego na wejściu potrafi rozstrzygnąć, czy maszyna ta akceptuje ustalone dane wejściowe x? Założenie: Potrafimy skonstruować maszynę Turinga MR rozstrzygająca powyższy problem: MR(M,x) = {akceptuj jeśli M akceptuje x {odrzucaj jeśli M nie akceptuje x

25 Problem stopu dla maszyny Turinga
Używając maszyny MR zdefiniujemy maszynę MO zwracającą wynik przeciwny niż maszyna MR MO(M,x) = {akceptuj jeśli MR odrzuca x {odrzucaj jeśli MR akceptuje x MO(M,x) = {akceptuj jeśli M nie akceptuje x {odrzucaj jeśli M akceptuje x Jak zachowa się maszyna MO na własnym kodzie? MO(MO,x) = {akceptuj jeśli MO nie akceptuje x {odrzucaj jeśli MO akceptuje x SPRZECZNOŚĆ!!! Nie da się skonstruować maszyny MR!

26 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R

27 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R q0

28 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q0

29 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q0

30 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q1

31 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q1

32 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q1

33 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q1

34 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q1

35 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q1

36 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q1

37 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q1

38 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q2

39 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q2

40 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q2

41 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q2

42 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q2

43 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q2

44 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q2

45 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q2

46 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q2

47 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 q2

48 Maszyna Turinga, która liczy funkcję f(x)=2x+1.
Przykład Maszyna Turinga, która liczy funkcję f(x)=2x+1. q0 0  qACC 1 S q0 1   q1 1 R q1 0   q1  0 R q1 1   q1  1 R q1    q2  1 L q2 0   q2  0 L q2 1   q2  1 L q2   qACC  R 1 qACC

49 Zadania Zadanie 1 Skonstruuj maszynę Turinga, która prawidłowo oblicza funkcję f(x) = 2x (kod argumentów – binarny; alfabet = {0,1}). Zadanie 2 Skonstruuj maszynę Turinga, która prawidłowo oblicza funkcję f(x) = x + 1 Zadanie 3 Skonstruuj maszynę Turinga, która prawidłowo oblicza poniższe funkcje (kod argumentów – unarny; alfabet = {1}) f(x) = 0 f(x) = x+1 f(x,y) = x f(x,y) = x+y .

50 Zadania Zadanie 4 Napisz program na maszynę Turinga, który zastępuje w dowolnym tekście zbudowanym z liter A, B, C i D wszystkie literki A literką C. Na przykład, z tekstu BACA ma powstać BCCC. Zadanie 5 Napisz program na maszynę Turinga, który przenosi pierwszą literkę wyrazu zbudowanego z liter A, B, C i D z początku na koniec. Na przykład, z tekstu DAB ma powstać ABD. Zadanie 6 Napisz program na maszynę Turinga, który zbada czy wczytane słowo jest palindromem. (Palindrom – słowo brzmiące tak samo czytane od lewej do prawej i od prawej do lewej.)

51 Zadania Zadania dodatkowe:
Skonstruuj maszynę Turinga, która prawidłowo oblicza funkcję f(x) = 0 (kod argumentów – binarny; alfabet = {0,1}). Napisz program na maszynę Turinga, który podwaja każdy bit wejściowej liczby binarnej. Na przykład, z liczby 101 powinniśmy otrzymać Napisz program na maszynę Turinga, który odwróci kolejność bitów dowolnej liczby binarnej, tzn. z liczby ma powstać


Pobierz ppt "Obliczalność czyli co da się policzyć i jak Nieobliczalność Model obliczeń :maszyna Turinga dr Kamila Barylska."

Podobne prezentacje


Reklamy Google