Algorytmy i Struktury Danych Wprowadzenie

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

Sortowanie przez scalanie
Algorytmy sortowania i porządkowania
Algorytmy sortowania i przeszukiwania
Rekurencja 1 Podprogram lub strukturę danych nazywamy rekurencyjną, (recursive subprogram, recursive data structure) jeżeli częściowo składa się z samej.
Schemat blokowy M START KONIEC
Zaawansowane techniki algorytmiczne
METODY ANALIZY PROGRAMÓW
Grażyna Mirkowska PJWSTK 15 listopad 2000
Programowanie I Rekurencja.
Techniki konstrukcji algorytmów
PROGRAMOWANIE STRUKTURALNE
ALGORYTM Co to jest algorytm?
ALGORYTMY I STRUKTURY DANYCH
Teoretyczne podstawy informatyki
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ZŁOŻONOŚĆ OBLICZENIOWA
ALGORYTMY GEOMETRYCZNE.
Opracowała: Elżbieta Fedko
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie imperatywne i język C
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
ALGORYTMY I STRUKTURY DANYCH
Metody numeryczne w chemii
Rzędy wielkości funkcji
Algorytmy i struktury danych
Algorytmika w drugim arkuszu maturalnym. Standardy wymagań I. WIADOMOŚCI I ROZUMIENIE I. WIADOMOŚCI I ROZUMIENIE II.KORZYSTANIE Z INFORMACJI II.KORZYSTANIE.
Wstęp do interpretacji algorytmów
Jak uczę programowania?
ALGORYTMY.
POJĘCIE ALGORYTMU Pojęcie algorytmu Etapy rozwiązywania zadań
Algorytmy i struktury danych
Algorytmy i Struktury Danych Sortowanie
20 września 2003r. Centrum Kształcenia Ustawicznego im. St. Staszica w Koszalinie Wstęp do algorytmiki Autor: Marek Magiera.
Prowadzący: Dr inż. Jerzy Szczygieł
Przegląd podstawowych algorytmów
Algorytmy i Struktury Danych Typy algorytmów
Ocena przydatności algorytmu – czas działania (złożoność czasowa)
Algorytmy i struktury danych
Algorytmy i struktury danych
Złożone typy danych Listy Tworzenie elastycznych baz danych
ALGORYTM. SCHEMATY BLOKOWE. KONSTRUKCJE PROGRAMU, PODPROGRAMY, FUNKCJE
Elżbieta Fiedziukiewicz
Spis treści W świecie algortmów -Budowa algorytmu
Algorytmika.
Obliczalność czyli co da się policzyć i jak Model obliczeń maszyna licznikowa dr Kamila Barylska.
Algorytmy- Wprowadzenie do programowania
opracowała: Anna Mikuć
WYKŁAD 06 Programowanie dynamiczne Grażyna Mirkowska.
Złożoność obliczeniowa algorytmów
Metody rozwiązywania układów równań liniowych
Programowanie imperatywne i język C Copyright, 2007 © Jerzy R. Nawrocki Wstęp do.
Wstęp do interpretacji algorytmów
Wstęp do programowania Wykład 4
Temat 3: Podstawy programowania Algorytmy – 2 z 2 _________________________________________________________________________________________________________________.
INFORMATYKA SORTOWANIE DANYCH
Algorytmy. Co to jest algorytm? Przepis prowadzący do rozwiązania zadania.
Algorytmy, sposoby ich zapisu.1 Algorytm to uporządkowany opis postępowania przy rozwiązywaniu problemu z uwzględnieniem opisu danych oraz opisu kolejnych.
Rozdział 5 REKURENCJA.
Listy.
Efektywność algorytmów
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
POJĘCIE ALGORYTMU Wstęp do informatyki Pojęcie algorytmu
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Zapis prezentacji:

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)(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

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