Zadania obliczeniowe, algorytmy i złożoność obliczeniowa

Podobne dokumenty
Zadania obliczeniowe, algorytmy i złoŝoność obliczeniowa

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

Algorytmy i Struktury Danych, 2. ćwiczenia

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Złożoność algorytmów. Wstęp do Informatyki

Podstawy Informatyki. Sprawność algorytmów

Złożoność problemów. 1 ruch na sekundę czas wykonania ok lat 1 mln ruchów na sekundę czas wykonania ok.

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Wstęp do programowania

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Zaawansowane algorytmy i struktury danych

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott

Kolorowanie wierzchołków grafu

INFORMATYKA SORTOWANIE DANYCH.

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 9 Rekurencja

Informatyka 1. Złożoność obliczeniowa

Wykład 3. Metoda dziel i zwyciężaj

Złożoność obliczeniowa klasycznych problemów grafowych

Sortowanie przez scalanie

Wstęp do programowania

Technologie informacyjne Wykład VII-IX

Wykład 8. Rekurencja. Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. L. Peter Deutsch

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle

Matematyczne Podstawy Informatyki

Podstawy Programowania

Algorytmy i Struktury Danych.

Podstawy Programowania. Złożoność obliczeniowa

Sortowanie danych. Jolanta Bachan. Podstawy programowania

PROBLEMY NIEROZSTRZYGALNE

Teoria obliczeń i złożoność obliczeniowa

Algorytmy sortujące i wyszukujące

Programowanie dynamiczne cz. 2

a) 7 b) 19 c) 21 d) 34

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Podstawy Programowania. Złożoność obliczeniowa

Sortowanie topologiczne skierowanych grafów acyklicznych

TEORETYCZNE PODSTAWY INFORMATYKI

Rekurencja. Przygotowała: Agnieszka Reiter

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Laboratorium nr 1. i 2.

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Jeszcze o algorytmach

Algorytmy w teorii liczb

TEORETYCZNE PODSTAWY INFORMATYKI

Złożoność obliczeniowa zadania, zestaw 2

Analiza algorytmów zadania podstawowe

Zaawansowane algorytmy i struktury danych

Podstawy Informatyki. Metalurgia, I rok. Rekurencja. skomplikowane zadanie. Rekurencja

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Podstawy Informatyki. Metalurgia, I rok. Wykład 5 Rekurencja

Struktura danych. Sposób uporządkowania informacji w komputerze.

Optymalizacja. Wybrane algorytmy

Wprowadzenie do złożoności obliczeniowej

Efektywna metoda sortowania sortowanie przez scalanie

Metody algortmiczne (Algorytmy Część IV)

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,

Wstęp do programowania

INFORMATYKA WYBRANE ALGORYTMY OPTYMALIZACYJNE KRYPTOLOGIA.

Programowanie w VB Proste algorytmy sortowania

Algorytmy. Programowanie Proceduralne 1

Struktury Danych i Złożoność Obliczeniowa

Literatura. 1) Pojęcia: złożoność czasowa, rząd funkcji. Aby wyznaczyć pesymistyczną złożoność czasową algorytmu należy:

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Rozwiązywanie problemów metodą przeszukiwania

Algorytmika w bioinformatyce

PODSTAWY INFORMATYKI wykład 10.

Podejście zachłanne, a programowanie dynamiczne

Metody przeszukiwania

1. Algorytmy przeszukiwania. Przeszukiwanie wszerz i w głąb.

Podstawy Programowania

Heurystyczne metody przeszukiwania

LABORATORIUM 7: Problem komiwojażera (TSP) cz. 2

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Algorytmika Problemów Trudnych

Teoretyczne podstawy informatyki

Wstęp do Programowania potok funkcyjny

PROBLEM: SORTOWANIE PRZEZ ODWRÓCENIA METODA: ALGORYTMY ZACHŁANNE

Wstęp do sieci neuronowych, wykład 12 Łańcuchy Markowa

Wykład 10 Grafy, algorytmy grafowe

Piotr Chrząstowski-Wachtel Uniwersytet Warszawski. Al Chwarizmi i trzy algorytmy Euklidesa

Algorytmy. wer Wojciech Myszka 30 listopada 2008

Generowanie i optymalizacja harmonogramu za pomoca

Programowanie dynamiczne i algorytmy zachłanne

Sortowanie przez wstawianie Insertion Sort

Algorytmy i Struktury Danych.

wstęp do informatyki i programowania część testowa (25 pyt. / 60 min.)

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Modele Obliczeń. Wykład 1 - Wprowadzenie. Marcin Szczuka. Instytut Matematyki, Uniwersytet Warszawski

Sortowanie. Tomasz Żak zak. styczeń Instytut Matematyki i Informatyki, Politechnika Wrocławska

Transkrypt:

Dr inż. Jerzy Mieścicki Instytut Informatyki PW Zadania obliczeniowe, algorytmy i złożoność obliczeniowa Wstęp do Informatyki, część 2

Przeszukiwanie listy nieuporządkowanej Zapisy (records), umieszczone w przypadkowej kolejności pole klucza 1 zadany klucz 2 Zadanie: Czy wśród N rekordów jest taki R(i), w którym zawartość wskazanego pola jest zgodna z zadanym kluczem, Jeśli tak odczytaj ten R(i), Jeśli nie napisz nie ma 3... i... N........................ J. Mieścicki, Wstęp do Informatyki, część 2 2

Przeszukiwanie listy nieuporządkowanej 1 2 3... i... N 31 15 2 7... 25 Dowolne liczby całkowite, umieszczone w przypadkowej kolejności, w kolejno ponumerowanych komórkach...? 7 zadana liczba ( klucz ) Zadanie: Czy jest wśród nich zadana liczba (np. 7 ), Jeśli tak wypisz numer komórki, Jeśli nie napisz nie ma J. Mieścicki, Wstęp do Informatyki, część 2 3

Przeszukiwanie listy nieuporządkowanej start Dane: L[1:N] wektor liczb całkowitych, L(i) liczba na i-tej pozycji, N, K, i - liczby całkowite, K klucz, i indeks przeszukiwania. i := 0 i := i+1 i > N nie tak Pisz nie ma stop nie L(i)== K tak Pisz i stop J. Mieścicki, Wstęp do Informatyki, część 2 4

Przeszukiwanie listy nieuporządkowanej start i := 0 i := i+1 Czynności jednorazowe (inicjalizacja, edycja wyników itp.) Czynności wykonywane wielokrotnie, (w najgorszym przypadku N razy) i > N nie tak Pisz nie ma stop nie L(i)== K tak Pisz i stop J. Mieścicki, Wstęp do Informatyki, część 2 5

Przeszukiwanie listy nieuporządkowanej Czas wykonania 0 1 2 3... N Zależność czasu wykonania od rozmiaru danych (N) jest liniowa, Mówi się, że złożoność obliczeniowa (czasowa) jest O(N). J. Mieścicki, Wstęp do Informatyki, część 2 6

Przeszukiwanie listy nieuporządkowanej - ulepszenie start start i := 0 Dopisz K jako L(N+1) i := i+1 i := 0 nie i > N nie L(i)== K tak tak Pisz nie ma stop Pisz i nie Pisz nie ma i := i+1 L(i)== K tak tak i > N nie stop stop stop Pisz i J. Mieścicki, Wstęp do Informatyki, część 2 7

Przeszukiwanie listy nieuporządkowanej Czas wykonania Alg. 1 Alg. 1a W obu przypadkach zależność czasu wykonania od rozmiaru danych (N) jest liniowa, Oba algorytmy mają taką samą złożoność obliczeniową: O(N). 0 1 2 3... N J. Mieścicki, Wstęp do Informatyki, część 2 8

Przeszukiwanie listy uporządkowanej 1 2 3 4 5 6 7 N=8 3 4 22 35 157 209 1489 2500 Liczby całkowite, umieszczone w kolejno ponumerowanych komórkach uporządkowane narastająco. Zadanie to samo: Czy jest wśród nich zadana liczba (np. 7 ), Jeśli tak wypisz numer komórki, Jeśli nie napisz nie ma J. Mieścicki, Wstęp do Informatyki, część 2 9

Przeszukiwanie listy uporządkowanej 1 2 3 4 5 6 7 N=8 3 4 22 35 157 209 1489 2500 Oba algorytmy przeszukiwania listy nieuporządkowanej działałyby również w tym przypadku, Ale tu można zastosować lepszy pomysł: dzielenia na połowy. J. Mieścicki, Wstęp do Informatyki, część 2 10

Przeszukiwanie listy uporządkowanej 1 2 3 4 5 6 7 N=8 3 4 22 35 157 209 1489 2500 Niech np. zadana liczba K = 7 przygraniczna L(5) = 157 > K, więc nie ma czego szukać w dolnej połowie, Powtórzmy całe rozumowanie dla górnej połowy. J. Mieścicki, Wstęp do Informatyki, część 2 11

Przeszukiwanie listy uporządkowanej Dwukrotne zwiększenie N (np. z 8 do 16, z 16 do 32 itd.) dodaje jeden krok do algorytmu dzielenia na połowy, Algorytm ten ma więc złożoność O(log N). Czas O(N) B A O(log N) O(log N) < O(N), ponieważ istnieje takie N*, że dla każdego N > N* czas wykonania T A < T B,... choć dla pewnego zakresu N może być odwrotnie 0 1 N N* J. Mieścicki, Wstęp do Informatyki, część 2 12

Porównywanie grafów G 1 1 2 G 2 1 2 3 3 4 5 6 4 5 6 Czy G 1 jest izomorficzny z G 2? J. Mieścicki, Wstęp do Informatyki, część 2 13

Porównywanie grafów G 1 1 2 G 2 1 4 3 3 4 5 6 2 6 5 Czy G 1 jest izomorficzny z G 2? J. Mieścicki, Wstęp do Informatyki, część 2 14

Porównywanie grafów G 1 1 2 3 od 4 1 2 do 3 4 5 6 Potrzebne jest porównanie dwóch takich tabel, Gdy N jest liczbą węzłów, liczba porównań jest proporcjonalna do N 2, Zatem złożoność O(N 2 ) 5 6 J. Mieścicki, Wstęp do Informatyki, część 2 15

Problem komiwojażera (traveling salesman p.) P 383 343 303 G W 279 647 Problem: znaleźć najkrótszą trasę od W z powrotem do W, odwiedzającą (jednokrotnie) wszystkie N=3 miasta. Inaczej: znaleźć najkrótszy cykl w zadanym grafie. 524 R J. Mieścicki, Wstęp do Informatyki, część 2 16

Problem komiwojażera G W 383 343 G P R P 303 524 W 279 647 R P R R P G R R G G P P G W W W W W W 6 tras do porównania J. Mieścicki, Wstęp do Informatyki, część 2 17

Problem komiwojażera 383 343 G Najkrótsza: WGPRW (lub WRPGW) ma 1529 km, Najdłuższa: WGRPW (lub WPRGW) ma 1817 km. P 303 524 W 279 647 R J. Mieścicki, Wstęp do Informatyki, część 2 18

Problem komiwojażera Dla N = 4: W G P R P R G R G P W W W W W W 4*3*2*1 = N! = 24 trasy do porównania J. Mieścicki, Wstęp do Informatyki, część 2 19

Problem komiwojażera Złożoność obliczeniowa O(N!), Ogromna liczba stosunkowo prostych obliczeń, Załóżmy dla wsparcia wyobraźni, że pewien komputer wylicza i porównuje 10 6 tras na sekundę. 1 doba = 86 400 s, 1 rok = 31 536 000 s, Przy tym założeniu: J. Mieścicki, Wstęp do Informatyki, część 2 20

Problem komiwojażera N 4 9 10 12 14 15 17 18 20 Czas 0.000024 s 0.36 s 3.6 s 8 min > 1 doba > 2 tygodnie ~ 11 lat ~ 200 lat 78 000 lat Eksplozja wykładnicza J. Mieścicki, Wstęp do Informatyki, część 2 21

Program, ale czy algorytm? (Problem Collatza) X liczba całkowita większa od zera; begin; while ~ (X = = 1); if X parzyste then X := X/2 elseif X nieparzyste then X:= 3*X+1; endif; endwhile; end; begin Wprowadź X tak X==1 nie X parzyste tak nie X:=X/2 X:=3X+1 end J. Mieścicki, Wstęp do Informatyki, część 2 22

Superprogram oceniający własność stopu? start Dowolny program P Wczytaj P Można udowodnić, że zadanie zbudowania programu określającego własność stopu dowolnego programu jest nierealizowalne. Stop 1 Tak, P ma własność stopu? Stop2 Nie, P nie ma własności stopu J. Mieścicki, Wstęp do Informatyki, część 2 23

Klasy złożoności obliczeniowej (czasowej) Przeszukiwanie listy nieuporządkowanej O(N), Przeszukiwanie listy uporządkowanej O(log N), Sortowanie O(N log N), Porównywanie grafów O(N 2 ) Wieże Hanoi O(2 N ), Problem komiwojażera O(N!), Problem budowy uniwersalnego programu badającego własność stopu w ogóle nierozstrzygalny trudne obliczeniowo łatwe Nieobliczalne (nierozstrzygalne) Złożoność wykładnicza O(k N ) O(N k ), złożoność wielomianowa lub lepsza J. Mieścicki, Wstęp do Informatyki, część 2 24

Luka algorytmiczna trudne łatwe... O(k NN )... O(N!) O(2 N ) ---------- O(N 10 )... O(N 2 ) O(N) O(logN)... Dla pewnego problemu obliczeniowego: Znany algorytm Górne ograniczenie Luka algorytmiczna Dolne ograniczenie Formalny dowód (że nie może być lepiej) Odkrywanie nowych algorytmów Nowe dowody matematyczne J. Mieścicki, Wstęp do Informatyki, część 2 25

Problemy algorytmicznie zamknięte Jeśli luka algorytmiczna nie istnieje problem jest algorytmicznie zamknięty. Algorytmicznie zamknięte są na przykład: Przeszukiwanie listy nieuporządkowanej: udowodniono, że złożoność nie może być lepsza, niż O(N), znany jest algorytm o złożoności O(N). Sortowanie, O(N logn)... J. Mieścicki, Wstęp do Informatyki, część 2 26

Klasa problemów NP-zupełnych (NPC) trudne łatwe... O(k NN )... O(N!) O(2 N ) ---------- O(N 10 )... O(N 2 ) O(N) O(logN)...? Górne ograniczenie Ogromna luka algorytmiczna NPC Dolne ograniczenie nie znane J. Mieścicki, Wstęp do Informatyki, część 2 27

Klasa problemów NPC NPC od Nondeterministically Polynomial Complete, Każdy problem jest (jako całość) obliczeniowo trudny, Rozwiązanie polega z zasady na wykonaniu ogromnej liczby łatwych obliczeń, każde o wielomianowej (polynomial) złożoności O(N k ), Kolejność ich wykonywania nie jest określona (t.zn. jest niedeterministyczna); 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ń, J. Mieścicki, Wstęp do Informatyki, część 2 28

Klasa problemów NPC Klasa NPC jest zupełna (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), i odwrotnie, 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, Czy NP = P? J. Mieścicki, Wstęp do Informatyki, część 2 29

Przykłady problemów NP: problem plecakowy Plecak N rzeczy do zapakowania Zadanie: tak poukładać rzeczy w plecaku, żeby zostało w nim jak najwięcej wolnego (niewykorzystanego) miejsca. Problem jest NP. J. Mieścicki, Wstęp do Informatyki, część 2 30

Układanie rozkładu zajęć Plan tygodnia Wykłady, laboratoria, ćwiczenia do poukładania... plus kryterium (kryteria) celu... plus więzy (ograniczenia) J. Mieścicki, Wstęp do Informatyki, część 2 31

Pojęcie redukcji Układanie rozkładu zajęć sprowadza się (redukuje się) do problemu plecakowego, Istnieje redukcja przekształcająca problem układania rozkładu zajęć w problem plecakowy. Redukcja A do B: Problem A Problem A Algorytm o złożoności O(N k ) przeliczający dane A na dane B cel A na cel B Problem B Problem B J. Mieścicki, Wstęp do Informatyki, część 2 32

Przykłady problemów NP: kolorowanie mapy Dana jest mapa N państw oraz K kolorów, N > 1, K < N, Zadanie polega na stwierdzeniu (tak nie), czy daną mapę można pokolorować K kolorami w taki sposób, by sąsiadujące państwa się zawsze różniły kolorem. Dla K = 1 rozwiązanie natychmiastowe (nie), Dla K = 2: Tak jedynie gdy w każdym węźle zbiega się parzysta liczba krawędzi, Zatem złożoność O(N 2 ), Dla K = 4 rozwiązanie natychmiastowe (zawsze tak ), Dla K = 3 problem jest NP. J. Mieścicki, Wstęp do Informatyki, część 2 33

Przykłady problemów NP: kolorowanie grafu 1? 2 4 3 7 5 6 Dany jest graf o N wierzchołkach oraz K kolorów (K < N), Zadanie: rozstrzygnąć (taknie), czy da się pokolorować wierzchołki danego grafu tak, by żadne dwa wierzchołki połączone krawędzią nie były tego samego koloru, Dla 2 < K < N problem jest NP. J. Mieścicki, Wstęp do Informatyki, część 2 34

J. Mieścicki, Wstęp do Informatyki, część 2 35 Przykłady problemów NP: kolorowanie grafu... Udało się! 3 5 6 2 4 7 1 Zi Ż Ż Ż Ż Ż Ż C Ż Ż Ż Ż Ż Ż Ż Ż Ż Ż Ż Ż Ż 7 6 5 4 3 2 1 I tak dalej, 3 7 = K N możliwości do przejrzenia

Metody algorytmiczne Algorytmy zachłanne (greedy) Podział na pod-zadania ( divide and conquer ) Rozwiązywanie metodą top-down i bottom-up Algorytmy rekurencyjne Algorytmy iteracyjne Programowanie dynamiczne... Algorytmy heurystyczne Algorytmy probabilistyczne Algorytmy ewolucyjne i genetyczne Sieci neuronowe... J. Mieścicki, Wstęp do Informatyki, część 2 36

Algorytmy zachłanne (greedy) P 383 343 303 524 G W 279 647 Zachłanne rozwiązanie problemu komiwojażera: Dla początku w W, rozwiązanie zachłanne jest takie samo, jak optymalne (1529 km) Dla początku w P, otrzymana ( zachłanna ) trasa ma 1642 km (a najdłuższa trasa ma 1817 km) R J. Mieścicki, Wstęp do Informatyki, część 2 37

Dekompozycja na pod-zadania (divide and conquer) Zadanie A Zadanie A Top-down Pod-zadanie A1 Pod-zadanie A2 Pod-zadanie A1.1 Pod-zadanie A1.2 Bottom-up J. Mieścicki, Wstęp do Informatyki, część 2 38

Rozwiązywanie problemu komiwojażera metodą top-down Żoliborz Grochów Centrum Ochota Gocławek Mokotów J. Mieścicki, Wstęp do Informatyki, część 2 39

Rozwiązywanie problemu komiwojażera metodą top-down Problem wyznaczenia trasy Wyznacz trasę między dzielnicami Wyznacz trasę wewnątrz Mokotowa Wyznacz trasę wewnątrz Gocławka... J. Mieścicki, Wstęp do Informatyki, część 2 40

Możliwe heurystyczne rozwiązanie problemu komiwojażera G P 383 343 303 524 W 279 647 R B Znane rozwiązanie dla 4 miast, Dochodzi piąte (B) Podejście konserwatywne : jak najmniej zmian J. Mieścicki, Wstęp do Informatyki, część 2 41

Rekurencja: sortowanie ze scalaniem (merge sort) Sortowanie: porządkowanie listy nieuporządkowanej, Najpierw: operacja scalania (merging) dwóch list uporządkowanych: G 3 5 22 40 i M=merge(G, D) M=merge(G, D) D j 1 2 5 10 33 45 M 1 2 3 5 5 10 22 33 40 45 k J. Mieścicki, Wstęp do Informatyki, część 2 42

Rekurencja: sortowanie ze scalaniem (merge sort) Function m = sort (lista); 1 Oblicz d = długość lista; Oblicz d = długość lista; nie d == 1 d == 1 tak Podziel lista na listad, listag; 2 3 D = sort (listad); G = sort (listag); 5 Zwróć m = lista; Zwróć m = lista; 4 Zwróć m = merge(d, G); J. Mieścicki, Wstęp do Informatyki, część 2 43

Rekurencyjne wykonanie sortowania ze scalaniem 3, 1, 7, 5 1, 3, 5, 7... sort(3,1) sort(7,5) merge 3, 1 1, 3 7, 5 5, 7... sort(3) sort(1) merge... sort(5) sort(7) merge 3 5 3 1 5 7 1 7 d=1 d=1 d=1 d=1 J. Mieścicki, Wstęp do Informatyki, część 2 44

Rekurencyjne wykonanie sortowania ze scalaniem 1 4 2 3 1 1 4 4 2 3 2 3 1 5 1 5 1 5 1 5 J. Mieścicki, Wstęp do Informatyki, część 2 45

Zasada rekurencyjnego wykonania procedury (funkcji) J. Mieścicki, Wstęp do Informatyki, część 2 46

Wieże Hanoi A B C N krążków Zadanie: Przełożyć wszystkie krążki z patyka A na C (korzystając przy tym z pomocniczego B), Wolno brać jeden krążek na raz, Nie wolno kłaść większego krążka na mniejszym. J. Mieścicki, Wstęp do Informatyki, część 2 47

Wieże Hanoi Przenieś N=2 krążki, akt = A, doc = C, pom = B; A B C akt pom doc J. Mieścicki, Wstęp do Informatyki, część 2 48

Rekurencyjne rozwiązanie problemu wież Hanoi Końcowa zawartość prętów A, B, C Początkowa zawartość prętów A, B, C Liczba krążków do przeniesienia Procedure [A, B, C] = hanoi([a, B, C], n, akt, pom, doc); Nazwa pręta aktualnego Np. [A, B, C] = hanoi([a, B, C], 5, A, B, C); Nazwa pręta pomocniczego Nazwa pręta docelowego oznacza: w zadanym zbiorze prętów [A, B, C] przenieś 5 górnych krążków z A na C, korzystając pomocniczo z B i zwróć nową zawartość [A, B, C] J. Mieścicki, Wstęp do Informatyki, część 2 49

Rekurencyjne rozwiązanie problemu wież Hanoi Procedure [A, B, C] = hanoi([a, B, C], n, akt, pom, doc); If n==2 then Przenieś górny krążek z akt na pom; Przenieś górny krążek z akt na doc; Przenieś górny krążęk z pom na doc; elseif n>2; [A, B, C] = hanoi([a, B, C], n-1, akt, doc, pom); Przenieś górny krążek z akt na doc; [A, B, C] = hanoi([a, B, C], n-1, pom, akt, doc); end; J. Mieścicki, Wstęp do Informatyki, część 2 50

Wieże Hanoi Zadanie to jest często używane jako przykład obrazujący zasadę rekurencyjnego wykonania procedury, Zaletą jest zwartość i estetyczne walory kodu programu, Jednak wykonanie zadania dla N krążków oznacza dwukrotne wykonanie tego samego zadania dla (N-1) krążków (plus coś jeszcze), Złożoność jest więc O(2 N ). J. Mieścicki, Wstęp do Informatyki, część 2 51