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

Podobne dokumenty
Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

Efektywność Procedur Obliczeniowych. wykład 5

Algorytmy i Struktury Danych.

PRZEWODNIK PO PRZEDMIOCIE

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

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

KARTA KURSU. Algorytmy, struktury danych i techniki programowania. Algorithms, Data Structures and Programming Techniques

Zaawansowane algorytmy. Wojciech Horzelski

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

Wstęp do programowania

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Algorytmy i struktury danych, C3

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Realizacja w roku akademickim 2016/17

Zał nr 4 do ZW. Dla grupy kursów zaznaczyć kurs końcowy. Liczba punktów ECTS charakterze praktycznym (P)

Projektowanie i analiza algorytmów

KARTA MODUŁU KSZTAŁCENIA

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

KARTA PRZEDMIOTU. Algorytmy i struktury danych, C4

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

Algorytmy i struktury danych.

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

Matematyczne podstawy informatyki Mathematical Foundations of Computational Sciences. Matematyka Poziom kwalifikacji: II stopnia

Podstawy Informatyki. Sprawność algorytmów

Wprowadzenie do złożoności obliczeniowej

Sortowanie przez scalanie

Informatyka 1. Złożoność obliczeniowa

Zasady analizy algorytmów

Matematyczne Podstawy Informatyki

PROBLEMY NIEROZSTRZYGALNE

Zaawansowane algorytmy i struktury danych

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Realizacja w roku akademickim 2016/17

Sortowanie przez wstawianie

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski

Sylabus modułu: Matematyczne podstawy informatyki (kod modułu:03-mo2n-12-mpln)

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

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Algorytmy i struktury danych

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

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

Algorytmy i struktury danych

Algorytmy Równoległe i Rozproszone Część X - Algorytmy samostabilizujące.

Algorytmy i Struktury Danych

koordynator modułu dr hab. Michał Baczyński rok akademicki 2012/2013

Wykład 8. Drzewo rozpinające (minimum spanning tree)

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

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

Lista 6 Problemy NP-zupełne

Podstawy Programowania. Złożoność obliczeniowa

WYDZIAŁ PODSTAWOWYCH PROBLEMÓW TECHNIKI KARTA PRZEDMIOTU

INFORMATYKA SORTOWANIE DANYCH.

Projektowanie i Analiza Algorytmów

Podstawy Programowania

Podstawy Programowania. Złożoność obliczeniowa

IZ2ZSD2 Złożone struktury danych Advanced data structures. Informatyka II stopień ogólnoakademicki niestacjonarne

Wprowadzenie do algorytmów / Thomas H. Cormen [et al.]. - wyd. 7. Warszawa, Spis treści. Wprowadzenie 2

Grafy i sieci w informatyce - opis przedmiotu

Złożoność obliczeniowa. wykład 1

Języki, automaty i obliczenia

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

Podstawy Programowania

Instytut Ekonomiczny 9 kierunek studiów

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

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

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

Algorytmy i struktury danych Metody programowania Języki i paradygmaty programowania Nazwa jednostki prowadzącej przedmiot Instytut Matematyki

Programowanie dynamiczne i algorytmy zachłanne

Załącznik KARTA PRZEDMIOTU. KARTA PRZEDMIOTU Wydział Automatyki, Elektroniki i Informatyki, Rok akademicki: 2009/2010

Podyplomowe Studium Informatyki

Kierunek i poziom studiów: Matematyka, studia I stopnia (licencjackie), rok I

Wykład 2. Poprawność algorytmów

ID2ZSD2 Złożone struktury danych Advanced data structures. Informatyka II stopień ogólnoakademicki stacjonarne

Algorytmy i Struktury Danych

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

Załącznik Nr 5 do Zarz. Nr 33/11/ Kod przedmiotu:aisd2

PRZEWODNIK PO PRZEDMIOCIE

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Projektowanie i analiza algorytmów

KARTA PRZEDMIOTU. 1. NAZWA PRZEDMIOTU: Struktury danych i algorytmy. 2. KIERUNEK: Matematyka. 3. POZIOM STUDIÓW: I stopnia

Typy algorytmów losowych. ALP520 - Wykład z Algorytmów Probabilistycznych p.2

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

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

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

dodatkowe operacje dla kopca binarnego: typu min oraz typu max:

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

Rozdział 4. Algorytmy sortowania 73 Rozdział 5. Typy i struktury danych 89 Rozdział 6. Derekursywacja i optymalizacja algorytmów 147

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Algorytmy. Programowanie Proceduralne 1

WYDZIAŁ MATEMATYKI KARTA PRZEDMIOTU

Algorytmy i Struktury Danych.

Sortowanie - wybrane algorytmy

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

ALGORYTMY I STRUKTURY DANYCH

Problem decyzyjny naley do klasy NP. (Polynomial), jeeli moe by rozwizany w czasie conajwyej wielomianowym przez algorytm A dla DTM.

Algorytmy i struktury danych Matematyka III sem.

Poprawność semantyczna

S Y L A B U S. język polski. Forma zaliczenia laboratorium 10 ZO 2 4 wykład 6 ZO Razem 16 2

KARTA MODUŁU KSZTAŁCENIA

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

Podstawowe algorytmy i ich implementacje w C. Wykład 9

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

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Transkrypt:

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

Formy zajęć: Wykład 1 godz., Ćwiczenia 2 godz., Projekt 1 godz.. Strona kursu: http://www.zio.iiar.pwr.wroc.pl/sdizo.html

Struktury danych wchodzące w zakres kursu: Tablice, Listy, Kolejki, Stosy, Kopce, Grafy, Drzewa binarne, Tablice haszujące.

Plan 1. wykładu: 1. Podstawowe zasady analizy algorytmów: poprawność, skończoność, 2. Złożoność obliczeniowa (klasy złożoności czasowej i pamięciowej), 3. Koszt zamortyzowany, 4. Polskie Ramy Kwalifikacyjne przedmiotu, Literatura.

Podstawowe zasady analizy algorytmów: poprawność, skończoność Algorytm to procedura do rozwiązywania problemu. Algorytm może być wyrażony w: Języku naturalnym, Języku formalnym, Języku zawierającym konstrukcje języka naturalnego i formalnego, Schematem blokowym, Diagramem aktywności (czynności) języka UML, Pseudokodzie, Języku programowania.

Podstawowe zasady analizy algorytmów: poprawność, skończoność Algorytm rozwiązywania danego problemu obliczeniowego jest poprawny, jeśli dla każdej instancji (egzemplarza) tego problemu zatrzymuje się i daje dobry wynik.

Podstawowe zasady analizy algorytmów: poprawność, skończoność

Podstawowe zasady analizy algorytmów: poprawność, skończoność

Podstawowe zasady analizy algorytmów: poprawność, skończoność Poprawność algorytmów Niezmiennik (ang. invariant) pętli jest warunkiem, który: Inicjowanie: Jest prawdziwy przed pierwszą iteracją pętli, Niezmienniczość: Jeśli jest prawdziwy przed pewną iteracją pętli, to jest prawdziwy przed następną iteracją, Kończenie: Po zakończeniu pętli, z niezmiennika można udowodnić poprawność algorytmu. Własność stopu: dla poprawnych danych wejściowych algorytm zatrzymuje się w skończonym czasie.

Podstawowe zasady analizy algorytmów: poprawność, skończoność

Podstawowe zasady analizy algorytmów: poprawność, skończoność Algorytm sortowania bąbelkowego niemalejąco w kodzie C void bubblesort(int table[], int size) { int i, j, temp; for (i = 0; i<size; i++) { for (j=0; j<size-1-i; j++) { if (table[j] > table[j+1]) { temp = table[j+1]; table[j+1] = table[j]; table[j] = temp; } } } }

Podstawowe zasady analizy algorytmów: poprawność, skończoność

Podstawowe zasady analizy algorytmów: poprawność, skończoność 1 12 3 9 8 2 11 9 15 17 23 29 nieposortowane posortowane

Złożoność obliczeniowa czasowa Problemy rozstrzygalne i nierozstrzygalne Problem rozstrzygalny (rozwiązywalny) to problem, dla którego istnieje algorytm znajdujący rozwiązanie w skończonej liczbie kroków. Problem nierozstrzygalny (nierozwiązywalny) to problem, dla którego udowodniono, że nie istnieje algorytm znajdujący rozwiązanie w skończonej liczbie kroków. Złożoność obliczeniową badamy dla problemów rozstrzygalnych.

Złożoność obliczeniowa czasowa

Złożoność obliczeniowa czasowa Przykłady problemów o więcej niż jednym rozmiarze danych: Problem mnożenia macierzy nie kwadratowych 3 rozmiary, Problemy grafowe rozmiarami mogą być: liczba wierzchołków, liczba łuków.

Złożoność obliczeniowa czasowa Wg teorii złożoności obliczeniowej efektywnym jest algorytm o złożoności czasowej ograniczonej od góry przez wielomian od rozmiarów problemu. Algorytmy o wykładniczej złożoności obliczeniowej uważane są za nieefektywne.

Złożoność obliczeniowa czasowa

Złożoność obliczeniowa czasowa

Dwie galaktyki z efektami soczewkowania grawitacyjnego [Zdjęcie wykonane teleskopem Hubble a]

Złożoność obliczeniowa czasowa

Złożoność obliczeniowa czasowa

Złożoność obliczeniowa czasowa

Złożoność obliczeniowa czasowa

Złożoność obliczeniowa czasowa

Złożoność obliczeniowa czasowa

Złożoność obliczeniowa czasowa

Złożoność obliczeniowa czasowa

Złożoność obliczeniowa czasowa Algorytm sortowania bąbelkowego w kodzie C void bubblesort(int table[], int size) { int i, j, temp; for (i = 0; i<size; i++) { for (j=0; j<size-1-i; j++) { if (table[j] > table[j+1]) { temp = table[j+1]; table[j+1] = table[j]; table[j] = temp; } } } }

Złożoność obliczeniowa czasowa

Złożoność obliczeniowa czasowa

Złożoność obliczeniowa czasowa Problem: Czy istnieje algorytm wielomianowy dla problemu podziału zbioru?

Złożoność obliczeniowa czasowa i pamięciowa

Złożoność obliczeniowa czasowa Problem: Czy istnieje algorytm wielomianowy dla problemu podziału zbioru? Udowodniono: Problem podziału zbioru jest tzw. Problemem NPzupełnym, tzn. z jego rozwiązania można wyznaczyć rozwiązanie każdego problemu klasy NP. Dla problemów NP-zupełnych wydaje się prawie pewne, że algorytmu wielomianowego nie uda się zbudować.

Złożoność obliczeniowa czasowa

Złożoność obliczeniowa czasowa Czy rozwiązanie jednego z dwu problemów: Decyzyjnego problemu szeregowania zadań niezależnych na dwu maszynach i Problemu podziału zbioru można wyznaczyć na postawie rozwiązania drugiego? Powyższe pytanie dotyczy redukcji (transformacji) jednego problemu do drugiego.

Złożoność obliczeniowa czasowa

Jakie ograniczenie narzucilibyśmy na złożoność obliczeniową transformacji? Złożoność obliczeniowa czasowa Czy rozwiązanie jednego z dwu problemów: Decyzyjnego problemu szeregowania zadań niezależnych na dwu maszynach i Problemu podziału zbioru można wyznaczyć na postawie rozwiązania drugiego? Powyższe pytanie dotyczy redukcji (transformacji) jednego problemu do drugiego.

Złożoność obliczeniowa czasowa Problem charakteryzowany jest poprzez Dane (dane wejściowe) i Zadanie do wykonania (np. Prob. opt.) lub Dane (dane wejściowe) i Pytanie (Prob. dec.).

Złożoność obliczeniowa czasowa

Lepiej nie mówić: Dla problemu NP-zupełnego najprawdopodobniej nie zostanie znaleziony wielomianowy algorytm rozwiązujący. Złożoność obliczeniowa czasowa i pamięciowa Złożoność obliczeniowa algorytmu a złożoność problemu Algorytm rozwiązujący problem może mieć czasową lub pamięciową złożoność obliczeniową logarytmiczną, liniową, wielomianową, wykładniczą lub wiele innych. Złożoność obliczeniowa problemu określa wymagania czasowe lub pamięciowe na algorytm rozwiązujący ten problem. Jeśli problem jest NP-zupełny, to prawie na pewno nie zostanie znaleziony wielomianowy algorytm rozwiązujący.

Złożoność obliczeniowa czasowa i pamięciowa P klasa problemów, dla których rozwiązania wymagany jest czas ograniczony od góry przez wielomian od rozmiarów problemu, PSPACE klasa problemów, dla których rozwiązania wymagana jest pamięć ograniczona przez wielomian od rozmiarów problemu, EXPTIME klasa problemów, dla których rozwiązania wymagany jest czas ograniczony przez funkcję wykładniczą od rozmiarów problemu, EXPSPACE klasa problemów, dla których rozwiązania wymagana jest pamięć ograniczona przez funkcję wykładniczą od rozmiarów problemu,

Złożoność obliczeniowa czasowa i pamięciowa

Złożoność obliczeniowa czasowa i pamięciowa

Złożoność obliczeniowa czasowa i pamięciowa [Źródło Wikipedia] P EXPTIME, PSPACE EXPSPACE

Koszt zamortyzowany

(Pr) ( A) ( B) ( C) ( D) Koszt zamortyzowany Assumption Execution times of operations, actions or statements are given by a real number. Start A B C D End Linear program Pr where A, B, C, D are operations, actions or statements ( A) R - execution time of A Execution time of the program Pr (Pr) ( A) ( B) ( C) ( D) [J. Magott, Information Systems Analysis]

Koszt zamortyzowany P B Start A D End 1-P C A program with decision ( D) execution time of decision D P probability of an event that after the decision D, the B action is executed If ( B) ( C) then execution time of the program depends on the decision.

Koszt zamortyzowany Execution time estimation methods P B Start A D End 1-P C 1. The worst case method w (Pr) ( A) ( D) max{ ( B), ( C)} w (Pr) - execution time estimation of the worst case Application: real-time systems.

Koszt zamortyzowany 2. The most probable path method P B Start A D End 1-P C If P>1-P then If P<1-P then g (Pr) ( A) ( D) ( B) g (Pr) ( A) ( D) ( C)

Koszt zamortyzowany P B Start A D 1-P C a ( B) ( C) (Pr) ( A) ( D) 2 End m (Pr) ( A) ( D) P ( B) ( 1 P) ( C)

Koszt zamortyzowany Czasowa złożoność obliczeniowa średniego przypadku P B Start A D End 1-P C m (Pr) ( A) ( D) P ( B) ( 1 P) ( C) Struktury sterowania: Kompozycja sekwencyjna, Alternatywa, Instrukcje pętli: for, while, do while, Instrukcja przełączania switch.

Koszt zamortyzowany Czasowa złożoność obliczeniowa średniego przypadku P B Start A D End 1-P C m (Pr) ( A) ( D) P ( B) ( 1 P) ( C) Metody wyznaczania: Analityczna na podstawie prawdopodobieństw rozgałęzień i rozkładów czasów wykonania instrukcji, Symulacyjna metoda Monte Carlo na podstawie analogicznych danych.

Koszt zamortyzowany (Notacja asymptotyczna)

Koszt zamortyzowany (Notacja asymptotyczna)

Koszt zamortyzowany (Notacja asymptotyczna)

Koszt zamortyzowany (Notacja asymptotyczna)

Koszt zamortyzowany (Notacja asymptotyczna)

Koszt zamortyzowany Operacja 1 Operacja 2 Operacja n

Koszt zamortyzowany Cel: Znalezienie jak najmniejszego pesymistycznego kosztu wykonania algorytmu. Sposób osiągnięcia: Wyznaczenie kosztu zamortyzowanego algorytmu co nie wymaga wyznaczania wielkości probabilistycznych.

Koszt zamortyzowany Metody analizy kosztu zamortyzowanego: Kosztu sumarycznego, Księgowania, Potencjału.

Koszt zamortyzowany (Metoda kosztu sumarycznego)

Koszt zamortyzowany (Metoda kosztu sumarycznego)

Koszt zamortyzowany (Metoda kosztu sumarycznego)

Koszt zamortyzowany (Metoda kosztu sumarycznego) MULTIPOP(S,4) 7 11 3 22 15 19 20 7 11 3 MULTIPOP(S,8) Pusty stos S

Koszt zamortyzowany (Metoda kosztu sumarycznego)

Koszt zamortyzowany (Metoda księgowania)

Koszt zamortyzowany (Metoda księgowania)

Koszt zamortyzowany (Metoda księgowania)

Koszt zamortyzowany (Metoda księgowania)

Trzy następujące slajdy pochodzą z Polskich Ram Kwalifikacyjnych kursu Struktury danych i złożoność obliczeniowa

Forma zajęć - wykład Wy1 Podstawowe zasady analizy algorytmów: poprawność, złożoność obliczeniowa (klasy złożoności czasowej i pamięciowej), koszt zamortyzowany. 2 Polskie Ramy Kwalifikacyjne przedmiotu. Literatura. Wy2 Podstawowe techniki: metoda dziel i zwyciężaj, metoda zachłanna, transformacyjna konstrukcja algorytmu. 1 Wy3 Podstawowe struktury: stosy, kolejki, listy, kopce. 1 Wy4 Wy5 Wy6 Wy7 Kodowanie dziesiętne, dwójkowe i jedynkowe danych wejściowych problemu. Rozsądna reguła kodowania. Problemy łatwe i trudne. Problemy optymalizacyjne i decyzyjne. Funkcja czasowej złożoności obliczeniowej algorytmu. Deterministyczna jednotaśmowa maszyna Turinga. Przykładowy program dla deterministycznej maszyny Turinga. Program dla k-taśmowej deterministycznej maszyny Turinga. Dodawanie liczb dwójkowych na deterministycznych maszynach Turinga. Model obliczeń RAM. Algorytmy wielomianowy i ponadwielomianowy. Niedeterministyczna maszyna Turinga. Twierdzenie o relacji między Niedeterministyczną a Deterministyczną Maszyną Turinga. Klasy P i NP problemów decyzyjnych. Transformacja wielomianowa. Problem NP-zupełny. Dowodzenie NP-zupeł- 1 2 2 2

Polskie Ramy Kwalifikacyjne przedmiotu. Literatura. Wy2 Podstawowe techniki: metoda dziel i zwyciężaj, metoda zachłanna, transformacyjna konstrukcja algorytmu. 1 Wy3 Podstawowe struktury: stosy, kolejki, listy, kopce. 1 Wy4 Wy5 Wy6 Wy7 Kodowanie dziesiętne, dwójkowe i jedynkowe danych wejściowych problemu. Rozsądna reguła kodowania. Problemy łatwe i trudne. Problemy optymalizacyjne i decyzyjne. Funkcja czasowej złożoności obliczeniowej algorytmu. Deterministyczna jednotaśmowa maszyna Turinga. Przykładowy program dla deterministycznej maszyny Turinga. Program dla k-taśmowej deterministycznej maszyny Turinga. Dodawanie liczb dwójkowych na deterministycznych maszynach Turinga. Model obliczeń RAM. Algorytmy wielomianowy i ponadwielomianowy. Niedeterministyczna maszyna Turinga. Twierdzenie o relacji między Niedeterministyczną a Deterministyczną Maszyną Turinga. Klasy P i NP problemów decyzyjnych. Transformacja wielomianowa. Problem NP-zupełny. Dowodzenie NP-zupełności problemów decyzyjnych. Wy8 Dowody NP-zupełności wybranych problemów 2 Wy9 Kolokwium 2 Suma godzin 15 1 2 2 2

Ćw1 Forma zajęć - ćwiczenia Zajęcia wprowadzające. Omówienie programu, podanie wymagań. Liczba godzin Ćw2 Podstawowe zasady analizy algorytmów 2 Ćw3 Podstawowe struktury danych: kolejki, listy, stosy, kopce 3 Ćw4 Struktury drzewiaste: BST, AVL, B-R, B-drzewo 5 Ćw5 Algorytmy sortowania np. Insertion-, Quick-, Merge-, Heap-, Radix- Ćw6 Tablice haszujące 2 Ćw7 Algorytmy selekcji: Hoare a, magicznych piątek 1 Ćw8 Algorytmy grafowe: reprezentacja grafów, metody przeszukiwania, minimalne drzewa rozpinające, 6 problemy ścieżkowe Ćw9 Wybrane problemy złożoności obliczeniowej: model maszyny Turinga (DTM, NDTM), redukcja wielomianowa 5 Ćw10 Kolokwium 2 Suma godzin 30 1 3

Pr1 Pr2 Pr3 Forma zajęć projekt Sprawy organizacyjne, omówienie zadań projektowych, wymagań oraz warunków zaliczenia. Badanie efektywności operacji na danych w podstawowych strukturach danych. Liczba godzin Badanie efektywności wybranych algorytmów grafowych np. w zależności od rozmiaru, struktury czy sposobu 8 reprezentacji grafu. Suma godzin 15 2 5

Oceny (F formująca (w trakcie semestru), P podsumowująca (na koniec semestru) F1 F2 F3 Sposób oceny osiągnięcia efektu kształcenia Odpowiedzi ustne, Wyniki kolokwiów cząstkowych. Wyniki realizacji zadań projektowych Kolokwium pisemne

Literatura [1] T. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein, Wprowadzenie do algorytmów, WNT 2007. [2] J. Błażewicz, Problemy optymalizacji kombinatorycznej, PWN, Warszawa 1996. [3] M. Garey, D. Johnson, Computers and Intractability: A Guide to the Theory of NP- Completeness, W. H. Freeman and Co., New York, 1979.