• Nie Znaleziono Wyników

Teoria obliczeń i złożoności Tadeusz Krasiński Rok akademicki 2020/2021

N/A
N/A
Protected

Academic year: 2021

Share "Teoria obliczeń i złożoności Tadeusz Krasiński Rok akademicki 2020/2021"

Copied!
7
0
0

Pełen tekst

(1)

Teoria obliczeń i złożoności Tadeusz Krasiński Rok akademicki 2020/2021

Warunki zaliczenia przedmiotu:

1. Egzamin ustny – student losuje 2 zagadnienia z listy. Warunkiem przystąpienia do egzaminu jest zaliczenie ćwiczeń.

2. Zaliczenie ćwiczeń na podstawie:

(a) Aktywności na ćwiczeniach, (b) Obecności na zajęciach,

(c) Ocena z ćwiczeń jest wypadkową powyższych dwóch czynników.

3. Ocena ogólna z przedmiotu jest średnią arytmetyczną ocen: z egzaminu i z ćwiczeń.

Wiadomości wstępne: ogólne (elementarne) wiadomości o zbiorach, funkcjach, logice.

Zalecane wiadomości z teoretycznych podstaw informatyki.

Literatura:

1. Maszynopis wykładu: moja wydziałowa strona internetowa www.math.uni.lodz.pl/~krasinsk , katalog: TeoriaObliczenZlozonosci20-21:

Lekcja1,2,…

2. Rękopis wykładu z wcześniejszych lat: moja wydziałowa strona internetowa www.math.uni.lodz.pl/~krasinsk , katalog: TeoriaObliczenZlozonosci20-21:

TOiZ2015Część1,2,3.

3. Mój Podręcznik: „Automaty i języki formalne” moja wydziałowa strona internetowa www.math.uni.lodz.pl/~krasinsk , katalog: zlozonosc19-20, plik: Automaty, Rozdziały 10-13. Materiał tych rozdziałów nie obejmuje wszystkich tematów wykładu.

Dodatkowa:

1. Sipser „Wprowadzenie do teorii obliczeń” PWN 2009,

2. Hopcroft, Motwani, Ullman „Wprowadzenie do teorii automatów, języków i obliczeń”

PWN.

3. Papadimitrou „Złożoność obliczeniowa” Helion.

4. Inne podręczniki w języku angielskim (na prośbę mogę udostępnić wersje elektroniczne).

Dyżur: poprzez Teams poniedziałki 12.00-13.00.

(2)

Wstęp

Informatyka, czyli komputery, rozwiązuje problemy. Nie wszystkie, ale takie dla których możemy napisać program komputerowy. Na przykład problemy:

1. Jak być szczęśliwym?

2. Jak zarobić szybko 1 mln dolarów?

nie są problemami komputerowymi. Z kolei problemy:

1. Dodawanie, mnożenie liczb,

2. Znalezienie drogi Hamiltona w grafie są problemami komputerowymi. Ale o problemie:

1. Dla danego programu komputerowego i danych wejściowych rozstrzygnąć czy program ten „zapętli się” (nie da odpowiedzi) dla tych danych wejściowych

trudno powiedzieć czy jest komputerowy czy nie (czy istnieje algorytm który rozwiązywałby ten problem na podstawie którego moglibyśmy napisać program komputerowy). To ostatnie zadanie wymaga precyzyjnej definicji co to jest problem. Z ogólnego (intuicyjnego) punktu widzenia problem to funkcja

Przykłady:

1. A = {pary liczb}= {(1,2), (3,7),…}, B={liczby}.

2. A = {grafy}, B={Tak, Nie }

(3)

3. Problem stopu A= {(P

1

,D

1

),… - pary(program komputerowy, dane wejściowe)}, B={Tak, Nie } lub {1,0}

Ten ostatni problem wiąże się z pojęciem algorytmu. Mianowicie w informatyce interesują nas problemy dla których możemy napisać program kpmputerowy. Jednak może zdarzyć się, że na pewnych danych wejściowych albo program „zapętli się” albo wynik nie jest określony np. 2/0. Zatem najważniejsze dla informatyki są problemy dla których możemy napisać program komputerowy bez tych wad. Są to problemy które mają „algorytm” rozwiązania, rozumiany na razie intuicyjnie jako:

1. Skończony ciąg instrukcji,

2. Dla dowolnych danych wejściowych (liczb, grafów, równań, zbiorów) jest ściśle określona (zdeterminowana) kolejność wykonywania instrukcji,

3. Każda instrukcja musi być wykonywalna,

4. Dla dowolnych danych wejściowych liczba wykonywanych instrukcji jest skończona, 5. Zawsze otrzymujemy wynik.

Jednak do wyróżnienia takich problemów potrzebna nam jest precyzyjniejsza definicja algorytmu, a nie taka ogólna, powyższa. Wynika to z faktu takiego: jeśli jakiś problem ma „algorytm”

rozwiązania, to podajemy kroki tego algorytmu; jeśli problem nie ma algorytmu rozwiązania, to nie wiadomo jak to wykazać bez precyzyjnej definicji algorytmu.

Analiza warunków, które powinny spełniać „algorytmy” doprowadziła Alana Turinga w 1936 roku do precyzyjnej definicji algorytmu. Jest to deterministyczna właściwa maszyna Turinga. W tamtych czasach nie było jeszcze komputerów, ale logicy matematyczni zajmowali się problemem obliczalności funkcji, liczb itp. Po pojawieniu się komputerów wymyślona przez logików teoria obliczalności idealnie pasowała do teorii komputerów.

Informacje o Alanie Turingu (1912-1954):

1. Przed wojną otrzymał ważne wyniki dotyczące obliczalności.

2. W czasie wojny kierował zespołem rozszyfrowującym szyfr niemiecki Enigma (przed wojną wcześniejsze wersje Enigmy rozszyfrowali Polacy i w czasie wojny przekazali tę wiedzę Francuzom i Anglikom.

3. Film fabularny „Gra tajemnic” biograficzny o jego udziale w rozszyfrowaniu Enigmy.

4. Biografia po polsku „Alan Turing enigma” A. Hodges

(4)

5. Popełnił samobójstwo w 1954 roku( było to związane z jego homoseksualizmem).

Na wykładzie omówimy teoretyczne podstawy informatyki, filozofię informatyki. Czy są granice informatyki czyli granice możliwości komputerów. Główną rolę w tych tematach będzie odgrywała maszyna Turinga, którą przyjmiemy jako model komputera. Omówimy następujące tematy:

1. Pojęcie maszyny Turinga.

2. Definicja algorytmu.

3. Czy istnieją problemy, które nie maja algorytmu rozwiązania?

4. W klasie problemów, które mają algorytm rozwiązania wyróżnimy te które mają „dobrą”

złożoność obliczeniową, tzn. taką, że są „praktycznie” rozwiązywane prze współczesne komputery (będzie to tzw. złożoność obliczeniowa wielomianowa).

5. Omówimy miarę złożoności ciągów (skończonych) binarnych i w konsekwencji określimy

słowa losowe i kompresowalne.

(5)

I. Maszyny Turinga i definicja algorytmu

Języki formalne.

Informatyka rozważa problemy różnych dziedzin i z różnymi danymi wejściowymi (z teorii liczb, kombinatoryki, teorii grafów, inżynierii, kryptografii, z baz danych itp.). Aby w naszych rozważaniach teoretycznych ujednolicić ujęcie problemów będziemy je przedstawiać w postaci języków formalnych, tzn. w postaci „zbioru słów z pewnego alfabetu”. Jest tak w rzeczywistości w informatyce, gdyż każdy problem w końcu jest (w języku maszynowym) zapisany w postaci binarnej (za pomocą 2 symboli 1 i 0).Zatem zamiast mówić o problemach będziemy mówic o językach formalnych (za chwilę podamy precyzyjną definicję). Oznacza to że dla nas mamy

Aby lepiej zrozumieć powyższą równość zaczniemy od podania definicji języka formalnego.

Do tego pojęcia prowadzą następujące definicje:

1. Alfabet. Oznaczamy przez Σ (grecka litera sigma). Jest to dowolny zbiór skończony.

Jego elementy nazywamy symbolami. Przykłady: Σ={0,1}, Σ={0,1,2,…,9}, Σ={a,b}, zbiór liczb naturalnych N={1,2,…} nie jest alfabetem (bo nie jest skończony).

2. Słowo –dowolny skończony ciąg elementów z pewnego alfabetu Σ . Przykłady: 0100, 11111, 0 słowa nad alfabetem Σ={0,1}. Oznaczenie słowa pustego Λ (grecka duża litera lambda). 23ab90 słowo nad alfabetem Σ={0,1,…,9,a,b}.

3. Σ

*

- zbiór wszystkich słów nad alfabetem Σ. Przykład: Dla Σ={0,1} mamy Σ

*

= { Λ, 0,1,00,01,10,11,000,…}.

4. Długość słowa A∊ Σ

*

. Oznaczamy ją |A|. Jest to liczba symboli w słowie A. Przykład:

Dla Σ={a,b} mamy |aabba|=5, |Λ|=0, |a

2

b

3

|=|aabbb|=5.

5. Język formalny –dowolny zbiór słów z pewnego alfabetu Σ. Języki formalne oznaczamy przez L. Zatem L⊂ Σ

*

. Inaczej mówiąc, język formalny to dowolny zbiór słów z zadanego alfabetu Σ. Zatem podanie języka formalnego to wskazanie alfabetu oraz wyróżnienie (w dowolny sposób) pewnych słów nad tym alfabetem.

Przykłady.

1. Liczby naturalne N={0,1,2,3,…,10,11,12,…} w zapisie dziesiętnym to język formalny nad alfabetem Σ={0,1,…,9}. Liczby traktujemy jako słowa. Zatem 001 nie jest słowem z tego języka.

2. Gdy liczby naturalne zapiszemy w postaci binarnej N= {0,1,10,11,100,101,…}

to będzie to język formalny nad Σ={0,1}.

3. DODAWANIE = {a

n

b

m

c

n+m

: n,m∊N} ⊂{a,b,c}

*

.

4. PIERWSZE =. {0

p

: p – liczba pierwsza} = {00,000,00000,0000000,…} ⊂ {0}

*

.

(6)

5. GRAFYSKIEROWANE⊂{v,o,→}

*

.

6. PROBLEMHAMILTONA ⊂{v,o,→}

*

= {grafy skierowane (lub nieskierowane), w których istnieje droga Hamiltona}.

Z tych przykładów wynika, że z teoretycznego punktu każdy problem (z informatyki) można zapisać za pomocą pewnego języka formalnego (nad odpowiednim alfabetem). Zatem rozwiązywanie problemów informatycznych możemy utożsamić z rozpoznawaniem słów określonego języka. Na przykład, urządzenie (komputer, maszyna licząca) która potrafi dodawać musi mieć taką sama zdolność co maszyna rozpoznająca język DODAWANIE.

Operacje na językach formalnych. Niech L

1

, L

2

będą językami nad tym samym alfabetem Σ.

Definiujemy:

1. Dodawanie języków L

1

+L

2

. Jest to suma języków jako zbiorów. L

1

+L

2

= L

1

L

2

. Przykład. L

1

= {a,aa,aaa,…}, L

2

= { to L

1

+L

2

={Λ, a,b,aa,aaa,…}.

2. Składanie języków języków L

1

∘L

2

. Jest to L

1

∘L

2

= {AB: A∊L

1

, B∊L

2

}. Przykład. L

1

= {a,bb}, L

2

= {Λ,b}, to L

1

∘L

2

={a,ab,bb,bbb}.

3. Potęga języka L

i

, i=0,1,2,3,… Definicja indukcyjna L

0

= { Λ}, L

1

=L, L

2

=L∘L, L

3

=L∘L∘L , …

4. Domknięcie języka L

*.

. L

*

= L

0

+ L

1

+ L

2

+ …

5. Przecięcie (część wspólna) języków L

1

∩L

2

. 6. Dopełnienie języka L’ = Σ

*

-L.

Definicja maszyny Turinga.

Wspomnieliśmy, że uznajemy maszynę Turinga jako model komputera. Wszystkie teoretyczne

badania możliwości komputerów będziemy przeprowadzać na tym modelu. Każda maszyna

Turinga rozpoznaje (akceptuje) pewien język formalny. Zaczniemy od intuicyjnego

przedstawienia Maszyny Turinga. Jest to nieskończona taśma podzielona na komórki, po

której porusza się głowica, która czyta symbole w komórkach, zmienia je i zmienia swój stan.

(7)

Każda Maszyna Turinga M ma określony (skończony) zestaw ruchów (instrukcji) R

1

, R

2

, …,R

n

. Każdy pojedynczy ruch R

i

ma postać:

Ten ruch powoduje zmianę na taśmie i w głowicy

(podobnie dla ruchu w lewo). Ruch, i tym samym całą maszynę, reprezentujemy za pomocą grafu

Słowo wejściowe A jest akceptowane przez Maszynę Turinga M, gdy w trakcie swoich

ruchów M, czyli głowica M, osiągnie wyróżniony stan, zwany stanem końcowym. Zbiór

wszystkich słów akceptowanych przez M oznaczamy przez L(M). Zbiór wszystkich języków

akceptowanych przez różne maszyny Turinga oznaczamy przez JRP – języki rekursywnie

przeliczalne.

Cytaty

Powiązane dokumenty

 czyta linię znaków z klawiatury (strumienia stdin) i zapisuje w tablicy buf;. wczytywanie jest kończone po napotkaniu '\n', który zastępowany jest

 pobiera n elementów o rozmiarze s bajtów każdy, z pliku określanego przez fp i umieszcza odczytane dane w obszarze pamięci wskazywanym przez p.  zwraca liczbę

 zastąp wszystkie ujemne elementy tablicy wartością zero;. wyświetl elementy tablicy z podziałem na wiersze i kolumny wyświetl elementy tablicy z podziałem na wiersze

 wyświetla znak na ekranie (wpisuje do strumienia stdin) int fputc(int znak, FILE *fp);. int

 zapisuje n elementów o rozmiarze s bajtów każdy, do pliku określanego przez fp, biorąc dane z obszaru pamięci wskazywanego przez p.  zwraca liczbę faktycznie

Przykład języka, który nie jest rekursywnie przeliczalny..

Czy istnieje taki k-elementowy zbiór S wierzchołków grafu G, że każdy z pozostałych wierzchołków jest osiągalny z jakiegoś wierzchołka należącego do S drogą składającą się

!!To są zadania dla studentów, których nazwisko zawiera nieparzystą liczbę liter!!.