Pobierz prezentację
OpublikowałHipolit Kranc Został zmieniony 9 lat temu
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 315361013 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ć
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.