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

Podobne dokumenty
Zaawansowane algorytmy. Wojciech Horzelski

Wykład 2. Poprawność algorytmów

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

Sortowanie przez scalanie

Sortowanie przez wstawianie

Matematyczne Podstawy Informatyki

Algorytmy i Struktury Danych.

Laboratorium nr 7 Sortowanie

Algorytm. Krótka historia algorytmów

Sortowanie w czasie liniowym

Algorytm selekcji Hoare a. Łukasz Miemus

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Algorytmy komputerowe. dr inŝ. Jarosław Forenc

Algorytm. Krótka historia algorytmów

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

Algorytmy i Struktury Danych.

Podstawy Programowania Algorytmy i programowanie

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

Algorytmy. Programowanie Proceduralne 1

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

Wykład 4. Sortowanie

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

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

Algorytmy. Programowanie Proceduralne 1

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

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

Analiza algorytmów zadania podstawowe

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

Podstawy Informatyki. Sprawność algorytmów

Analiza algorytmów zadania podstawowe

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

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

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

Algorytmy i struktury danych Matematyka III sem.

Podyplomowe Studium Programowania i Systemów Baz Danych

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 7 Algorytmy

Sortowanie przez wstawianie Insertion Sort

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

Algorytmy komputerowe. dr inż. Jarosław Forenc

Strategia "dziel i zwyciężaj"

Projektowanie i Analiza Algorytmów

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Programowanie w VB Proste algorytmy sortowania

Zasady analizy algorytmów

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

Algorytmy i Struktury Danych, 2. ćwiczenia

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Podstawy programowania. Wykład 3 Konstrukcje sterujące. Krzysztof Banaś Podstawy programowania 1

1 Wprowadzenie do algorytmiki

Programowanie Proceduralne

Poprawność semantyczna

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

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

Informatyka A. Algorytmy

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

Wstęp do programowania

Programowanie dynamiczne

Drzewa poszukiwań binarnych

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

Wybrane wymagania dla informatyki w gimnazjum i liceum z podstawy programowej

Programowanie, algorytmy i struktury danych

Wykład 6. Wyszukiwanie wzorca w tekście

Technologie Informacyjne

Wykład IV Algorytmy metody prezentacji i zapisu Rzut oka na język PASCAL

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

Algorytmy i Struktury Danych. (c) Marcin Sydow. Introduction. QuickSort. Sortowanie 2. Limit. CountSort. RadixSort. Summary

Algorytm. a programowanie -

PODSTAWY INFORMATYKI wykład 5.

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

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

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

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Podstawy Programowania 1 Sortowanie tablic jednowymiarowych. Plan. Sortowanie. Sortowanie Rodzaje sortowania. Notatki. Notatki. Notatki.

Podyplomowe Studium Informatyki

Wstęp do programowania

Definicje. Algorytm to:

Sortowanie - wybrane algorytmy

KARTA MODUŁU KSZTAŁCENIA

Podstawy programowania. Podstawy C# Przykłady algorytmów

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

Zadanie projektowe 1: Struktury danych i złożoność obliczeniowa

Algorytmy i Struktury Danych, 2. ćwiczenia

Metodyki i techniki programowania

Jeszcze o algorytmach

Wstęp do programowania

Metodyka i Technika Programowania 1

Struktury Danych i Złożoność Obliczeniowa

Zaawansowane algorytmy i struktury danych

Algorytmy, reprezentacja algorytmów.

O LICZBACH NIEOBLICZALNYCH I ICH ZWIĄZKACH Z INFORMATYKĄ

Algorytmy i struktury danych

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

PRZEWODNIK PO PRZEDMIOCIE

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

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

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

Zapis algorytmów: schematy blokowe i pseudokod 1

Nowa podstawa programowa przedmiotu informatyka w szkole ponadpodstawowej

Transkrypt:

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

Tematyka wykładu Ø Ø Ø Ø Ø Wprowadzenie Poprawność algorytmów (elementy analizy algorytmów) Wyszukiwanie Sortowanie Elementarne i abstrakcyjne struktury danych 2

Literatura T. Cormen, Ch. Lieserson, R. Rivest, Wprowadzenie do Algorytmów, WNT, 1997 R. Sedgewick, Algorytmy w C++, RM, 1999 N. Wirth, Algorytmy + struktury danych = programy, WNT, 2001 3

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

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 5

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.) 6

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 7

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. 8

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 9

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ść 10

Przykład 1: poszukiwanie Wejście: uporządkowany niemalejąco ciąg n (n >0) liczb liczba a 1, a 2, a 3,.,a n ; q Wyjście: indeks (pozycja) odnalezionej wartości lub NIL j 2 5 6 10 11; 5 2 2 5 6 10 11; 9 NIL 11

Przykład 1: poszukiwanie liniowe INPUT: A[1..n] tablica liczb, q liczba całkowita. OUTPUT: indeks j taki, że A[j] = q. NIL, jeśli j (1 j n): A[j] q j 1 while j n and A[j] q do j++ if j n then return j else return NIL Ø Ø Ø Algorytm wykorzystuje metodę siłową (brute-force) przegląda kolejno elementy tablicy. Kod napisany jest w jednoznacznym pseudojęzyku (pseudokodzie). Wejście (INPUT) i wyjście (OUTPUT) zostały jasno określone. 12

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). 13

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 14

Przykład 2: sortowanie Wejście ciąg n liczb Wyjście Permutacja wejściowego ciągu a 1, a 2, a 3,.,a n Sort b 1,b 2,b 3,.,b n 2 5 4 10 7 2 4 5 7 10 poprawność wyjścia: Dla każdego wejścia algorytm po zakończeniu działania powinien dać jako wynik b 1, b 2,, b n takie, że: b 1 < b 2 < b 3 <. < b n b 1, b 2, b 3,., b n jest permutacją a 1, a 2, a 3,.,a n 15

Sortowanie przez wstawianie (Insertion Sort) Strategia A zaczynamy od pustego ciągu ( pustej ręki ) wkładamy kartę we właściwe miejsce wśród kart poprzednio już posortowanych kontynuujemy takie postępowanie aż wszystkie karty zostaną wstawione 3 4 6 8 9 7 2 5 1 1 j n i INPUT: A[1..n] tablica liczb całkowitych OUTPUT: permutacja A taka, że A[1] A[2] A[n] 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 16

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 17

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 0 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 = 18

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 ) 19

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

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 21

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, jednak w praktyce zwykle zdarza się to rzadko lub wręcz jest to nierealne. Ø Określenie przypadku średniego (analiza probabilistyczna) jest często bardzo kłopotliwe 22

Różnice w podejściu? Ø Czy sortowanie przez wstawianie jest najlepszą strategią dla zadania sortowania? Ø Rozważmy alternatywną strategię opartą o zasadę dziel i zwyciężaj : Sortowanie przez łączenie (MergeSort): ciąg <4, 1, 3, 9> dzielimy na dwa podciągi Sortujemy te podciągi: <4, 1> i <3, 9> łączymy wyniki Czas wykonania rzędu n log n 23

Analiza wyszukiwania liniowego INPUT: A[1..n] tablica liczb całkowitych, q liczba całkowita OUTPUT: indeks j taki, że A[j] = q. NIL, jeśli j (1 j n): A[j] q j 1 while j n and A[j] q do j++ if j n then return j else return NIL Najgorszy przypadek: C n Średni przypadek: C n/2 24

Poszukiwanie binarne Pomysł: dziel i zwyciężaj INPUT: A[1..n] posortowana tablica liczb całkowitych, q liczba całkowita. OUTPUT: indeks j taki, że A[j] = q. NIL, jeśli j (1 j n): A[j] q left 1 right n do j (left+right)/2 if A[j]=q then return j else if A[j]>q then right j-1 else left=j+1 while left<=right return NIL 25

Poszukiwanie binarne - analiza Ø Ile razy wykonywana jest pętla: Po każdym przebiegu różnica między left a right zmniejsza się o połowę początkowo n pętla kończy się kiedy różnica wynosi 1 lub 0 Ile razy trzeba połowić n żeby dostać 1? lg n lepiej niż poprzedni algorytm (n) 26

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 27