Zadania łatwe i trudne Złożoność obliczeniowa Zadania łatwe Sortowanie Szukanie pierwiastków wielomianów Szukanie maksimum funkcji ciągłej i różniczkowalnej Mnożenie macierzy Zadania trudne Szukanie maksimum funkcji nieciągłej, nieróżniczkowalnej, zaszumionej, zmieniającej się w czasie Szukanie najkrótszej postaci danej formuły logicznej Rozkładanie liczb na czynniki pierwsze Weryfikacja poprawności programu Rodzaje modeli W celu uniezależnienia się od typu komputera służącego do realizowania obliczeń, musimy się posłużyć ogólnym abstrakcyjnym modelem obliczeń. Model taki powinien być łatwo interpretowany w sensie właściwości obliczeniowych w odniesieniu do komputerów rzeczywistych. Ideowy teoretyczny Obrazuje ideę działania, ania, reguły y pracy Dowodzi poprawności rozważań,, możliwo liwości teoretycznych zbudowania danego urządzenia Fizyczny realny Pozwala na bezpośredni rednią obserwację (czynnościow ciową) Obrazuje zasadę mechaniczną (elektryczną), która może e być wykorzystana w urządzeniu rzeczywistym Modele ideowe komputera Modele ideowe programowania Abstrakcyjne Rachunek binarny, kodowanie liczb (moduł-znak prosty, moduł-znak odwrotny) Funkcje rekurencyjne Bliskie realizacji Funkcje boolowskie Realizacje funkcji boolowskich za pomocą bramek logicznych Abstrakcyjne Maszyny Turinga Służyły y do rozważań teoretycznych, można wykorzystać jako ideowy model programowania Bliskie realizacji PMC Przykładowa Maszyna Cyfrowa Służy y jako przykład koncepcji programowania niskopoziomowego, można wykorzystać jako model programowania w języku j wewnętrznym komputera
Budowa: Nieskończona taśma z kratkami, w których można napisać zero lub jedynkę Głowica znajdująca się nad jedną kratką taśmy, która może: Przesunąć taśmę w lewo (L) lub prawo (P) Napisać jeden (1) lub zero (0) Zmienić swój j stan wewnętrzny zgodnie z instrukcją i znakiem zapisanym na taśmie w kratce pod głowicg owicą Instrukcje Cztery znaki: Stan głowicyg Znak na taśmie w kratce pod głowicg owicą Czynność wykonana przez głowicg owicę (L,P,1,0 i S stop) Nowy stan, który ma mieć głowica po wykonaniu czynności ci Przykłady 5,0,1,9 jeżeli eli głowica g jest w stanie 5 i z taśmy odczytuje 0 to ma napisać jedynkę (zacierając c poprzedni znak) i zmienić stan na 9 3,1,P,3 jeżeli eli głowica g jest w stanie 3 i z taśmy odczytuje 1 to ma przesunąć taśmę w prawo o jedną kratkę i zmienić stan na 3 Zadanie Dane: Taśma ze skończon czoną liczbą kratek z jedynkami i pozostałymi kratkami wypełnionymi zerami Początkowe położenie głowicy g na taśmie Wynik: Zatrzymanie maszyny Taśma z określon loną konfigurację jedynek zależną od danych początkowych Położenie głowicy g w określonym miejscu Programowanie Spisanie instrukcji takich, aby po uruchomieniu maszyny z początkowym stanem (np( np.. 1) w określonym miejscu taśmy zawierającej określon loną (w warunkach zadania) konfigurację skończonej liczby jedynek, maszyna zatrzymała a się zostawiając c na taśmie odpowiednią konfigurację skończonej liczby jedynek i głowicg owicę w odpowiednim miejscu Przykład zadania Dane Taśma z dwoma nieprzerwanymi, skończonymi ciągami jedynek oddzielonymi jedną kratką z zerem Głowica jest ustawiona na pierwszej jedynce pierwszego ciągu (pozostałe e jedynki sąs na prawo od głowicy): g Wynik Taśma z jednym nieprzerwanym ciągiem jedynek mający tyle samo jedynek ile było o ich na początku (położenie głowicy nieistotne) Rozwiązanie zanie zadania Program 1,1,L,1 1,0,1,2 2,1,L,2 2,0,R,3 3,1,0,3 3,0,S,0
Inne zadania Wyszukiwanie Na taśmie jedna jedynka, głowica g na jakimś zerze Wynik: głowica g na jedynce Arytmetyka Ciąg n+1 jedynek oznacza liczbę n Dwa ciągi reprezentujące liczby m i n,, zostawić jeden ciąg g reprezentujący m+n, mn, m/n, itp Weryfikacja poprawności programu - stworzony przez Alana Turinga abstrakcyjny model komputera służący do wykonywania algorytmów. powstała jako notacja do wyrażania algorytmów i służyła (głównie logikom) do określenia, jakie problemy są możliwe do algorytmicznego rozwiązania. Weryfikacja poprawności programu Weryfikacja poprawności programu Problem jest rozwiązalny na komputerze, jeśli da się zdefiniować rozwiązującą go maszynę Turinga. Maszyny Turinga częsta używane są do udowadniania nierozstrzygalności różnych problemów. Czas, jak i pamięć zużyta podczas obliczenia maszyny Turinga nie różnią się bardzo od zasobów zużywanych podczas wykonania algorytmów na rzeczywistych komputerach. Wyniki teorii złożoności mówiące o obliczeniach na maszynach Turinga pozostają w ścisłym związku z rzeczywistymi problemami informatyki i praktycznymi implementacjami algorytmów. nieograniczona taśma podzielona na komórki, w których są zapisane zrozumiałe dla maszyny symbole głowica, która może się przesuwać po taśmie oraz odczytywać i zapisywać na niej symbole Mechanizm sterujący, który może być w różnych stanach (ale skończenie wielu), który decyduje o działaniu maszyny. taśma Nieskończona taśma jest odpowiednikiem współczesnej pamięci komputera. Taśma dzieli się na komórki, w których umieszczone zostały symbole, czyli po prostu znaki przetwarzane przez maszynę Turinga. Symbole te stanowią odpowiednik danych wejściowych.
taśma odczytuje te dane z kolejnych komórek i przetwarza na inne symbole, czyli dane wyjściowe. Wyniki obliczeń również są zapisywane w komórkach taśmy. Najczęściej rozważa się jedynie symbole 0, 1 oraz tzw. znak pusty - czyli zawartość komórki, która nie zawiera żadnej danej do przetworzenia. głowica zapisująco-odczytująca Głowica zapisująco-odczytująca odpowiada funkcjonalnie urządzeniom wejścia/wyjścia współczesnych komputerów lub układom odczytu i zapisu pamięci. Głowica zawsze znajduje się nad jedną z komórek taśmy (przed rozpoczęciem pracy jest ustawiana nad komórką taśmy zawierającą pierwszy symbol do przetworzenia) głowica zapisująco-odczytująca Głowica: odczytuje zawartość komórki oraz zapisuje do niej inny symbol wykonuje ruchy w prawo i w lewo do sąsiednich komórek na taśmie. W ten sposób może się ona przemieścić do dowolnie wybranej komórki taśmy. układ sterowania Odpowiednikiem układu sterującego jest procesor komputera. Układ sterujący: odczytuje za pomocą głowicy symbole z komórek taśmy oraz przesyła do głowicy symbole do zapisu w komórkach. nakazuje on głowicy przemieścić się do sąsiedniej komórki w lewo lub w prawo. Stany układu sterowania Stany układu sterowania Podstawą działania maszyny Turinga są stany układu sterowania. Stan układu sterowania określa jednoznacznie jaką operację wykona, jak zareaguje maszyna Turinga, gdy odczyta z taśmy określony symbol. Operacje wykonywane przez układ sterowania zależą od dwóch czynników: Symbolu odczytanego z komórki na taśmie. Bieżącego stanu układu sterującego. Stanybędziemy określać kolejnymi nazwami: q 0, q 1, q 2,...,q n, gdzie q 0 jest stanem początkowym, w którym znajduje się maszyna Turinga przed rozpoczęciem przetwarzania symboli na taśmie.
W zależności od obserwowanego symbolu przez głowicę taśmy oraz stanu sterowania skończonego, maszyna Turinga w pojedynczym ruchu: zmienia stan mechanizmu sterującego, wpisuje symbol w obserwowanej komórce taśmy, zastępując symbol tam wpisany, przesuwa głowicę o jedną komórkę w prawo lub w lewo., to siódemka: gdzie: Q Γ # definicja M = { Q, Γ,,#, δ, q, F} to skończony zbiór stanów maszyny. to skończony zbiór symboli wejściowych, które służą do reprezentacji wejścia maszyny i są zapisane na taśmie przed rozpoczęciem obliczenia. to skończony zbiór symboli taśmowych -są to wszystkie symbole jakie mogą się znajdować na taśmie. to symbol pusty - specjalny symbol taśmowy nie należący do symboli wejściowych. Symbol pusty będzie zawsze wypełniał prawie całą taśmę. 0 definicja, to siódemka: M = { Q,, Γ, #, δ, q, F} 0 gdzie: to funkcja przejścia. Jest to funkcja częściowa prowadząca z Q Γ w Q Gamma {, } Wartośćδ ( A, x) = ( B, y, K) oznacza, że maszyna będąca w δ stanie A i czytając symbol x z taśmy przejdzie do stanu B, zapisze symbol y na taśmie i przesunie głowicę o jedną komórkę w lewo ( K = ) lub w prawo ( K =. ) to stan początkowy w jakim znajduje się maszyna przed q 0 rozpoczęciem obliczenia. to zbiór stanów akceptujących będący podzbiorem Q. F Obliczenie maszyny kończy się kiedy osiągnięty zostanie któryś ze stanów F. Zastosowania maszyny Turinga Przetwarzacz: oblicza wartość funkcji - dane wejściowe to początkowy stan napisu na taśmie, a wynik jest końcowym stanem taśmy w momencie zatrzymania. Gdy maszyna nie zatrzyma się to funkcja nie jest określona dla tych danych (funkcja niezupełna). Zastosowania maszyny Turinga Zastosowania maszyny Turinga Akceptant: posiada 2 stany końcowe akceptuj i "odrzuć", ale może dać trzy odpowiedzi: akceptuj, odrzuć, "nie wiem". Akceptant rozstrzygacz: akceptant, który zatrzymuje się zawsze, tzn. daje dwie odpowiedzi - "akceptuj" lub "odrzuć". Generator języka: rozpoczyna pracę od pustej taśmy i zapisuje na taśmie słowa danego języka, dla którego został zaprojektowany.
- działanie - działanie Jak uruchomić formalnie zdefiniowaną maszynę Turinga? Trzeba odpowiednio przygotować taśmę -można rozważać różne reprezentacje wejścia, zakładamy, że taśma jest wypełniona symbolami pustymi # oprócz skończonego spójnego fragmentu, na którym znajduje się słowo wejściowe składające się z symboli wejściowych. Należy ustawić głowicę nad którąś z komórek taśmy - dla wygody będziemy ustawiać głowicę nad pierwszą komórką słowa wejściowego. Należy ustawić mechanizm sterujący na stan q 0 i uruchomić maszynę. Maszyna działa zgodnie z algorytmem δ zapisanym w funkcji jeśli będzie zmieniać swój stan, przesuwać głowicę i zmieniać zawartość taśmy. Tak będzie się działo dopóki nie nastąpi jeden z dwóch warunków: Maszyna znajdzie się w stanie akceptującym. Mówimy wtedy, że obliczenie zakończyło się akceptująco. Maszyna znajdując się w stanie A przeczyta z taśmy symbol x, a wartość funkcji częściowej δ ( A, x) nie będzie zdefiniowana. Mówimy wtedy, że obliczenie zakończyło się błędem. Może się również zdarzyć, że nigdy żaden z tych dwóch warunków nie nastąpi. W takim wypadku maszyna nie zakończy obliczenia. - reprezentacja Diagram przejść Działanie maszyny Turinga przedstawia się jako diagram przejść między stanami lub jako tabelę stanów. Zarówno dla tabeli stanów jak i grafu przejść wyróżnia się specyficzne stany będące odpowiednio stanem początkowym i stanem (bądź stanami ) końcowym, zwane też stanami biernymi. Zakłada się, że maszyna rozpoczyna swoje działanie od swego stanu początkowego na pierwszym od lewej niepustym kwadracie taśmy i postępuje krok po kroku zgodnie z narzuconym ruchem, zaś kończy działanie po osiągnięciu stanu końcowego. Diagram przejść jest grafem skierowanym, którego wierzchołki reprezentują stany. Krawędź prowadząca ze stanu s do stanu t nazywa się przejściem i etykietuje się ją kodem postaci: (a/b, kierunek) Gdzie: a i b są symbolami, kierunek określa ruch głowicy w prawo bądź w lewo. Część a etykiety jest wyzwalaczem przejścia, a część <b,kierunek> akcją. Diagram przejść Diagram przejść (a/b, kierunek) W czasie swego działania maszyna Turinga, kiedy znajdzie się w stanie s i odczytywanym symbolem będzie a to nastąpi wpisanie w to miejsce b i przesunięcie o jedno pole w kierunku kierunek.
Tabela stanów Tabela stanów Tabela stanów - obrazuje przejścia między stanami maszyny Turinga zawiera wszystkie symbole z skończonego alfabetu wejściowego jak również wszystkie stany w których może znaleźć się maszyna Turinga. Każde pole tabeli określa: dla danego stanu q i kolejny stan q i+1 symbol, który ma być zapisany na taśmie kierunek (L / P) dla ruchu głowicy Tabela stanów Elementy tabeli stanów Dla rozpatrywanego ciągu wejściowego można określić trzy elementy w tabeli stanów: stan warunkowy - który powoduje przejście do określonej sekcji manipulowania danym symbolem, sekcja manipulowania - stany odpowiadające za przepisywanie symboli, powrót - stan powodujący przejście do początku i rozpoczęcie pracy od nowa Przykład 1 w roli rozstrzygacza W zbiorze napisów 3-literowych utworzonych z {a,b,c} tylko napis abc jest poprawny. 1) Podać algorytm rozpoznawania tego napisu. 2) Zapisać algorytm w postaci tabeli stanów Przykład 1 w roli rozstrzygacza Zatrzymanie się maszyny w stanie q 4 oznacza, że wprowadzony ciąg znaków nie był poprawny, a w stanie q 5 - że był.
Przykład 2 w roli przetwarzacza Zaprojektować tablicę stanów maszyny Turinga mnożącej dwie liczby naturalne (dwa ciągi zer oddzielone jedynką). Dla zadanego wejścia: Maszyna ma dać na wyjściu: Przykład 2 w roli przetwarzacza Najprostszym sposobem na osiągnięcie żądanego wyniku jest przesuwanie jedynki rozdzielającej oba ciągi. Głowica maszyny wędruje od lewej do prawej za każdym razem zamieniając na każdym z końców po jednym zerze na symbol pomocniczy S W przypadku napotkania jedynki przy krawędzi głowica zamienia ją na zero po czym zamienia pierwsze zero na przeciwległym końcu na jedynkę Następnie wymienia wszystkie symbole S na zero. Przykład 2 w roli przetwarzacza Znaczenie stanów: q 1 - przesunięcie do prawej krawędzi (do pierwszego symbolu B lub S) q 4 - przesuwanie do lewej krawędzi q 5 i q 3 - zmiana zera na symbol S zapisanie 0 i odwrócenie kierunku wędrówki głowicy q 5 i q 2 - wykrywanie jedynki przy krawędziach lewej i prawej q 6 i q 7 - zamiana tej jedynki na zero q 8 q 11 -usuwają symbole pomocnicze S i ustawiają głowicę w pozycji wyjściowej Przykład 2 w roli przetwarzacza Przykładowy przebieg (skrócony) pionowe kreski oznaczają komórkę aktualnie obserwowaną przez głowicę. Przykład 2 w roli przetwarzacza Elementami tworzącymi automat są więc: Σ={0,1}, Γ={0,1,S,B}, Q={q 0,q 1,q 2,q 3,q 4,q 5,q 6,q 7,q 8, q 9,q 10,q 11 }, q start =q 0. Oraz funkcja przejścia: Przykład 2 w roli przetwarzacza
Przykład 3 w roli przetwarzacza Zaprojektować tablicę stanów maszyny Turinga zamieniającej każde podsłowo postaci: 0011 na 0101. Głowica położona jest z prawej strony taśmy. Znaczenie stanów: q0 - stan początkowy, q4 - napotkano 0011, q1 - napotkano 1, q5 - zapisz 0, q2 - napotkano 11, q6 - zapisz 1, q3 - napotkano 011, q7 - wróć. Przykład 4 dodawanie cyfry 1 dodająca 1 do danej liczby w zapisie dwójkowym (inkrementacja liczby binarnej bez znaku). Analizę liczby rozpoczynamy z prawej strony. Przykład 4 dodawanie cyfry 1 Przykład 5 Słowo - palindrom badająca czy dane słowo z alfabetu wejściowego = {a, b} jest palindromem (to znaczy słowem, które czyta się tak samo z obu stron). Q = { q0, q1, q2, q3, q4, q5, q6, q7} q0 = q0 F = { q6, q7 } Γ = { Φ, a, b } B = Φ Σ = { a, b } Przykład 5 Słowo - palindrom Przykład 5 Słowo - palindrom Dodatkowo przyjmuje się, że pojedynczy symbol jest palindromem. Przejście do stanu akceptacji oznacza, że dane słowo jest palindromem, zaś przejście do stanu nieakceptacji oznacza, że słowo nie jest palindromem.
Przykład 5a Słowo - palindrom q0 ΦabaΦ q1 ΦΦbaΦ q1 ΦΦbaΦ q1 ΦΦbaΦ q1 ΦΦbaΦ przykład ΦabaΦ q3 ΦΦbaΦ q5 ΦΦbΦΦ q5 ΦΦbΦΦ q0 ΦΦbΦΦ q2 ΦΦΦΦΦ q4 ΦΦΦΦΦ q6 TAK ΦΦΦΦΦ Przykład 5b Słowo - palindrom q0 ΦabbΦ q1 ΦΦbbΦ przykład ΦabbΦ q1 ΦΦbbΦ q1 ΦΦbbΦ q3 ΦΦbbΦ q7 NIE ΦΦbbΦ przykład ΦabbΦ Symulacja pracy dla slowa abba Niestandardowe modele maszyny Turinga Istnieje szereg wersji maszyny Turinga, które wydają się być silniejsze od tradycyjnej, okazuje się jednak, że mogą one być zasymulowane na wersji pierwotnej. Wielotaśmowa - k-taśmowa maszyna Turinga różni się od zwykłej maszyny Turinga tym, że ma k niezależnych głowic, które poruszają się po różnych taśmach - każda z nich jest nieograniczona. - W nowym modelu, mechanizm sterujący podejmuje decyzje na podstawie aktualnego stanu i odczytów ze wszystkich głowic. - Dokonuje zapisów i przesunięć na każdej z taśm niezależnie.
Maszyna off-line - Maszyna off-line jest zawężeniem modelu maszyny wielotaśmowej. - Modyfikacja polega na tym, że maszynie off-line nie wolno dokonywać zmian taśmy wejściowej. - Rozważa się też maszyny off-line z taśmą wyjściową - wtedy dodatkowym ograniczeniem jest to, że głowica na ostatniej taśmie może tylko zapisywać symbole i przesuwać się tylko w prawo. - Taki model odpowiada sytuacji w której program ma wejście i wyjście na osobnych taśmach, a pozostałe taśmy pełnią funkcję pamięci roboczej. Niedeterministyczna Maszyna Turinga - Niedeterministyczna maszyna Turinga to taka, dla której mechanizm sterujący może przy konkretnym stanie i odczycie z taśmy postąpić na kilka różnych sposobów. - Wynik obliczeń jest pozytywny, jeśli choć jedna z możliwych dróg działania maszyny doprowadzi do sukcesu. Uniwersalna Uniwersalna - po wprowadzeniu w stan początkowy działa samoczynnie, wykonując zadanie dla którego została zaprojektowana. - Proste Maszyny Turninga można składać w złożone i uzyskać maszynę wykonującą bardziej złożone operacje matematyczne. - Do każdego zadania istnieje inna maszyna Turinga - Turing zaproponował, aby układ sterowania MT zapisać na taśmie i wyposażyć maszynę w uniwersalny układ sterowania. - Von Neuman rozwinął później UMT w prototyp komputera zaproponował on, aby UMT modyfikowała równie program MT a nie tylko dane. Uniwersalna Uniwersalna - UMT jest interpreterem czytającym opis konfiguracji <M> dowolnej maszyny Turinga M i wykonującym operacje na danych taśmie T maszyny M - dokładnie w ten sam sposób co M. - Taśma w UMT: - jej konfiguracje <M> (operacje przejść) zostaną zapisane na początku tamy obszar P taśmy, - potem wystąpi znak rozdzielenia (np. $$) - na koniec dane właściwej tamy T maszyny M. - Uniwersalne sterowanie UMT: pobiera i wykonuje instrukcje <M> zapisane na taśmie w obszarze programu, a UMT przekształca napis umieszczony w obszarze danych tej tamy. UMT jest wolniejsza w działaniu od MT, gdy UMT musi przesuwa głowic w tę i z powrotem pomiędzy instrukcjami a danymi.
Teza Churcha-Turinga Różnorodność zadań stawianych przed maszyną Turinga postawiło pytanie: Jakie problemy można rozwiązać odpowiednio zaprogramowaną maszyną Turinga (oczywiście pomijając czas)? Otóż okazuje się że: Maszyny Turinga potrafią rozwiązać każdy efektywnie rozwiązywalny problem algorytmiczny. Teza Churcha-Turinga Każdy problem algorytmiczny dla którego możemy znaleźć algorytm: dający się zaprogramować w pewnym dowolnym języku, wykonujący się na pewnym dowolnym komputerze, nawet na takim, którego jeszcze nie zbudowano, ale można zbudować, i nawet na takim, który wymaga nieograniczonej ilości czasu i pamięci dla coraz większych danych, jest także rozwiązywalny przez maszynę Turinga. To stwierdzenie jest jedną z wersji tzw. tezy Churcha- Turinga (Alonz Church, Alan M. Turing), którzy doszli do niej niezależnie w połowie lat trzydziestych. Teza Churcha-Turinga Teza Churcha-Turinga jest tezą a nie twierdzeniem, zatem nie może być dowiedziona w matematycznym tego słowa znaczeniu. Jedno z pojęć, do której się odwołuje, jest bowiem nieformalnym i nieprecyzyjnym, pojęciem efektywnej obliczalności. Skąd biorą się przesłanki aby akceptować tezę Churcha- Turinga, szczególnie, jeśli nie można jej udowodnić? Rozstrzygalność teorii Badacze proponowali różne modele komputera absolutnego, wszechpotężnego, lub uniwersalnego, ebz sprecyzować ulotne pojęcie efektywnej obliczalności. Turing zaproponował swoją maszynę, Church wymyślił matematyczny formalizm funkcji zwany rachunkiem lambda (jako podstawa języka programowania Lisp). Emil Post zdefiniował pewien typ systemu produkcji do manipulowania symbolami, Stephen Kleene zdefiniował klasę obiektów zwanych funkcjami rekurencyjnymi. Wszyscy oni próbowali użyć tych modeli do rozwiązania wielu problemów algorytmicznych, do których znane były efektywnie wykonalne algorytmy. Rozstrzygalność teorii Przełomowym zdarzeniem istotnym dla wszystkich tych modeli stało się udowodnienie, iż są one równoważne w kategoriach problemów algorytmicznych, które rozwiązują. I ten fakt jest dziś nadal prawdziwy nawet dla najsilniejszych modeli, jakie można sobie wyobrazić. Rozstrzygalność teorii Z tezy Churcha-Turinga wynika, że najpotężniejszy superkomputer z wieloma najwymyślniejszymi językami programowania, interpretatorami, kompilatorami nie jest potężniejszy od domowego komputera z jego uproszczonym językiem programowania. Mając ograniczoną ilość czasu i pamięci mogą obydwa rozwiązać te same problemy algorytmiczne, jak również żaden z nich nie może rozwiązać problemów nierozstrzygalnych (nieobliczalnych).
Rozstrzygalność teorii Schematycznie rozstrzygalność poniższy rysunek: problemów przedstawia Rozstrzygalność teorii Rozstrzygalność i obliczalność to koncepcyjnie te same pojęcia mówimy: "rozstrzygalny" - gdy oczekujemy binarnego wyniku, "obliczalny" - gdy wynik pochodzi z większego zbioru wartości. Problemy decyzyjne a optymalizacyjne Problemy decyzyjne mają postać pytania na które odpowiedź brzmi tak lub nie Problemy optymalizacyjne klasa problemów wymagająca ekstremalizacji funkcji celu Problemy decyzyjne a optymalizacyjne Obie klasy problemów mogą być badane w sensie ich natury obliczeniowej w ten sam sposób: Jeśli można w prosty sposób rozwiązać problem optymalizacyjny, to można także prosto rozwiązać związany z nim problem decyzyjny. Jeśli problem decyzyjny jest obliczeniowo trudny, to trudny jest również odpowiadający mu problem optymalizacyjny. Wykazując obliczeniową trudność problemu wystarczy się ograniczyć do jego sformułowania decyzyjnego. Wnioski z tezy Church a- Turninga Maszyny Turinga są w stanie rozwiązać każdy efektywnie rozwiązywalny problem algorytmiczny. Dla każdego efektywnie rozwiązywalnego problemu algorytmicznego da się skonstruować MT (która go rozwiązuje). Jeśli się nie da skonstruować odpowiedniej MT problem jest nierozwiązywalny (nierozstrzygalny). Problemy nierozstrzygalne Przykład - problem domina Zestaw 1 Czy podanym zestawem kafelków można pokryć dowolny płaski obszar zachowując odpowiedniość kolorów na styku kafelków? (dysponujemy nieograniczoną liczbą kafelków w każdym z rodzajów, ale ich zestaw jest zadany) Dla zestawu 1. - TAK Zestaw 2 Dla zestawu 2. - NIE
Problemy nierozstrzygalne Twierdzenie Dla każdego algorytmu (zapisanego w dającym się efektywnie wykonać języku programowania), który byłby przeznaczony do rozstrzygania problemu domina, istnieje nieskończenie wiele dopuszczalnych zestawów danych wejściowych, dla których algorytm ten będzie działał w nieskończoność lub poda błędną odpowiedź. Wniosek Problem domina jest problemem nierozstrzygalnym. Problemy nierozstrzygalne Nieograniczoność liczby przypadków do sprawdzenia nie jest dostatecznym warunkiem nierozstrzygalności problemu! Jeśli nierozstrzygalność się pojawia, to wynika z natury problemu i jest często sprzeczna z intuicją PROBLEMY NIEROZSTRZYGALNE LUB NIEOBLICZALNE W ogóle nie istnieją algorytmy PROBLEMY TRUDNO ROZWIĄZYWALNE PROBLEMY ŁATWO ROZWIĄZYWALNE Nie istnieją wielomianowe algorytmy Istnieją rozsądne (wielomianowe) algorytmy Problem wężw ęża a domino Czy dysponując skończonym zbiorem typów kafelków można połączyć dwa dane punkty nieskończonej siatki całkowitoliczbowej wężem domino? Jeżeli postawimy problem węża domino na pewnym obszarze R, to: dla R ograniczonego problem jest rozstrzygalny dla R będącego całą płaszczyzną problem jest rozstrzygalny dla R będącego półpłaszczyzną problem jest nierozstrzygalny X y Odmiany problemu domina Czy podanym zestawem kafelków można pokryć obszar T zachowując odpowiedniość kolorów na styku kafelków? T = prostokąt C x N (tzw. problem ograniczony ze stałą szerokością) T = kwadrat N x N (tzw. problem ograniczony) T jest nieskończony (tzw. problem nieograniczony) T jest nieskończony i wskazany kafelek ma się powtórzyć nieskończenie wiele razy (tzw. problem okresowy) Rodzaj problemu domina ograniczony ze stałą szerokości cią ograniczony nieograniczony okresowy Status algorytmiczny łatwo rozwiązywalny zywalny trudno rozwiązywalny zywalny nierozstrzygalny wysoce nierozstrzygalny Klasy złożonoz oności P i NP jako ścisły model matematyczny umożliwia precyzyjne definiowanie pojęć związanych ze złożonością obliczeniową. Czas działania = liczba kroków maszyny. Klasy złożonoz oności P i NP Problem należy do klasy złożoności czasowej P, gdy istnieje DTM rozwiązująca ten problem w czasie wielomianowym względem rozmiaru danych wejściowych. Problem należy do klasy złożoności czasowej NP, gdy istnieje NDTM rozwiązująca ten problem w czasie wielomianowym względem rozmiaru danych wejściowych. Intuicja: problem ma złożoność NP, jeśli znając rozwiązanie jesteśmy w stanie sprawdzić w czasie wielomianowym, czy jest ono poprawne.
Problemy NP-zupe zupełne Problem P 0 jest NP-zupełny, gdy: a) P 0 należy do klasy NP, b) każdy problem z klasy NP da się sprowadzić w czasie wielomianowym do problemu P 0. Czyli np. znając rozwiązanie problemu P 0 w czasie wielomianowym na DTM, moglibyśmy w czasie wielomianowym rozwiązać każdy problem z klasy NP. Czyli wówczas byłoby P = NP. Problemy NP- trudne Problem P 0 jest NP-trudny, gdy każdy problem z klasy NP da się sprowadzić w czasie wielomianowym do problemu P 0. Problem NP-trudny spełnia tylko punkt b) definicji problemu NP.-zupełnego. problemy NP-zupełne maja postać pytania czy istnieje... problemy NP-trudne to zwykle ich optymalizacyjne wersje - znajdź najmniejszy... ) Problemy NP-zupe zupełne Klasa problemów NP - zupełnych obejmuje prawie 1000 problemów algorytmicznych o jednakowych cechach: dla wszystkich istnieją wątpliwe rozwiązania w postaci algorytmów wykładniczych dla żadnego nie znaleziono rozsądnego rozwiązania w postaci algorytmu wielomianowego dla żadnego nie udowodniono, że jego rozwiązania wymaga czasu wykładniczego najlepsze znane dolne ograniczenia są liniowe, tzn. O(N) Nowe problemy NP-zupełne powstają w kombinatoryce, badaniach operacyjnych, ekonometrii, teorii grafów, logice itd. Układanki dwuwymiarowe Powodem braku szybkiego rozwiązania jest istnienie wielu różnych rozwiązań częściowych, nie będących częścią rozwiązania pełnego nie dających się rozszerzyć do jakiegoś rozwiązania pełnego. Zwykłe układanki Puzzle zazwyczaj mają złożoność czasową O(N 2 ) W ogólnym przypadku problem układanek jest także problemem NP zupełnym Nie wiadomo czy są one trudno, czy łatwo rozwiązywalne! Problem komiwojażera Problem polega na znalezieniu w sieci połączeń pomiędzy miastami najkrótszej drogi, która pozwala odwiedzić każde z miast i powrócić do miasta wyjściowego (tzw. cykl). Problem formułowany jest jako poszukiwanie minimalnego pełnego cyklu w grafie z wagami krawędzi. W wersji decyzyjnej problem polega na stwierdzeniu czy istnieje cykl o koszcie nie większym niż podana wartość K. Problem komiwojażera cd. Problem komiwojażera pojawia się na przykład przy: projektowaniu sieci telefonicznych projektowaniu układów scalonych planowaniu linii montażowych programowaniu robotów przemysłowych Naiwne rozwiązanie N! Przypadek nawet dla N = 25 jest beznadziejny
Ścieżka Hamiltona Problem polega na sprawdzeniu czy w grafie istnieje ścieżka, która przez każdy wierzchołek przechodzi dokładnie raz. Ale... Sprawdzenie czy w grafie istnieje ścieżka, która przez każdą krawędź przechodzi dokładnie raz, nazywane jest problemem Eulera i nie jest problemem klasy NPC Kolorowanie map Kolorowanie mapy - problem decyzyjny polegający na ustaleniu czy dana mapa płaska może być pokolorowana k barwami tak, aby sąsiednie państwa nie miały tego samego koloru. dla 2 barw problem jest łatwo rozwiązywalny wystarczy sprawdzić, czy mapa nie zawiera punktów, w których styka się nieparzysta liczba państw dla 3 barw problem jest trudno rozwiązywalny (klasy NPzupełnych) dla 4 barw problem jest banalny - patrz twierdzenie o czterech barwach Kolorowanie grafów Kolorowanie grafu - wyznaczenie minimalnej liczby barw, którymi można pokolorować wierzchołki danego grafu tak, aby każde dwa wierzchołki bezpośrednio połączone krawędzią miały różne kolory. Załadunek adunek plecaka Należy tak poukładać rzeczy w plecaku, żeby zostało w nim jak najwięcej wolnego miejsca. Łatwo można skonstruować graf wymagający dowolnie dużej liczby kolorów. Klika - zbiór wierzchołków w grafie połączonych każdy z każdym Ogólna charakterystyka problemów w z klasy NP wymagają sprawdzania rozwiązań częściowych i rozszerzania ich w celu znalezienia rozwiązania ostatecznego; jeśli rozwiązanie częściowe nie da się dalej rozszerzyć, to trzeba powrócić na jakiś wcześniejszy etap i po dokonaniu zmian rozpocząć od nowa, postępowanie polegające na systematycznym sprawdzeniu wszystkich możliwości wymaga czasu wykładniczego Ogólna charakterystyka problemów w z klasy NP jeśli znamy rozwiązanie, to sprawdzenie jego poprawności może być przeprowadzone w czasie wielomianowym! dla każdego z problemów istnieje niedeterministyczny algorytm o złożoności wielomianowej; są trudno rozwiązywalne, ale stają się łatwo rozwiązywalne, jeśli korzysta się z niedeterministycznej wyroczni
Ogólna charakterystyka problemów NP-zupełnych - każdy problem klasy NP można przekształcić do jednego z nich w czasie wielomianowym (taka jest ich definicja) - każdy problem z tej klasy można przekształcić w czasie wielomianowym do każdego innego! - znalezienie algorytmu wielomianowego dla jednego z problemów oznacza możliwość rozwiązania w czasie wielomianowym wszystkich innych! Ogólna charakterystyka problemów NP-zupełnych - udowodnienie wykładniczego dolnego oszacowania dla jednego z problemów oznacza wykazanie, że żaden z nich nie może być rozwiązany w czasie wielomianowym! - albo wszystkie te problemy są łatwo rozwiązywalne, albo wszystkie trudno - wykazanie, że nowy problem jest NP-zupełny przebiega w dwóch krokach: - trzeba udowodnić, że nowy problem jest klasy NP. - trzeba skonstruować przekształcenie, które w czasie wielomianowym transformuje do niego dowolny znany problem NP-zupełny Przykłady przekształcania jednego problemu NP-zupełnego w drugi Znalezienie ścieżki Hamiltona problem komiwojażera Klasy problemów - Klasa NP - problemy posiadające niedeterministyczne algorytmy o czasie wielomianowym - Klasa P - problemy posiadające zwykłe algorytmy o czasie wielomianowym (łatwo rozwiązywalne) - Klasa NP-zupełne - wzorcowe problemy z klasy NP sprowadzalne jeden do drugiego Istnieje ścieżka Hamiltona w grafie o N wierzchołkach Istnieje cykl komiwojażera w uzupełnionym grafie nie dłuższy niż N + 1 Klasy problemów - formalnie Klasa złożoności P Funkcja f: A* -> A* posiada wielomianową złożoność czasową (P) wtedy i tylko wtedy, gdy istnieje wielomian p i deterministyczna MT M, która dla słowa wejściowego w danego na taśmie, zatrzymuje się z wynikiem f(w) po czasie t M ( w ) p( w ). Dla problemów klasy P istniej algorytmy, wyznaczone przez deterministyczne MT zatrzymujące się dla wszystkich zestawów danych wejściowych. Większość praktycznych algorytmów jest o niskiej złożoności, takiej jak O(N), O(N log N), O(N2), lub O(N3). Ich czasy obliczeń rosną wolno wraz z N, tak, że są one efektywnie obliczalne nawet dla dużych wartości N. Klasy problemów - formalnie Problemy NP - problemy rozwiązywalne w niedeterministyczny sposób w czasie wielomianowym. NP oznacza ( "non-deterministic polynomial") (niedeterministyczny wielomianowy): 1. Rozwiązanie polega na wykonaniu dużej liczby łatwych obliczeń, każde o wielomianowej złożoności O(N k ). 2. Kolejność ich wykonywania nie jest określona (tzn. jest niedeterministyczna). 3. W zależności od przypadku (lub szczęścia ) rezultat można otrzymać równie dobrze już w pierwszym, jak dopiero w ostatnim kroku obliczeń.
Klasy problemów - formalnie Klasa złożoności NP NP= L A MT M p że L LM ( ) i x A zachodzi: t ( x) p( x )} * { niedeterministyczna, wielomian taki, * = N Deterministyczna i niedeterministyczna MT są równoważne pod względem możliwości obliczeniowej w warunkach nieograniczonych zasobów czasu i pamięci. Klasy problemów - formalnie Istnieje między DMT i NDMT zasadnicza różnica pod względem czasu w którym wykonują one obliczenia. Niedeterministyczna MT bada jednocześnie szereg alternatywnych ścieżek obliczenia, których liczba może rosnąć wykładniczo wraz z długością obliczeń. Dla takiej maszyny funkcja t N : A* -> N (liczby całkowite) mierząca liczbę kroków obliczeń oznacza: t N (x) jest to najmniejsza liczba kroków spośród wykonanych wzdłuż każdej ścieżki akceptującej x ". Klasy problemów - formalnie Klasa złożoności NP-zupełne (NPC) L jest redukowalna z wielomianową złożonością do L ( L p L ) wtedy i tylko wtedy, gdy istnieje funkcja obliczalna o wielomianowej złożoności czasowej f:a*->a* taka, że dla każdego w A* zachodzi: w L wtedy i tylko wtedy, gdy f(w) L. Innymi słowy zamiast odpowiadać na pytanie, czy w L pytamy, czy f(w) L. Zatem złożoność czasowa problemu to suma złożoności obliczenia funkcji f i złożoności decyzji o przynależności f(w) do L. Jeśli obie te składowe operacje posiadają wielomianowe złożoności to ich suma - również. Klasy problemów - formalnie Klasa złożoności NP-zupełne (NPC) Biorąc pod uwag klasę NP i pojęcie redukcji o wielomianowej złożoności czasowej wyróżniamy "problemy NP-trudne" do których można zredukować wszystkie problemy decyzyjne w klasie NP. L jest NP-trudne, wtedy i tylko wtedy, gdy dla każdego L NP zachodzi L p L. L jest NP-zupełne (NPC), wtedy i tylko wtedy, gdy L NP i L jest NP-trudne. Klasy problemów - formalnie Klasa złożoności NP-zupełne (NPC) Klasa NPC jest zupełna (NP-complete) w tym sensie, że należące do niej problemy są wzajemnie powiązane za pomocą redukcji: Znalezienie rozwiązania wielomianowego dla choćby jednego z problemów oznaczałoby wciągnięcie wszystkich problemów NP do klasy problemów łatwych (wielomianowych - P). Na odwrót - udowodnienie dla choćby jednego problemu istnienia dolnej granicy powyżej złożoności wielomianowej oznaczałoby wciągnięcie wszystkich problemów NP do klasy problemów trudnych. Klasy problemów - formalnie Czy P = NP? Na pytanie, czy P = NP, nadal brak odpowiedzi. Intuicja i doświadczenie wskazują, że P NP. Niedeterminizm układu sterującego zapewnia możliwości obliczeniowe rosnące wykładniczo wraz z długością sekwencji obliczeń (wykonywanych "równolegle") - w czasie, gdy DMT wykona t kroków, maszyna NMT może wykonać co najmniej 2t kroków. Podczas gdy DMT wykonuje nawroty aby zbadać wszystkie alternatywne ścieki rozwiązania, maszyna NMT bada jednocześnie wszystkie alternatywne rozwiązania.
Algorytmy przybliżone praktyczne rozwiązanie dla problemów NP-zupełnych - Np. problem komiwojażera jest trudno rozwiązywalny (NP-zupełny), ale można w czasie wielomianowym wyznaczać niezłe cykle obchodzące wszystkie wierzchołki grafu: - L OPT -długość minimalnego cyklu Hamiltona LAPR S A = - L APR -długość przybliżonego rozwiązania LOPT - miara dobroci rozwiązania przybliżonego: - istnieje algorytm o złożoności O(N 3 ) wyznaczający w najgorszym przypadku cykl Hamiltona o dobroci s A 1,5 Uwagi o złożoności problemów - po raz pierwszy wykazano NP-zupełność dla problemu spełnialności zdania logicznego (Cook w 1971 r.) - są problemy, dla których udowodniono, że należą do klasy NP, ale nie są ani NP-zupełne, ani nie należą do klasy P, np. sprawdzenie czy dana liczba jest liczbą pierwszą Uwagi o złożoności problemów Uwagi cd. - są problemy, których złożoność wykładniczą można udowodnić przez podanie dolnych ograniczeń czasowych (i to nie tylko takie, jak wieże Hanoi, dla których z góry wiadomo ile iteracji wykona algorytm), - np. stwierdzenie czy dla danej konfiguracji w uogólnionych szachach N x N istnieje strategia wygrywająca dla jednego z przeciwników - są problemy spełnialności, dla których także można udowodnić złożoność wykładniczą np. w dynamicznej logice zdań - są problemy, dla których pokazano podwójnie wykładnicze dolne ograniczenia czasowe, np. spełnialność w arytmetyce Presburgera - są problemy algorytmiczne, dla których udowodniono, że mają wykładnicze dolne ograniczenia pamięciowe Uwagi cd. Klasy złożoności algorytmów - są ciekawe przypadki problemów, dla których efektywne w praktyce algorytmy mają złożoność wykładniczą, ale znaleziono dla nich algorytm wielomianowy sprawujący się w większości przypadków wyraźnie gorzej - zadanie programowania liniowego, algorytm sympleksowy (wykładniczy) i algorytm Karmarkara (1979)
Obliczenia równoległe. Obliczenia rozproszone Algorytmy równoległe - wykorzystują komputery wieloprocesorowe lub sieci stacji roboczych do równoległego wykonania złożonych obliczeń. Obliczenia równoległe są rodzajem obliczeń współbieżnych (obejmują one procesy, które są w trakcie wykonywania w tym samym czasie), które pozwalają na dekompozycję funkcjonalną algorytmu (niezależne funkcje są realizowane przez niezależne moduły programowe). Obliczenia rozproszone - dokonano dekompozycji zadania na programy, procesy czy procesory w warunkach braku pamięci globalnej, czyli wspólnej dla wszystkich procesorów przestrzeni adresowej. 50 sek Idea zrównoleglenia 32 sek Prawo Amdahla 12 4 4 4 Prawo Amdahla w praktyce Prawo Amdahla w praktyce 1 x 90 % 10 % 2 x 5 x 10 x 20 x 1,81 x 3,57 x 5,26 x 6,89 x 5 x 2 x 70 % 30 % 1,31 x 1,54 x 100 x 9,17 x
Co można a czego nie można osiągnąć równoległością. - wiele problemów można rozwiązać szybciej niż sekwencyjnie - można niektóre problemy rozwiązywać szybciej nawet o rząd wielkości, jeśli da się zastosować rozszerzającą się równoległość dla problemów nierozstrzygalnych nie da się skonstruować algorytmu równoległego - klasa problemów rozwiązywalnych jest niewrażliwa na dodanie równoległości - wszystkie problemy klasy NP mają rozwiązania równoległe znajdowane w czasie wielomianowym, ale liczba procesorów potrzebnych do rozwiązania problemu NP-zupełnego w rozsądnym czasie rośnie wykładniczo Co można a czego nie można osiągnąć równoległością. - do końca nie wiadomo, czy problemy klasy NP są rzeczywiście trudno rozwiązywalne i trzeba szukać ratunku w równoległości - rzeczywiste komputery równoległe mają silne ograniczenia związane z przepustowością połączeń pomiędzy procesorami - nie wiadomo, czy można zastosować równoległość, nawet z niewielomianową liczbą procesorów, do rozwiązania w czasie wielomianowym problemu o udowodnionej sekwencyjnej złożoności wykładniczej