Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałJędrzej Dziurzyński Został zmieniony 10 lat temu
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 dDn 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 a0 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
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.