Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

dr Anna Kwiatkowska Instytut Informatyki

Podobne prezentacje


Prezentacja na temat: "dr Anna Kwiatkowska Instytut Informatyki"— Zapis prezentacji:

1 dr Anna Kwiatkowska Instytut Informatyki
Algorytmy dr Anna Kwiatkowska Instytut Informatyki

2 أبو عبد الله محمد بن موسى الخوارزمي
Słowo algorytm pochodzi od nazwiska arabskiego matematyka Abu Ja’far Mohammad ibn Musa al-Chorezmi, który żył na przełomie VIII i IX wieku na terenach obecnego Uzbekistanu

3 Algorytmy Jego nazwisko pisane po łacinie przyjęło postać: Algorismus
Jest on uznawany za prekursora metod obliczeniowych w matematyce Jeden z najstarszych algorytmów, algorytm Euklidesa znajdowania największego wspólnego podzielnika dwóch liczb ma ponad 2000 lat

4 Algorytm Euklidesa Co ciekawe algorytmu nie wymyślił Euklides, a Eudoksos z Knidos w IV wiek p.n.e. Euklides jedynie algorytm ten zawarł i udowodnił jego poprawność w swoim dziele Elementy Największy Wspólny Dzielnik (NWD) dwóch liczb jest największą liczbą naturalną spośród tych, które dzielą obie te liczby bez reszty W codziennej praktyce NWD służy nam do skracania ułamków do postaci właściwej

5 Algorytm Euklidesa Dane: n, m – dwie liczby naturalne. Dane wyjściowe
liczba naturalna będąca największym wspólnym dzielnikiem liczb n i m. W pierwszej sekcji algorytmu sprawdzamy czy m>n i jeżeli tak jest to zamieniamy miejscami wartości zmiennych m i n, aby był spełniony wymagany warunek m<=n

6 Algorytm Euklidesa Sprawdzamy, czy m≠0, jeśli tak, to następne czynności wykonujemy aż do momentu gdy m=0 rob = n - ( n DIV m) *m n = m m = rob DIV jest operatorem dzielenia całkowitego Wynik jest w zmiennej n

7 Algorytm Euklidesa rob m n m>n 12 18 12 6 12-(12div6)*6 ? 18 12 ? 6
jeśli m>n to przestawić m z n jeśli m ≠ 0 obliczaj: rob = n - ( n DIV m) *m n = m m = rob rob m n m>n 12 18 12 6 12-(12div6)*6 ? 18 12 ? 6 18-12 12-2*6 18-(18div12)*12 12 6 ? NWD = 6

8 Algorytm Algorytm jest to sformalizowany ciąg logicznie powiązanych instrukcji (poleceń, rozkazów), których wykonanie pozwoli na przetworzenie informacji wejściowych (danych) w informacje wyjściowe (wyniki) w skończonej liczbie kroków

9 Przepisy kucharskie Zapis nutowy muzyki. Instrukcje montażu Opisy dojazdu

10 wśród prekursorów algorytmów komputerowych ważną rolę odegrała Ada Augusta, hrabina Lovelace, córka Byrona, która żyła w latach 1815 – 1852, uważa się ją za pierwszą programistkę

11 Rozwiązanie zadania • analiza treści zadania • wykaz danych wejściowych; wiadomych i niewiadomych oraz relacji między nimi • sprawdzenie czy zadanie posiada jednoznaczne rozwiązanie • wybór metody rozwiązania zadania • opis czynności, które należy wykonać z danymi wejściowymi przy zastosowaniu wybranej metody rozwiązania • sporządzenie i przedstawienie wyników rozwiązania zadania

12 Użyteczność algorytmu
Algorytm jako pewna określona procedura obliczeniowa posiada cechy, które określają jej użyteczność: 1)       poprawność 2)       złożoność obliczeniowa 3)       złożoność czasowa

13 Formuła częściowej poprawności programu
Trójka to formuła logiczna, która jest prawdziwa wtedy i tylko wtedy, gdy zachodzi następujący warunek: Dla każdego stanu spełniającego , jeżeli program zakończy swoje działanie, to stan końcowy będzie spełniał formułę

14 Formuła częściowej poprawności programu
Takie formuły nazywamy trójkami Hoare'a albo formułami częściowej poprawności programu Zostały wprowadzone przez jednego z największych informatyków, Anthony'ego Hoare'a, w połowie lat 60

15 Zauważmy, że o poprawności formuły Hoare'a możemy mówić w dwóch przypadkach:
Kiedy dla danych spełniających program się zatrzyma i dane po zatrzymaniu się programu spełniają Kiedy dla danych spełniających program się nie zatrzyma

16 Przykład Udowodnijmy, że jeśli k>0, to po instrukcji j:=k+1 mamy j>0 Ponieważ mamy po prawej stronie instrukcji przypisania wyrażenie k+1, więc musimy warunek początkowy zapisać w równoważnej formie, w której miejsce zmiennej k zajmuje wyrażenie k+1 Zatem jest k>0 równoważne k+1>1 i stosując regułę dla instrukcji przypisania otrzymujemy, że j>1 co akurat w przypadku zmiennych całkowitych jest równoważne j>0

17 Poprawność algorytmów
Jeśli program jest częściowo poprawny i ma własność stopu jest gwarancja uzyskania żądanego wyniku Jak zatem wywnioskować, czy program się zatrzyma Metoda opracowana przez Roberta Floyda w latach sześćdziesiątych korzysta z zasady indukcji Chodzi o pokazanie, że pewna wartość, maleje w każdym obrocie pętli, a zmniejszanie to nie może się ciągnąć w nieskończoność

18 Złożoność algorytmów Złożoność obliczeniowa algorytmu jest określana ilością zasobów systemu liczącego potrzebnych do jego wykonania Podstawowymi zasobami są: czas procesora i obszar pamięci, czyli czas działania algorytmu oraz ilość zajętej pamięci Parametry te mają największy wpływ na złożoność obliczeniową

19 Złożoność algorytmów Wyróżniana jest złożoność czasowa
złożoność pamięciowa Złożoność czasowa zależy od wszystkich jednostkowych czynności wykonywanych podczas realizacji algorytmu Jedne czynności wykonywane są wolniej inne szybciej

20 Czynności jednostkowe
Zazwyczaj jako czynności jednostkowe przyjmuje się: wykonanie operacji arytmetycznej (dodawanie, odejmowanie, mnożenie, dzielenie i in.); nadanie wartości zmiennej; zbadanie relacji lub wykonanie operacji logicznej; wprowadzenie danej; i in.

21 Przykład Określ czynności jednostkowe obliczania wartości wyrażenia w(x) określonego wzorem: dla danej wartości x.

22 Razem 16 operacji jednostkowych
Rozwiązanie Wersja I (nieoptymalna). w = 3*x*x*x*x*x*x + 2*x*x*x*x + 5*x*x +10 Liczba operacji jednostkowych: przypisanie dodawania mnożeń. Razem 16 operacji jednostkowych

23 Rozwiązanie Wersja II. w = x * x w = ((3*w + 2)*w + 5)*w + 10
Liczba operacji jednostkowych: - 2 przypisania - 3 dodawania - 3 mnożenia. Razem 8 operacji jednostkowych.

24 Złożoność algorytmów często dokładne zliczanie operacji jednostkowych jest bardzo trudne lub niemożliwe i w związku z tym wyróżnia się tzw. operacje dominujące za operacje dominujące w danym algorytmie uważa się te, których liczba jest proporcjonalna do liczby wykonań wszystkich operacji jednostkowych w dowolnej komputerowej realizacji tego algorytmu za jednostkę złożoności czasowej przyjmuje się wykonanie jednej operacji dominującej

25 Złożoność algorytmów Złożoność pamięciowa określa zapotrzebowanie algorytmu na pamięć Za jednostkę złożoności pamięciowej przyjmuje się zwykle słowo pamięci komputera

26 Złożoność algorytmów Dla większości algorytmów trudno jest określić dokładnie złożoność obliczeniową, która między innymi w większości przypadków zależy od liczby danych wejściowych (rozmiaru danych) W takich przypadkach bywa wyróżniana złożoność pesymistyczna oraz złożoność oczekiwana algorytmu

27 Pesymistyczna złożoność czasowa
Pesymistyczna złożoność czasowa algorytmu określana jest funkcją w(n): gdzie: n – rozmiar danych sup – kres górny zbioru t(d) – liczba operacji dominujących dla zestawu danych wejściowych d Dn – zbiór zestawów danych wejściowych o rozmiarze n.

28 Oczekiwana złożoność czasowa
Oczekiwana złożoność czasowa algorytmu określana jest funkcją A(n): gdzie: A(n) – wartość oczekiwana zmiennej losowej Xn Xn - wartością tej zmiennej losowej jest liczba operacji dominujących dla zestawu danych wejściowych dDn pnk – prawdopodobieństwo, że dla danych o rozmiarze n algorytm wykona k operacji dominujących.

29 Przykład Określ złożoność czasową algorytmu wyszukiwania elementu a w N elementowym ciągu L Rozwiązanie. Dane początkowe: N – liczba naturalna (N  0) a – poszukiwany element L – ciąg elementów { lj }, j=1,...,N

30 Założenia: N - rozmiar danych wejściowych (n=N), Xn - zmienna losowa określająca prawdopodobieństwo wystąpienia a na danym miejscu w ciągu L. Element równy a może wystąpić na każdym miejscu jednakowym prawdopodobieństwem – rozkład jednostajny. Zatem pnk=1/N. Wynikiem algorytmu jest wartość logiczna q określona następująco: q = 0 (fałsz) gdy żaden z elementów l1,..., lN nie jest równy a q  0 (prawda) gdy w ciągu L występuje element równy a

31 Przykład Operacja dominująca: lj  a Rozwiązanie.
Pesymistyczna złożoność czasowa: w(N)=N+1 Oczekiwana złożoność czasowa: . Z powyższych obliczeń wynika, że funkcja złożoności czasowej jest funkcją liniową operacji dominujących.

32 Własności poprawnie sformułowanego algorytmu
1)       uniwersalność – pozwala na rozwiązanie całej klasy zadań; 2)       ścisłość – zarówno czynności algorytmu, jak i kolejność ich wykonania jest opisana dostatecznie jasno i wyraźnie; 3)     jednoznaczność – wielokrotne wykonywanie algorytmu dla identycznych danych prowadzi do takich samych wyników;

33 Własności poprawnie sformułowanego algorytmu
4) kompletność – algorytm uwzględnia wszystkie możliwe przypadki zdarzeń, jakie mogą wystąpić podczas jego wykonania; 5) skończoność – rozwiązanie zadania otrzymamy po skończonej ilości czynności (kroków algorytmu).

34 Przykład a x2 + b x + c = 0 Znany algorytm wyznaczenia pierwiastków rzeczywistych trójmianu kwadratowego o współczynnikach rzeczywistych ma cechy poprawnego algorytmu, gdyż charakteryzują go : uniwersalność – algorytm rozwiązuje dowolne równanie kwadratowe określone przez trójkę liczb a, b, c gdzie a0 oraz a,b,c;

35 Przykład ścisłość – opisany wzorem matematycznym sposób obliczenia delty jako pierwszy krok, badanie znaku delty i w zależności od uzyskanej odpowiedzi wyznaczenie pierwiastków przy pomocy wzorów matematycznych skończoność – po kilku krokach algorytmu otrzymamy wynik.

36 Przykład jednoznaczność – zawsze dla tych samych współczynników uzyskamy te same odpowiedzi, gwarantują nam to wzory matematyczne kompletność – wszystkie przypadki, czyli delta>0, delta=0 oraz delta<0 są uwzględnione

37 Sposoby zapisu algorytmu
opis słowny zapis przy pomocy pseudo-kodu zapis graficzny (schematy) zapis w języku programowania

38 Opis słowny Opis słowny jest to zapis kolejnych kroków algorytmu w języku naturalnym np. polskim wyszczególniamy, jakie czynności należy wykonać  zaznaczamy, kiedy powinien nastąpić koniec algorytmu

39 Przykład Dany jest: punkt płaszczyzny P(xp,yp) środek S(a,b)
długość promienia r okręgu o równaniu (x-a)2+(y-b)2=r2. Określić położenie punktu P względem tego okręgu.

40 Przykład Oznaczamy d - odległość punktu od okręgu.
Jeżeli d<r, to punkt leży wewnątrz okręgu, jeżeli d=r, to punkt leży na okręgu a gdy d>r, to punkt leży na zewnątrz r S

41 Opis słowny algorytmu Pobierz wartości xp ,yp, a, b, r.
Oblicz odległość punktu według wzoru Sprawdź, czy d<r , jeśli TAK, to „punkt wewnętrzny” i przejdź do KONIEC. Sprawdź, czy d=r, jeśli TAK, to „punkt leży na okręgu” i przejdź do KONIEC „Punkt leży na zewnątrz okręgu” KONIEC

42 Opis algorytmu zamek który???
język naturalny jest ze swej natury niejednoznaczny który??? zamek

43 Pseudo - kod Do zapisania algorytmu w postaci na wpół sformalizowanej służy pseudo-kod Jest to sposób zapisu wybranej metody oparty na języku naturalnym (polskim lub angielskim), ale narzucający przy tym pewną dyscyplinę w formułowaniu zdań Reguły dotyczące formułowania opisu postępowania są zaczerpnięte najczęściej z wybranego języka programowania i mają za zadanie zapewnić jednoznaczność zapisu

44 Pseudo - kod Podstawowymi elementami pseudo-kodu są zdania, nazywane inaczej instrukcjami Słowa, które są podstawą budowy tych zdań i zawsze muszą w nich wystąpić dla wyróżnienia są podkreślane i nazywane słowami kluczowymi Obecnie najbardziej rozpowszechniona jest notacja pascalo-podobna, czyli pseudo-kod oparty na regułach języka PASCAL

45 Pseudo - kod Każda instrukcja pseudo-kodu powinna zaczynać się od nowej linii W zapisie tym należy przestrzegać także wcięć i i czytelnego rozłożenia tekstu Instrukcje zagłębione w innych są wcięte o kilka znaków, żeby zależności pomiędzy nimi były widoczne graficznie

46 Pseudo - kod Nawiasy instrukcji grupujących powinny być zapisane tak, aby od razu było widać, które z nich tworzą parę Reguły te pozwalają zwiększyć czytelność zapisu ułatwiają analizę zapisanych algorytmów

47 Pseudo - kod Pseudo-kod umożliwia w łatwy sposób rozwijać zapisane już instrukcje poprzez dopisywanie nowych i grupowanie je w odpowiedni sposób Dzięki tej własności można przy jego pomocy czytelnie zapisywać złożone algorytmy

48 Pseudo-kod W tym zapisie możemy używać następujących zdań:
instrukcja określająca czynność do wykonania, nie posiada słów kluczowych, np. zwiększ wartość zmiennej x o jeden instrukcje te oddzielane są od siebie słowem kluczowym a następnie

49 y x i 4 3 3 10 7 x := 7 x:=x+1 3+1 4 y := 3 I := 7 x 10 + 3 y x:= y ?

50 Pseudo-kod instrukcja wyboru (decyzyjna) zawiera strukturę opisującą decyzje podejmowane w algorytmie i ich skutki wyboru dokonuje się na podstawie określonego kryterium (warunku), które jest wyrażeniem logicznym

51 Postacie instrukcji warunkowej
skrócona - posiada dwa słowa kluczowe i ma postać: jeżeli warunek to instrukcja np. jeżeli dziecko skończyło 6 lat to zapisz je do szkoły; pełna – posiada trzy słowa kluczowe i ma postać: jeżeli warunek to instrukcja1 w przeciwnym wypadku instrukcja2 np. jeżeli kupiłeś samochód to zrób prawo jazdy w przeciwnym wypadku zatrudnij szofera

52 Instrukcja warunkowa – postać skrócona
to jeżeli warunek FALSE x>4 TRUE Większy!!!! ; instrukcja; czynności bez względu na to czy większy; ciąg dalszy programu;

53 Instrukcja warunkowa – postać pełna
jeżeli warunek wtedy FALSE TRUE instrukcja 1 w przeciwnym wypadku instrukcja 2;

54 jeżeli > stan mojego konta $ to w przeciwnym wypadku

55 instrukcja iteracyjna warunkowa
opisuje sytuację, w której pewne czynności należy powtarzać dopóki podany warunek jest spełniony; powtarzanie czynności opisanych instrukcją kończy się, gdy warunek przestaje być prawdziwy, posiada ona dwa słowa kluczowe i ma postać: podczas, gdy warunek wykonuj instrukcja np. podczas, gdy jest w kasie gotówka wykonuj realizuj polecenie wypłaty

56 Instrukcja iteracyjna warunkowa
MUSI zmieniać elementy warunku! godzina = 8.00 podczas, gdy TRUE godzina < 10 8 10<10 warunek TRUE 9 < 10 FALSE wykonuj PRZERWA! Na Kit-Kat PRACUJ! instrukcja ZEGAR: godzina=godzina +1 9 8 10

57 instrukcja iteracyjna
może być używana w sytuacji, gdy pewne czynności należy wykonać określoną liczbę razy posiada dwa słowa kluczowe i ma postać: dla wykaz sytuacji wykonuj instrukcja np. dla każdego studenta z roku wykonuj wystaw ocenę końcową;

58 Koniec spacerów! ( dla ) nie ma psów Azor, King, Lady, Drab, wykonuj
wyprowadź na spacer Koniec spacerów!

59 Instrukcja iteracyjna
mam pięć fajerwerków, zatem: dla i= 3, 4, 5 2, 1, wykonuj odpal fajerwerk zabrakło fajerwerków

60 Instrukcja iteracyjna warunkowa
wykonuj 2 1 wyświetl wartość ‘i’ na ekranie i= i+1 3 2 aż do momentu gdy KONIEC!! i>2 FALSE i>2 TRUE 3 2

61 instrukcja grupująca instrukcja ta zamiast słów kluczowych używa symboli nawiasu klamrowego i ma postać: { instrukcja 1 a następnie instrukcja 2 ... instrukcja n }

62 instrukcja grupująca służy do zaznaczenia, że daną grupę instrukcji trzeba traktować jako całość używana w sytuacji, gdy w danym miejscu reguły zapisu wymagają tylko jednego zdania, a potrzebna jest więcej niż jedna instrukcja

63 Zapis graficzny Zapis graficzny algorytmu można zrealizować w postaci:
schematu blokowego zorientowanego; schematu zwartego NS (Nassi – Shneidermana )

64 Schemat zorientowany nie używa się go od 30 lat
umożliwia niestrukturalny zapis algorytmu możliwy jest skok w dowolne miejsce schematu

65 klatka początku algorytmu klatka kończąca algorytm
START klatka początku algorytmu klatka kończąca algorytm pobieranie danych do przetwarzania, wyprowadzanie wyników, klatka operacji bezwarunkowej, klatka decyzyjna, klatka iteracyjna, STOP WE WY TAK NIE

66 Schemat blokowy zorientowany
Poszczególne klatki schematu łączy się strzałkami, których zwrot określa kolejność wykonywanych kroków algorytmu Zapis w postaci schematu zorientowanego może prowadzić do programów niestrukturalnych, gdyż umożliwia przeskok z dowolnego miejsca algorytmu w inne Dlatego też powstały schematy zwarte NS, które zastąpiły schematy blokowe zorientowane

67 Schematy NS Schematy zwarte NS poprzez to, że składają się ze zwartych bloków uniemożliwiają zapis skoków wewnątrz algorytmu, zmuszając programistę do myślenia strukturalnego Sposób rozwiązania danego problemu zapisany w postaci schematu zwartego jest łatwiejszy do zrozumienia przez osoby postronne Zapis algorytmu w postaci schematu NS ułatwia sprawdzenie jego poprawności, a co za tym idzie, programy pisane według tego typu schematów zawierają mniej błędów

68 instrukcje refrenu wykonują się wtedy, gdy warunek jest spełniony
instrukcja imperatywna, określająca czynność do wykonania, której opis wpisuje się wewnątrz klatki wprowadzanie danych, wykaz danych do wprowadzenia wpisuje się wewnątrz klatki, w trójkącie można wpisać numer urządzenia wejścia wyprowadzanie wyników, wykaz wartości do wyprowadzenia wpisuje się wewnątrz klatki, w trójkącie można wpisać numer urządzenia wyjścia instrukcja decyzyjna (wyboru) jeśli, czynność dane wyniki warunek Tak Nie instr instr2 warunek refren instrukcje refrenu wykonują się wtedy, gdy warunek jest spełniony refren warunek instrukcje refrenu wykonują się aż do chwili, gdy warunek zostanie spełniony

69 Schematy NS zadanie, dla którego zostaną przedstawione algorytmy jego rozwiązania przy użyciu każdej z opisanych wyżej instrukcji iteracyjnych dzięki temu widoczne będą różnice w zastosowaniu każdej z nich należy zaznaczyć, iż są zadania, których algorytmy rozwiązań nie dadzą się zrealizować przy użyciu instrukcji iteracyjnej „dla” instrukcja ta jest więc węższa w zastosowaniu w porównaniu z dwoma pozostałymi instrukcjami iteracyjnymi

70 Schemat NS Obliczyć sumę i iloczyn podanych 4 liczb.
Schemat zwarty algorytmu, który generuje żądany wynik przy użyciu: instrukcji iteracyjnej „while” rozwiązanie 1 instr. iteracyjnej „dopóki” rozwiązanie 2 instrukcji iteracyjnej „dla” rozwiązanie 3

71 Rozwiązanie 1 . Schemat obliczania sumy i iloczynu podanych trzech liczb {2,5,10} z wykorzystaniem pętli „podczas gdy” S:=0, Il:=1 n:=1 n <= 3 S 17 2 7 „Podaj liczbę: ” Il 10 2 1 100 a S:= S+a Il:=Il*a n 4 3 2 1 n:= n+1 warunek pętli a 10 5 2 KONIEC Suma=17 Iloczyn=100 ? TRUE FALSE 4 3 1 2 n<=3

72 Rozwiązanie 2 . Schemat obliczania sumy i iloczynu podanych trzech liczb { 2,5,10} z wykorzystaniem pętli „dopóki” S:=0, Il:=1 S 7 2 17 n:=1 „Podaj liczbę: ” Il 1 100 10 2 a n S:= S+a 1 3 4 2 Il:=Il*a a 2 10 5 n:= n+1 n > 3 warunek pętli 4 3 TRUE 2 n>3 FALSE KONIEC Suma= Iloczyn=100

73 Rozwiązanie 3 .Schemat obliczania sumy i iloczynu podanych 3 liczb {2,5,10} z wykorzystaniem pętli „dla” licznik pętli n S:=0, Il:=1 1 2 4 3 n = „Podaj liczbę: ” a a 2 5 10 S:=S+a Il:=Il*a S 7 2 17 Il 2 Suma= Iloczyn=100 1 100 10 KONIEC


Pobierz ppt "dr Anna Kwiatkowska Instytut Informatyki"

Podobne prezentacje


Reklamy Google