ALGORYTMY I STRUKTURY DANYCH

Slides:



Advertisements
Podobne prezentacje
ALGORYTMY I STRUKTURY DANYCH
Advertisements

Programowanie w PMC.
Sortowanie przez scalanie
Instrukcje - wprowadzenie
Rekurencja 1 Podprogram lub strukturę danych nazywamy rekurencyjną, (recursive subprogram, recursive data structure) jeżeli częściowo składa się z samej.
Grażyna Mirkowska PJWSTK, 10 stycznia 2001
METODY ANALIZY PROGRAMÓW
Grażyna Mirkowska PJWSTK 15 listopad 2000
Metody Analizy Programów Wykład 02
Wykład 10 Metody Analizy Programów Specyfikacja Struktur Danych
Wykład 06 Metody Analizy Programów System Hoare
Programowanie I Rekurencja.
ALGORYTM Co to jest algorytm?
Badania operacyjne. Wykład 2
ALGORYTMY I STRUKTURY DANYCH
Teoretyczne podstawy informatyki
Złożoność obliczeniowa
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Liczby Pierwsze - algorytmy
ZŁOŻONOŚĆ OBLICZENIOWA
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
ALGORYTMY I STRUKTURY DANYCH
Materiały pomocnicze do wykładu
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
CO TO JEST ALGORYTM!.
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY.
Podstawy programowania
POJĘCIE ALGORYTMU Pojęcie algorytmu Etapy rozwiązywania zadań
Zbiór do posortowania mieści się w pamięci
Podstawy programowania
Prowadzący: Dr inż. Jerzy Szczygieł
Przegląd podstawowych algorytmów
Ocena przydatności algorytmu – czas działania (złożoność czasowa)
Semantyczna poprawność algorytmów – dowodzenie za pomocą niezmienników
Algorytmy i struktury danych
Elżbieta Fiedziukiewicz
ALGORYTMY I STRUKTURY DANYCH
Algorytmika.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Obliczalność czyli co da się policzyć i jak Model obliczeń maszyna licznikowa dr Kamila Barylska.
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 03 cd. Wyszukiwanie Grażyna Mirkowska PJWSTK, 2003/2004.
WYKŁAD 06 Programowanie dynamiczne Grażyna Mirkowska.
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 04 k-ty co do wielkości. Stosy Grażyna Mirkowska PJWSTK, ITN semestr letni 2002.
Algorytm znajdowania Największego Wspólnego Dzielnika.
Złożoność obliczeniowa algorytmów
Metody nieinkluzyjne: Metoda iteracji prostej.
Wstęp do interpretacji algorytmów
Pętle – instrukcje powtórzeń
Wstęp do programowania Wykład 4
INFORMATYKA SORTOWANIE DANYCH
Wstęp do programowania Wykład 1
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.
Sposoby zapisu algorytmu
Efektywność algorytmów
ALGORYTMY I STRUKTURY DANYCH
Algorytmy i Struktury Danych Wprowadzenie
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 WYKŁAD 01 Wprowadzenie Grażyna Mirkowska PJWSTK

G. Mirkowska, ASD_01 Wprowadzenie Plan wykładu Organizacja wykładu i ćwiczeń z ASD. Cel wykładu. Zapoznanie studentów z podstawowym zestawem algorytmów realizujących zadania typu wyszukiwanie, sortowanie, oraz z najczęściej wykorzystywanymi strukturami danych: stosami, kolejkami, słownikami, kolejkami priorytetowymi i drzewami. Przedstawione zostaną również zasadnicze problemy algorytmiki związane z analizą poprawności i kosztu algorytmów. O czym będzie mowa w tym wykładzie? 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

O czym będzie mowa w tym wykładzie? Jak formułować (specyfikować) zadania i algorytmy? Jak porównywać algorytmy? Co to jest struktura danych? Jak weryfikować algorytm (program)? Czy zawsze można znaleźć lepsze rozwiązanie? Czy zawsze istnieje algorytm rozwiązujący dany problem? 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

Od problemu do jego rozwiązania Niech max ma wartość równą pierwszemu elementowi ciągu. Porównaj max z kolejnymi elementami ciągu i jeśli spotkasz wartość większą, przyjmij ją jako nową wartość max. Sformułowanie problemu. Przykład: Dany jest ciąg liczb. Znaleźć największą z nich. ALGORYTM Rozwiązanie problemu. 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

G. Mirkowska, ASD_01 Wprowadzenie Co to jest algorytm? Al-Khowârizmî (Persja, 8-9w.n.e.) (Euklides) Dopóki x różne od y wykonuj: Jeżeli x>y, to odejmij y od x i wynik podstaw na x; W przeciwnym przypadku od y odejmij x i wynik podstaw na y; koniec dopóki wynikiem jest y Algorytm to metoda postępowania, która prowadzi do rozwiązania jakiegoś problemu. Włącz gaz; Zagotuj wodę; Wsyp do szklanki kawę rozpuszczalną; Zalej kawę wrzącą wodą; Dosyp cukru, jeśli lubisz; Poczekaj kilka minut; Algorytm, to skończony ciąg etapów, które pozwalają przekształcić dane informacje wejściowe w informacje wyjściowe. 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

Algorytm - metoda postępowania Teza Churcha Funkcje rekurencyjne, Algorytmy Markova, Maszyny Turinga, Automaty, Wyrażenia regularne stan pamięci przed wykonaniem algorytmu stan pamięci po wykonaniu algorytmu Dane Algorytm Wyniki Opowiedz trochę o idei związanej z funkcjami rekurencyjnymi algorytmami Markova itd.. Przykład dla algorytmu Euklidesa Dane x =21, y =12. (x,y) (21,12) (9,12) (9,3) (6,3) (3,3) Wynik 3 Dopóki x różne od y, od większej z liczb x, y odejmuj mniejszą. Wynikiem jest y. 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

Jak zapisywać algorytmy? Najczęściej formułujemy zadania i problemy w języku naturalnym ale... język naturalny nie jest jednoznaczny. Konstrukcje: instrukcja warunkowa: if test then {Instrukcje} else{Instrukcje} fi instrukcja iteracji(pętla): while test do{Instrukcje}od instrukcja złożenia: {Instrukcja1; Instrukcja 2;...Instrukcja n-ta; } instrukcja przypisania: x := wyrażenie algebraiczne; 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

Jak porównywać algorytmy? Kryteria Idealny algorytm to taki, który ma prosty kod, jest napisany w ogólnie dostępnym języku programowania, łatwo go zrozumieć, liczy szybko, nie wymaga dużo miejsca w pamięci i zawsze daje poprawne wyniki. prostota czytelność długość kodu poprawność czas realizacji zajętość pamięci 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

Co to jest struktura danych? Sformułowanie problemu algorytmicznego wymaga zwykle określenia środowiska, którego problem dotyczy. Problem „ Znaleźć największy element w danym ciągu” wymaga określenia czym są elementy (np.. Liczbami, zbiorami, dokumentami) i jak się je porównuje. Algorytm, który ma realizować pewną metodę rozwiązania problemu musi znać to środowisko i móc się nim posługiwać. Strukturą danych będziemy nazywali system relacyjny, którego uniwersum określa wartości zmiennych a operacje i relacje dostarczają narzędzi do realizacji algorytmu. Definicja 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

G. Mirkowska, ASD_01 Wprowadzenie Przykład1 while (x y) { if x >y then x := x – y else y := y – x fi } return x Jeśli rozważymy ten algorytm w strukturze liczb całkowitych podając jako początkowe wartości x=a i y=b, to algorytm zwróci jako wynik nwd(a,b) Zawsze daje daje wynik! Uwaga Czasami daje wynik! Jeśli rozważymy ten algorytm w strukturze, której uniwersum składa się z odcinków na prostej, relacja > pozwala porównać długości odcinków, natomiast operacja – daje w wyniku różnicę odcinków, to algorytm zwraca jako wynik najdłuższy odcinek, który mieści się całkowitą ilość razy w danych początkowo odcinkach. 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

G. Mirkowska, ASD_01 Wprowadzenie Poprawność algorytmu Intuicyjnie, poprawność = zgodność z zamierzeniami. Specyfikacją algorytmu nazywać będziemy parę warunków (własności) Specyfikacja < wp , wk > Warunek początkowy Warunek końcowy S |= {wp} Alg {wk} Może wspomnieć tez o notacji algorytmicznej Algorytm Alg działający w strukturze danych S jest częściowo poprawny ze względu na specyfikację <wp, wk> wttw dla wszystkich danych spełniających warunek początkowy, jeżeli algorytm zatrzyma się, to uzyskane wyniki spełniają warunek końcowy. 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

Całkowita poprawność algorytmu wp wk Alg Powiemy, że algorytm Alg działający w strukturze danych S jest całkowicie poprawny ze względu na specyfikację <wp,wk> wttw dla wszystkich danych w strukturze S spełniających warunek początkowy wp, algorytm zatrzymuje się i daje wyniki spełniające warunek końcowy wk. S |= {wp}  Alg{wk} 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

G. Mirkowska, ASD_01 Wprowadzenie Koszt algorytmu pamięć i czas Miary kosztu: Liczba instrukcji liczba operacji arytmetycznych liczba wywołań procedury Liczba zmiennych ilość miejsca potrzebna dla danych Ogólnie: wybór miary zależy od typu problemu, rodzaju rozwiązania. 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

G. Mirkowska, ASD_01 Wprowadzenie Przykłady Problem Operacja dominująca Mnożenie macierzy Operacje + , * Wyszukiwanie elementu w tablicy porównywanie Sortowanie Mając dany algorytm, konkretne środowisko i konkretne dane możemy policzyć liczbę operacji dominujących. t (Alg, d) Koszt algorytmu dla danych d: algorytm dane 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

Złożoność czasowa algorytmu Definicja Złożoność czasowa to liczba operacji dominujących (podstawowych) wykonanych przez algorytm w czasie jego realizacji, wyrażona jako funkcja rozmiaru danych. T(Alg,n) Niech Dn będzie zbiorem danych rozmiaru n dla pewnego problemu P oraz A algorytmem rozwiązującym problem P. Uwaga1.Faktyczny czas wykonania algorytmu jest proporcjonalny do złożoności czasowej. W(Alg,n) = sup {t(Alg,d) : d Dn} złożoność pesymistyczna Uwaga2 Czas wykonania algorytmu jest bardziej interesujący dla dużych n niż dla małych. A(Alg,n) = S{ p(d) * t(Alg,d) : d Dn} złożoność średnia 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

Notacja asymptotyczna Niech f , g : N  R+. Powiemy, że g jest co najwyżej rzędu f wttw (c>0)(noN)(n>no) g(n)  c f(n). g = O (f ) g =  (f ) Powiemy, że g jest co najmniej rzędu f wttw (c>0)(noN)(n>no) c*f(n)  g(n). g =  (f ) Powiemy, że rzędy funkcji f i g są takie same, wttw g= O(f) i f = O(g). 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

Porównywanie rzędów funkcji Przykład 1 Niech f(n)=100n, g(n)= 2n+100, h(n) = 0.1 n2 +n. Mamy f = O(n) f = (n) g= O(n2) g = (n) h = O(n2) = O(n3 ) h O(n) h =  (n) Przykład 2 f(n) = 0.3 n3 + 10n + 100 g(n)= n3 h(n) = log n lim n f(n)/g(n)= 0.3 Czyli f = (g) lim f(n)/h(n) = +  Czyli h = O(f), h  (f). Lemat (O porównywaniu rzędów funkcji) Niech lim n f(n)/g(n) = c. Wtedy 1. Jeżeli c  0 to f i g są tego samego rzędu. 2. Jeżeli c= 0, to f = O(g) oraz f   (g). 3. Jeżeli c=+ , to f ma rząd większy niż g, g = O(f) i g  (f). 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

Porównanie szybkości wzrostu funkcji Powiemy, że algorytm Alg ma złożoność czasową wielomianową wttw T(Alg,n)= (na) a N wykładniczą wttw T(Alg,n) = (an) a  R+ liniową wttw T(Alg,n)= (n) kwadratową wttw T(Alg,n)= (n2) logarytmiczną wttw T(Alg,n)= (lg n) A co to za funkcja lg n!? lg n lg n! = S i=1..n lg i  n lg n 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

G. Mirkowska, ASD_01 Wprowadzenie f(n) =0.25 n2 f(n) = 2n f(n)=n f(n)= log n Porównanie szybkości wzrostu funkcji 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

Złożoność a rozmiar i czas Ile czasu potrzeba na rozwiązanie zadania o ustalonym rozmiarze i złożoności? n=102 n= 104 n3 lg n n n lg n n2 2n 1s 11dni 6.6ms 13.3 ms 0.6ms 0.1ms 10ms 106lat 0.1s 100s 10100 l T(A,n) wymiar Jaki jest maksymalny rozmiar problemu, który można rozwiązać w ustalonym czasie, znając złożoność algorytmu? 1s 1H n3 lg n n n lg n n2 2n 102 15* 102 2 1000000 63*103 106 103 19 36*108 13* 107 60* 103 31 T(A,n) czas 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

Czy szybkość może pokonać złożoność? Mamy 5 algorytmów A1, A2, A3, A4, A5 rozwiązujących ten sam problem. Niech si oznacza maksymalny rozmiar problemu, który można rozwiązać na komputerze 1 przy pomocy algorytmu Ai w ustalonych t jednostkach czasu. Jaki jest maksymalny rozmiar problemu, który można rozwiązać w tym samym czasie na komputerze 10 razy szybszym? Komputer 1 Komputer 2 n3 lg n n n2 2n s4 2*s4 s1 s1 10 s2 s3 s5 10*s2 10*s3 ? Przykład A5. Dla komputera 1: T(A5,s5) = 2 s5 = t . Dla komputera 2 : T(A5,s5) = 2 s5 = t /10. Szukamy takiego x, że T(A5,x) = t. Mamy więc t = 10* 2 s5 = 2 x = 2 s5+lg10 . Czyli x = 3.2 + s5. 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

G. Mirkowska, ASD_01 Wprowadzenie Przykład 2 Problem: Obliczyć kwadrat liczby naturalnej n. { i:= 1; k := 1; x:=0; while (i n){ x := x + k; k := k + 2; i := i + 1; } return x } Specyfikacja: warunek początkowy: nN, n>0 warunek końcowy: x jest kwadratem liczby n. Algorytm jest całkowicie poprawny w strukturze liczb naturalnych. Twierdzenie 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

G. Mirkowska, ASD_01 Wprowadzenie Niezmiennik {i := 1; k := 1; x :=0; while (i n){ x := x + k; k := k + 2; i := i + 1; } return x } Niezmiennikiem pętli nazywać będziemy własność (formułę), która jeśli jest prawdziwa na początku wykonania treści pętli, to jest również prawdziwa po wykonaniu treści pętli. k =2i-1, x =(i-1)2 x = i2 k = 2i+1 x = (i-1)2, k = 2i-1, i  n+1 niezmiennik i  n+1, k = 2i-1, x = S j=1..i-1 (2j-1) = (i-1)2 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

G. Mirkowska, ASD_01 Wprowadzenie Przykład 3 f(a)*f(b)< 0, eps>0 , a<b START f(a)*f(b)  0 abs(b-a)>eps P: while abs(b-a)>eps { x := (a+b)/2; if (f(a)*f(x)  0 ) then b := x else a := x fi; } NIE TAK Niezmiennik :f(a)*f(b) 0, x := (a+b)/2 STOP f(a)*f(b)  0, b-x = x-a f(a)*f(x)  0 NIE TAK f(a)*f(x)  0 f(x)*f(b)  0 a b x b := x a := x f(a)*f(b)  0 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie

Czy algorytm P zatrzymuje się? START i:=0; P:{ i:= 0; while abs(b-a)>eps { x := (a+b)/2; if f(a)*f(x)  0 then b := x else a := x fi; i := i+1 }} b-a= w/2i abs(b-a)>eps TAK NIE b-a= w/2i > eps STOP i:= i+1 x := (a+b)/2 b-x = x-a = w/2 i+1 f(a)*f(x)  0 NIE TAK x - a = w/2 i+1 b- x = w/2 i+1 Dla i = lg (w/eps) mamy b-a  eps. b := x a := x x b - a = w/2 i+1 a b 2018-12-27 G. Mirkowska, ASD_01 Wprowadzenie