Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Algorytmy i Struktury Danych Wprowadzenie
Wykład 1 Prowadzący: dr Paweł Drozda
2
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
3
Program Wykładu Wprowadzenie Struktury danych
Metody konstruowania algorytmów Grafy Algorytmy tekstowe Programowanie dynamiczne Algorytmy geometryczne dr Paweł Drozda
4
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 dr Paweł Drozda
5
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
6
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
7
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
8
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
9
Algorytm (2) Rekurencyjny Zachłanny „Dziel i zwyciężaj” Dane wejściowe
Wynik Algorytm dr Paweł Drozda
10
Sposoby zapisu algorytmu
Język naturalny Pseudokod Schemat blokowy Język programowania dr Paweł Drozda
11
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
12
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
13
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
14
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
15
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
16
Typy algorytmów Sekwencyjny Rozgałęziony Start Start Instrukcja 1
Stop Stop dr Paweł Drozda
17
Typy algorytmów (3) Iteracyjny Rekurencyjny Start Start Krok 1 Krok 1
Stop Stop dr Paweł Drozda
18
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
19
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
20
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
21
< 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
22
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
23
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
24
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
25
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} dr Paweł Drozda
26
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
27
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
28
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
29
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, s 0, s 0, s 0, 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
30
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
31
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
32
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
33
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
34
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
35
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
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.