Algorytmy i Struktury Danych Wprowadzenie Wykład 1 Prowadzący: dr Paweł Drozda
Informacje Ogólne Konsultacje wtorek 14:45 – 16:15, pokój 35 Dyżur Egzamin – dla osób z co najmniej 4,5 z zaliczenia ćwiczeń i oddanymi wszystkimi zadaniami na czas - zwolnienie z egzaminu – dla pozostałych: egzamin pisemny dr Paweł Drozda
Program Wykładu Wprowadzenie Struktury danych Metody konstruowania algorytmów Grafy Algorytmy tekstowe Programowanie dynamiczne Algorytmy geometryczne dr Paweł Drozda
Literatura Cormen,T.H., Leiserson,Ch.E., Rivest,R.L. - Wprowadzenie do algorytmów, WNT . Wróblewski, P., Algorytmy, struktury danych i techniki programowania, Helion Dańko, A., Algorytmy i struktury danych – zadania, PJWSTK http://wazniak.mimuw.edu.pl/ dr Paweł Drozda
Plan Wykładu Pojęcie algorytmu Sposoby zapisu algorytmów Dane w algorytmie Typy algorytmów Sposoby porównania algorytmów Poprawność algorytmów Złożoność obliczeniowa dr Paweł Drozda
Od problemu do rozwiązania (1) Sformułowanie problemu - życiowego Ugotuj makaron Rozwiązanie problemu Kup makaron Nalej wody do garnka Ugotuj wodę Posól wodę Wsyp makaron Odczekaj odpowiedni czas Wyjmij makaron dr Paweł Drozda
Od problemu do rozwiązania (2) Sformułowanie problemu – normalnego Znajdź najmniejszą wspólną wielokrotność dwóch liczb a i b Rozwiązanie Wyznacz mniejszą z liczb Gdy jest to pierwsza liczba dodaj do niej a, gdy jest to druga liczba dodaj do niej b Gdy liczby nie są równe czynności powtórz Gdy są równe – została znaleziona najmniejsza wspólna wielokrotność dr Paweł Drozda
Algorytm (1) Pojęcie algorytmu Cechy algorytmu Nieformalnie – procedura obliczeniowa produkująca dla właściwych danych wejściowych żądane dane wyjściowe zwane wynikiem Cechy algorytmu Odpowiednie dane wejściowe Skończony Dane wyjściowe Określony deterministycznie Posiada złożoność dr Paweł Drozda
Algorytm (2) Rekurencyjny Zachłanny „Dziel i zwyciężaj” Dane wejściowe Wynik Algorytm dr Paweł Drozda
Sposoby zapisu algorytmu Język naturalny Pseudokod Schemat blokowy Język programowania dr Paweł Drozda
Sposoby zapisu algorytmu – przykład (1) Problem Znaleźć liczbę minimalną wśród n liczb Sposoby zapisu rozwiązań Język naturalny Weź pierwszą liczbę za minimum Porównaj wartość min z kolejnymi liczbami – gdy znajdziesz mniejszą wstaw ją za minimum Pseudokod min <- x1 dla i od 1 do n-1 jeżeli xi > xi+1 to min <- xi+1 zwróć min dr Paweł Drozda
Sposoby zapisu algorytmu – przykład (2) Schemat blokowy Język programowania C int minimum (int tab[n]) { int min, i; min=tab[0]; for(i=0;i<n-1;i++) if (tab[i]>tab[i+1]) min=tab[i+1]; return min; } START min=tab[0] t[i]> t[i+1] i=n min=t[i+1] KONIEC dr Paweł Drozda
Typy danych liczby: znaki: wskaźniki – wyznaczają adresy obiektów całkowite dziesiętne dwójkowe itp. znaki: litery ciągi liter wskaźniki – wyznaczają adresy obiektów dr Paweł Drozda
Organizacja danych Struktury danych Wektory Tablice Listy Kolejki Stosy Drzewa itd. Wektory Tablice 1 2 3 4 5 6 7 1 2 3 5 6 dr Paweł Drozda
Typy algorytmów (1) Prosty Rozgałęziony Start Start Instrukcja 1 War. log. prawda fałsz Instrukcja 2 Instrukcja 2 Instrukcja 3 Instrukcja 3 Instrukcja 4 Stop Stop dr Paweł Drozda
Typy algorytmów Sekwencyjny Rozgałęziony Start Start Instrukcja 1 Stop Stop dr Paweł Drozda
Typy algorytmów (3) Iteracyjny Rekurencyjny Start Start Krok 1 Krok 1 Stop Stop dr Paweł Drozda
Typy algorytmów – przykład (1) Iteracyjny Rekurencyjny Start Start F1=1 F2=1 F1=1 F2=1 F3=1+1 F3=1+1 F4=1+2 F4=1+2 F5=2+3 F5=2+3 Stop Stop dr Paweł Drozda
Metody algorytmów Brute force – sprawdzanie wszystkich możliwych kombinacji Zachłanny – wykonuje działanie, które w danym momencie wydaje się optymalne Dziel i zwyciężaj – problem jest dzielony na podproblemy i każdy z nich jest przetwarzany oddzielnie. Występuje rekurencja dr Paweł Drozda
Ocena algorytmów prostota czytelność długość kodu poprawność czas realizacji zajętość pamięci Idealny algorytm: prosty kod, łatwy do zrozumienia, może być napisany w każdym języku programowania, liczy się szybko, potrzebuje niewiele pamięci zawsze daje poprawne wyniki dr Paweł Drozda
< wp , wk > Poprawność algorytmu Specyfikacja - para warunków (własności) < wp , wk > Warunek początkowy Warunek końcowy Może wspomnieć tez o notacji algorytmicznej Algorytm jest poprawny ze względu na specyfikację <wp, wk> wtedy i tylko wtedy gdy dla wszystkich danych spełniających warunek początkowy algorytm zatrzyma się i uzyskane wyniki spełniają warunek końcowy G. Mirkowska, ASD_01 Wprowadzenie 2018-12-26
Poprawność - Przykład Problem – znaleźć pierwiastki równania kwadratowego Specyfikacja Warunek początkowy: a,b,c rzeczywiste, a różne od zera Warunek końcowy: rozwiązanie równania kwadratowego kwadratowe delta=b*b-4*a*c; if (delta>0) { x=-b+sqrt(delta)/2*a y=- b-sqrt(delta)/2*a return x,y} else if (delta=0) {x=-b/2*a return x} else brak rozwiazan dr Paweł Drozda
Koszt algorytmu Liczba zmiennych PAMIĘĆ CZAS Liczba zmiennych Ilość miejsca wymagana do wykonania algorytmu Liczba instrukcji Liczba operacji arytmetycznych Liczba wywołań procedury dr Paweł Drozda
Koszt algorytmu - czas Oznaczenie: T(n) Operacja dominująca – działanie arytmetyczne przeważające w algorytmie Przykład: Mnożenie macierzy – operacje dodawania i mnożenia Sortowanie – operacje porównania i wstawiania Wyszukiwanie – operacje porównania Złożoność czasowa - liczba operacji dominujących (podstawowych) wykonanych przez algorytm w czasie jego realizacji, wyrażona jako funkcja rozmiaru danych Oznaczenie: T(n) dr Paweł Drozda
Złożoność algorytmu Złożoność pesymistyczna Złożoność średnia Faktyczny czas wykonania programu jest proporcjonalny do T(n) T(n) = sup {t(d) : d Dn} Tavg(n) = S{ p(d) * t(d) : d Dn} 2018-12-26 dr Paweł Drozda
Notacja asymptotyczna Powiemy, że T(n) jest co najwyżej rzędu f: (c>0)(noN)(n>no) T(n) c f(n), co oznaczamy T(n) = O(f(n)) Przykład: T(n) = 2 log n, f(n)=n Powiemy, że T(n) jest co najmniej rzędu f (c>0)(noN)(n>no) c*f(n) T(n), co oznaczamy T(n)=Ω(f(n)) Przykład: T(n) = 2n, f(n)=n3 Powiemy, że rzędy funkcji f i g są takie same: g= O(f) i f = O(g), co oznaczamy T(n)=Θ(f(n)) Przykład: T(n) = n, f(n)=5n dr Paweł Drozda
Porównywanie rzędów funkcji Lemat Niech lim n f(n)/g(n) = c. Wtedy: Jeżeli c 0 to f i g są tego samego rzędu. Jeżeli c= 0, to f = O(g) oraz f (g). Jeżeli c=+ , to f ma rząd większy niż g, g = O(f) i g (f) Przykład f=n*log n, g= n2; lim n f(n)/g(n) =0, to f = O(g) oraz f (g) f=n3, g=n, lim n f(n)/g(n) =+ , to g = O(f) i g (f) dr Paweł Drozda
Przykładowe złożoności Liniowa – T(n) = (n) Kwadratowa – T(n) = (n2) Wielomianowa – T(n) = (n a) Wykładnicza – T(n) = (2n) Logarytmiczna – T(n) = (log n) dr Paweł Drozda
Złożoność a czas wykonania algorytmu (1) Czas wykonania jednej operacji: 0,001 sekundy LiczbaDanych/Złożoność 5 10 50 100 T(log n) 0,002322 s 0,003322 s 0,005644 s 0,006644 s T(n) 0,005 s 0,01 s 0,05 s 0,1 s T(n2) 0,025 s 2,5 s 10 s T(n4) 0,625 s 1h 24 min 27h 46 min T(2n) 0,032 s 1,024 s 8532 lata 4,01 * 1019 lat dr Paweł Drozda
Złożoność a czas wykonania algorytmu (2) Czas wykonania jednej operacji: 0,001 sekundy Czas/ Złożoność 1s 1 godzina dzień rok T(n) 1000 3,6 * 106 8,64 * 107 3,15 * 1010 T(n2) 31 1987 9295 177583 T(n4) 5 43 96 421 T(2n) 9 21 26 34 dr Paweł Drozda
Złożoność – Insertion Sort (1) Algorytm sortowania przez wstawianie Wejście: tablica liczb naturalnych t={a1,…,an} Wyjście: tablica posortowanych licz, tzn. t’={ai1,…,ain}, gdzie ai1≤ ai2 …, ai(n-1) ≤ ain, W każdym kolejnym kroku i-ta liczba jest wstawiana do posortowanej tablicy w odpowiednie miejsce dr Paweł Drozda
Złożoność – Insertion Sort (2) ALGORYTM ZŁOŻONOŚĆ 1. for (i=2;i<n+1;i++) { 2. temp=t[i]; 3. j=i-1; 4. while (j>0) && (temp<t[j]) { 5. t[j+1]=t[j]; 6. j=j-1; } 7. t[j+1]=temp; 1. (n-1) razy koszt c1 2. (n-1) razy koszt c2 3. (n-1) razy koszt c3 4. (n-1)n/2 razy koszt c4 5. (n-1)(n-2)/2 razy koszt c5 6. (n-1)(n-2)/2 razy koszt c6 7. (n-1) razy koszt c7 Złożoność całego algorytmu: T(n)=n2 dr Paweł Drozda
Złożoność - Merge Sort (1) Sortowanie przez scalanie Duży problem dzieli się rekurencyjnie na mniejsze podproblemy aż do sytuacji trywialnych Połączenie mniejszych podproblemów w rozwiązanie Założenie: tablica zawiera 2k danych dr Paweł Drozda
Złożoność – Merge Sort(2) 4 6 1 12 3 5 10 2 4 6 1 12 3 5 10 2 4 6 1 12 3 5 10 2 4 1 6 3 12 5 10 1 2 4 6 3 5 10 12 1 2 3 4 5 6 10 12 dr Paweł Drozda
Złożoność – Merge Sort(3) Równanie rekurencyjne T(n)=2*T(n/2)+cn T(n/2)=2*T(n/4)+c 2k/2 T(n)=2*(2*T(n/4)+ c 2k/2)+c 2k ... T(n)= 2kT(1)+ck 2k n= 2k k=logn T(n)=Θ(n logn) dr Paweł Drozda