Zaawansowane algorytmy. Wojciech Horzelski

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

Wykład 2. Poprawność algorytmów

Sortowanie przez wstawianie

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

Podstawy Informatyki. Sprawność algorytmów

Algorytmy i Struktury Danych.

Algorytmy i struktury danych Matematyka III sem.

Sortowanie przez scalanie

Algorytm. Krótka historia algorytmów

Matematyczne Podstawy Informatyki

Zaliczenie. Egzamin. lub. Wykład. Zaliczenie. Ćwiczenie. 3 zadania. Projekty. Ocena. Na ocenę

TEORETYCZNE PODSTAWY INFORMATYKI

Zasady analizy algorytmów

Podyplomowe Studium Programowania i Systemów Baz Danych

Wprowadzenie do złożoności obliczeniowej

TEORETYCZNE PODSTAWY INFORMATYKI

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

Algorytm. Krótka historia algorytmów

Poprawność semantyczna

Teoretyczne podstawy informatyki

Laboratorium nr 7 Sortowanie

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

Algorytmy i Struktury Danych

Efektywność algorytmów

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

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

Podyplomowe Studium Informatyki

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

Wstęp do programowania

Algorytmy. Programowanie Proceduralne 1

Podstawy Programowania Algorytmy i programowanie

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

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

Algorytmy i Struktury Danych.

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Algorytmy. Programowanie Proceduralne 1

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

Zaawansowane algorytmy i struktury danych

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

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

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

Wykład 4. Sortowanie

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

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

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

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

Sortowanie w czasie liniowym

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

Wykład z Podstaw Informatyki dla I roku BO. Piotr Mika

Algorytmy i struktury danych

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

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

Programowanie w VB Proste algorytmy sortowania

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

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

PRZEWODNIK PO PRZEDMIOCIE

Algorytm selekcji Hoare a. Łukasz Miemus

Algorytmy i struktury danych.

Projektowanie i Analiza Algorytmów

ECDL Podstawy programowania Sylabus - wersja 1.0

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA

Sortowanie przez wstawianie Insertion Sort

Wyszukiwanie. Wyszukiwanie binarne

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

Podstawy Programowania. Złożoność obliczeniowa

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Złożoność Obliczeniowa Algorytmów

Wykład 5. Sortowanie w czasie liniowologarytmicznym

KARTA MODUŁU KSZTAŁCENIA

Krzysztof Gniłka. Twierdzenie o rekurencji uniwersalnej

Informatyka 1. Złożoność obliczeniowa

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

Część I. Uwaga: Akceptowane są wszystkie odpowiedzi merytorycznie poprawne i spełniające warunki zadania. Zadanie 1.1. (0 3)

Twój wynik: 4 punktów na 6 możliwych do uzyskania (66,67 %).

Opis efektów kształcenia dla modułu zajęć

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Algorytmiczna teoria grafów

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

Algorytmy i Struktury Danych. (c) Marcin Sydow. Sortowanie Selection Sort Insertion Sort Merge Sort. Sortowanie 1. Listy dowiązaniowe.

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

Wykład 1 Wprowadzenie do algorytmów. Zawartość wykładu 1. Wstęp do algorytmów i struktur danych 2. Algorytmy z rozgałęzieniami.

PRZEWODNIK PO PRZEDMIOCIE

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

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

Wybrane wymagania dla informatyki w gimnazjum i liceum z podstawy programowej

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

Efektywna metoda sortowania sortowanie przez scalanie

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Algorytmy i Struktury Danych.

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

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

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

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

Programowanie Proceduralne

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

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

1 Wprowadzenie do algorytmiki

Transkrypt:

Zaawansowane algorytmy Wojciech Horzelski 1

Organizacja Wykład: poniedziałek 8 15-10 Aula Ćwiczenia: Każdy student musi realizować projekty (treść podawana na wykładzie) : Ilość projektów : 5-7 Na realizację każdego projektu studenci będą mieli 2 tygodnie Ocena projektów: od 0 do 10 punktów (0 brak projektu, 7 projekt poprawnie wykonany, bez zastrzeżeń, 10 wybitne rozwiązanie) Oddanie projektu tydzień po terminie powoduje utratę 2 punktów (później nie będzie już oceniany) Zaliczenie ćwiczeń: Minimalna ilość punktów na zaliczenie: (ilość projektów-1) * 5+2 Dokładna punktacja dla poszczególnych ocen później (zależna od ilości projektów) Egzamin pisemny ( termin zerowy -?) 2

Tematyka wykładu Wprowadzenie (przypomnienie podstaw) Drzewa binarne i drzewa BST Drzewa AVL i 2-3-4 Drzewa zbalansowane (czerwono-czarne) Tablice z haszowaniem Kompresja danych Wyszukiwanie wzorca w tekście Algorytmy grafowe: Przeszukiwanie (wszerz i w głąb) Drzewo rozpinające Znajdowanie najlepszej drogi Znajdowanie najkrótszych ścieżek pomiędzy wszystkimi wierzchołkami NP - zupełność 3

Literatura T. Cormen, Ch. Lieserson, R. Rivest, Wprowadzenie do Algorytmów, WNT, 1997 R. Sedgewick, Algorytmy w C++, RM, 1999 R. Sedgewick, P. Rzechonek, Algorytmy w C++. Grafy, RM, 2003 4

O co w tym wszystkim chodzi? Rozwiązywanie problemów: Układanie planu zajęć Balansowanie własnego budżet Symulacja lotu samolotem Prognoza pogody Dla rozwiązania problemów potrzebujemy procedur, recept, przepisów inaczej mówiąc algorytmów 5

Historia Nazwa pochodzi od perskiego matematyka Muhammeda ibn Musa Alchwarizmiego (w łacińskiej wersji Algorismus) IX w n.e. Pierwszy dobrze opisany algorytm algorytm Euklidesa znajdowania największego wspólnego podzielnika, 400-300 p.n.e. XIX w. Charles Babbage, Ada Lovelace. XX w. Alan Turing, Alonzo Church, John von Neumann 6

Struktury danych i algorytmy Algorytm metoda, zestaw działań (instrukcji) potrzebnych do rozwiązania problemu Program implementacja algorytmu w jakimś języku programowania Struktura danych organizacja danych niezbędna dla rozwiązania problemu (metody dostępu etc.) 7

Ogólne spojrzenie Wykorzystanie komputera: Projektowanie programów (algorytmy, struktury danych) Pisanie programów (kodowanie) Weryfikacja programów (testowanie) Cele algorytmiczne: - poprawność, - efektywność, Cele implementacji: - zwięzłość - możliwość powtórnego wykorzystania 8

Problemy algorytmiczne Specyfikacja wejścia? Specyfikacja wyjścia, jako funkcji wejścia Ilość instancji danych spełniających specyfikację wejścia może być nieskończona, np.: posortowana niemalejąco sekwencja liczb naturalnych, o skończonej długości: 1, 20, 908, 909, 100000, 1000000000. 3, 44, 211, 222, 433. 3. 9

Rozwiązanie problemu Instancja wejściowa (dane), odpowiadająca specyfikacji algorytm Wyniki odpowiadające danym wejściowym Algorytm opisuje działania, które mają zostać przeprowadzone na danych Może istnieć wiele algorytmów rozwiązujących ten sam problem 10

Definicja algorytmu Algorytmem nazywamy skończoną sekwencję jednoznacznych instrukcji pozwalających na rozwiązanie problemu, tj. na uzyskanie pożądanego wyjścia dla każdego legalnego wejścia. Własności algorytmów: określoność skończoność poprawność ogólność dokładność 11

Pseudokod Zbliżony do Ady, C, Javy czy innego języka programowania: struktury sterujące (if then else, pętle while i for) przypisanie ( ) dostęp do elementów tablicy: A[i] dla typów złożonych (record lub object) dostęp do pól: A.b zmienna reprezentująca tablicę czy obiekt jest traktowana jak wskaźnik do tej struktury (podobnie, jak w C). 12

Warunki początkowe i końcowe (precondition, postcondition) Ważne jest sprecyzowanie warunków początkowego i końcowego dla algorytmu: INPUT: określenie jakie dane algorytm powinien dostać na wejściu OUTPUT: określenie co algorytm powinien wyprodukować. Powinna zostać przewidziana obsługa specjalnych przypadków danych wejściowych 13

Sortowanie przez wstawianie (Insertion Sort) A Strategia zaczynamy od od pustej pustej ręki ręki wkładamy kartę kartęwe we właściwe miejsce kart kart poprzednio już już posortowane kontynuujemy takie takie postępowanie aż ażwszystkie karty karty zostaną wstawione 3 4 6 8 9 7 2 5 1 1 j n i INPUT: INPUT: A[1..n] A[1..n] tablica tablica liczb liczb całkowitych OUTPUT: permutacja A taka, taka, że że A[1] A[1] A[2] A[n] for forj 2 to to n do dokey A[j] wstaw wstawa[j] A[j] do do posortowanej sekwencji A[1..j-1] i j-1 while while i>0 i>0 and and A[i]>key do do A[i+1] A[i] i-- i-- A[i+1] key 14

Analiza algorytmów Efektywność: Czas działania Wykorzystanie pamięci Efektywność jako funkcja rozmiaru wejścia: Ilość danych wejściowych (liczb, punktów, itp.) Ilość bitów w danych wejściowych 15

Analiza sortowania przez wstawianie Określany czas wykonania jako funkcję rozmiaru wejścia for j 2 to n do key A[j] wstaw A[j] do posortowanej sekwencji A[1..j-1] i j-1 while i>0 and A[i]>key do A[i+1] A[i] i-- A[i+1]:=key czas c 1 c 2? c 3 c 4 c 5 c 6 c 7 ile razy n n-1 n-1 n-1 n t j 2 j n ( t 1) j 2 j n = ( t 1) j 2 j = n-1 = 16

Przypadki: najlepszy/najgorszy/średni Najlepszy przypadek: elementy już są posortowane t j =1, czas wykonania liniowy (Cn). Najgorszy przypadek: elementy posortowane nierosnąco (odwrotnie posortowane) t j =j, czas wykonania kwadratowy (Cn 2 ) Przypadek średni : t j =j/2, czas wykonania kwadratowy (Cn 2 ) 17

Przypadki: najlepszy/najgorszy/średni Dla ustalonego n czas wykonania dla poszczególnych instancji: 6n 5n 4n 3n 2n 1n 18

Przypadki: najlepszy/najgorszy/średni Dla różnych n: najgorszy przypadek Czas działania 6n 5n 4n 3n 2n 1n średni przypadek najlepszy przypadek 1 2 3 4 5 6 7 8 9 10 11 12.. Rozmiar wejścia 19

Przypadki: najlepszy/najgorszy/średni Analizę najgorszego przypadku stosuje się zwykle wtedy, kiedy czas działania jest czynnikiem krytycznym (kontrola lotów, sterowanie podawaniem leków itp.) Dla pewnych zadań najgorsze przypadki mogą występować dość często. Określenie przypadku średniego (analiza probabilistyczna) jest często bardzo kłopotliwe 20

Poprawność praktyczna i całkowita Praktyczna Jeśli ten punkt został osiągnięty to otrzymaliśmy poprawny wynik Poprawne dane algorytm Wynik Całkowita poprawność Ten punkt został osiągnięty i otrzymaliśmy poprawny wynik Poprawne dane algorytm Wynik 21

Dowodzenie W celu dowiedzenia poprawności algorytmu wiążemy ze specyficznymi miejscami algorytmu stwierdzenia (dotyczące stanu wykonania). np., A[1],, A[k] są posortowane niemalejąco Warunki początkowe (Precondition) stwierdzenia, których prawdziwość zakładamy przed wykonaniem algorytmu lub podprogramu (INPUT) Warunki końcowe (Postcondition) stwierdzenia, które muszą być prawdziwe po wykonaniu algorytmu lub podprogramu (OUTPUT) 22

Niezmienniki pętli Niezmienniki stwierdzenia prawdziwe za każdym razem kiedy osiągany jest pewien punkt algorytmu (może to zdarzać się wielokrotnie w czasie wykonania algorytmu, np. w pętli) Dla niezmienników pętli należy pokazać : Inicjalizację prawdziwość przed pierwszą iteracją Zachowanie jeśli stwierdzenie jest prawdziwe przed iteracją to pozostaje prawdziwe przed następną iteracją Zakończenie kiedy pętla kończy działanie niezmiennik daje własność przydatną do wykazania poprawności algorytmu 23

Przykład: sortowanie przez wstawianie niezmiennik: na początku każdego wykonania pętli for, A[1 j-1] składa się z posortowanych elementów for forj=2 to to length(a) do dokey key A[j] i j-1 j-1 while while i>0 i>0 and and A[i]>key do do A[i+1] A[i] A[i] i-- i-- A[i+1] key key inicjalizacja: j = 2, niezmiennik jest trywialny, A[1] jest zawsze posortowana zachowanie: wewnątrz pętli while przestawia się elementy A[j-1], A[j-2],, A[j-k] o jedną pozycję bez zmiany ich kolejności. Element A[j] jest wstawiany na k-tą pozycję, tak że A[k-1] A[k] A[k+1]. Stąd A[1..j-1] jest posortowane. zakończenie: kiedy pętla się kończy (j=n+1) niezmiennik oznacza, że cała tablica została posortowana. 24

Notacje asymptotyczne Cel: uproszczenie analizy czasy wykonania, zaniedbywanie szczegółów, które mogą wynikać ze specyficznej implementacji czy sprzętu zaokrąglanie dla liczb: 1,000,001 1,000,000 zaokrąglanie dla funkcji: 3n 2 n 2 Główna idea: jak zwiększa się czas wykonania algorytmu wraz ze wzrostem rozmiaru wejścia (w granicy). Algorytm asymptotycznie lepszy będzie bardziej efektywny dla prawie wszystkich rozmiarów wejść (z wyjątkiem być może małych ) 25

Notacje asymptotyczne Notacja O (duże O) Asymptotyczne ograniczenie górne f(n) = O(g(n)), jeżeli istnieje stała c i n 0, takie, że f(n) c g(n) dla n n 0 f(n) i g(n) są nieujemnymi funkcjami całkowitymi Korzysta się z niej przy analizie najgorszego przypadku. Czas działania c g( n) f (n) n0 Rozmiar wejścia 26

Notacje asymptotyczne Notacja Ω (duża Ω) Asymptotyczne ograniczenie dolne f(n) = Ω(g(n)) jeśli istnieje stała c i n 0, takie, że c g(n) f(n) dla n n 0 Opisuje najlepsze możliwe zachowanie się algorytmu Czas działania f (n ) c g( n) n 0 Rozmiar wejścia 27

Notacje asymptotyczne Prosta zasada: odrzucamy mniej istotne dla czasu składniki i czynniki stałe. 50 n log n jest O(n log n) 7n - 3 jest O(n) 8n 2 log n + 5n 2 + n jest O(n 2 log n) O jest ograniczeniem górnym więc np. (50 n log n) jest typu O(n 5 ), ale interesuje nas najlepsze możliwe oszacowanie w tym przypadku jest to O(n log n) 28

Notacje asymptotyczne Notacja Θ (duża Θ ) Dokładne oszacowanie asymptotyczne f(n) = Θ(g(n)) jeżeli istnieją stałe c 1, c 2, i n 0, takie, że c 1 g(n) f(n) c 2 g(n) dla n n 0 f(n) = Θ(g(n)) wtedy i tylko wtedy, gdy f(n) = Ο(g(n)) i f(n) = Ω(g(n)) Czas działania c g (n) 2 f (n ) c g (n) 1 n 0 Rozmiar wejścia 29

Notacje asymptotyczne Analogie do zależności pomiędzy liczbami: f(n) = O(g(n)) f g f(n) = Ω(g(n)) f g f(n) = Θ(g(n)) f = g f(n) = o(g(n)) f < g f(n) = ω(g(n)) f > g Zwykle zapisujemy: f(n) = O(g(n)), co formalnie powinno być rozumiane jako f(n) O(g(n)) 30

Porównanie czasów wykonania Maksymalny rozmiar problemu (n) 1 sekunda 1 minuta 1 godzina 400n 2500 150000 9000000 20n log n 4096 166666 7826087 2n 2 707 5477 42426 n 4 31 88 244 2 n 19 25 31 31