ALGORYTMY I STRUKTURY DANYCH

Slides:



Advertisements
Podobne prezentacje
ALGORYTMY I STRUKTURY DANYCH
Advertisements

Tablice 1. Deklaracja tablicy
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.
PROGRAMOWANIE STRUKTURALNE
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
ZŁOŻONOŚĆ OBLICZENIOWA
Turbo pascal – instrukcje warunkowe, iteracyjne,…
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
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
KOMPUTEROWE WSPOMAGANIE PRAC BADAWCZYCH FORTRAN - wprowadzenie Adam FIC INSTYTUT TECHNIKI CIEPLEJ.
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY.
Podstawy programowania
POJĘCIE ALGORYTMU Pojęcie algorytmu Etapy rozwiązywania zadań
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
IV OTWARTE MISTRZOSTWA OPOLA W PROGRAMOWANIU ZESPOŁOWYM
Semantyczna poprawność algorytmów – dowodzenie za pomocą niezmienników
Algorytmy i struktury danych
Algorytmy i struktury danych
Języki i automaty część 3.
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.
Wstęp do interpretacji algorytmów
Pętle – instrukcje powtórzeń
Wstęp do programowania Wykład 4
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
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, 2003

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. 3 marzec 2003 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? 3 marzec 2003 G. Mirkowska, ASD_01 Wprowadzenie

Od problemu do jego rozwiązania Specyfikacja problemu 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 zadania. ALGORYTM Przykład: Dany jest ciąg liczb. Znaleźć największą z nich. Rozwiązanie problemu. 3 marzec 2003 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. 3 marzec 2003 G. Mirkowska, ASD_01 Wprowadzenie

Algorytm - metoda postępowania Funkcje rekurencyjne, Algorytmy Markova, Maszyny Turinga, Automaty, Wyrażenia regularne stan pamięci po wykonaniu algorytmu stan pamięci przed wykonaniem algorytmu Dane Algorytm Wyniki Opowiedz trochę o idei związanej z funkcjami rekurencyjnymi algorytmami Markova itd.. Teza Churcha Wszystkie pojęcia algorytmu są sobie równoważne. Przykład dla algorytmu Euklidesa Dane x =21, y =12. (x,y) (21,12) (9,12) (9,3) (6,3) (3,3) Wynik 3 3 marzec 2003 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 dostatecznie precyzyjny. Konstrukcje programotwórcze: if test then {Instrukcje} else{Instrukcje} fi while test do{Instrukcje}od begin {Instrukcja1}; ...{Instrukcja n-ta;} end x := wyrażenie algebraiczne; Instrukcja warunkowa Instrukcja pętli. Instrukcja złożona. Instrukcja przypisania. 3 marzec 2003 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 3 marzec 2003 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 i a operacje i relacje dostarczają narzędzi do realizacji algorytmu. 3 marzec 2003 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. 3 marzec 2003 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 {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. 3 marzec 2003 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} 3 marzec 2003 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 3 marzec 2003 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 pętli, to jest również prawdziwa po wykonaniu treści pętli. k=2i-1, x = S j=1..i-1 (2j-1) x = S j=1..i (2j-1) k= 2i+1 x = S j=1..i-1 (2j-1), k=2i-1, i  n+1 niezmiennik i  n+1, k = 2i-1, x = S j=1..i-1 (2j-1) 3 marzec 2003 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 3 marzec 2003 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 3 marzec 2003 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. 3 marzec 2003 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 3 marzec 2003 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 3 marzec 2003 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). 3 marzec 2003 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). 3 marzec 2003 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)= (n a) a N wykładniczą wttw T(Alg,n) = (a n) a  R+ liniową wttw T(Alg,n)= (n) kwadratową wttw T(Alg,n)= (n 2) 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 3 marzec 2003 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 3 marzec 2003 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 3 marzec 2003 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 ustalonym czasie t. Jaki jest maksymalny rozmiar problemu, który można rozwiązać w tym samym czasie t 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 2 x = 10* 2 s5 = 2 s5+lg10 . Czyli x = 3.2 +s5. 3 marzec 2003 G. Mirkowska, ASD_01 Wprowadzenie