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.