Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Algorytmy i Struktury Danych Wprowadzenie

Podobne prezentacje


Prezentacja na temat: "Algorytmy i Struktury Danych Wprowadzenie"— Zapis prezentacji:

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)(noN)(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)(noN)(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


Pobierz ppt "Algorytmy i Struktury Danych Wprowadzenie"

Podobne prezentacje


Reklamy Google