wprowadzenie do algorytmow

60
Algorytmy, programy Przy opracowywaniu wykładu wykorzystano m.in.: http://www.algorytm.org/index.php?option=com_frontpage&Itemid=1 Wstęp do informatyki (materiały Wyższej Szkoły Informatyki) J. Sikorski

Upload: peterbuck

Post on 16-Nov-2014

1.686 views

Category:

Documents


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Wprowadzenie do algorytmow

Algorytmy, programy

Przy opracowywaniu wykładu wykorzystano m.in.:http://www.algorytm.org/index.php?option=com_frontpage&Itemid=1

Wstęp do informatyki (materiały Wyższej Szkoły Informatyki) J. Sikorski

Page 2: Wprowadzenie do algorytmow

Algorytmy

• Czym różni się komputer od kalkulatora?

Page 3: Wprowadzenie do algorytmow

Przepis

Składniki

Czynności

Przypomnienie

Page 4: Wprowadzenie do algorytmow

Algorytmy - genezaAlgorytm jest to precyzyjny opis sposobu rozwiązania określonego

zadania lub osiągnięcia jakiegoś celu..

Słowo "algorytm" pochodzi od starego angielskiego słowa algorism, oznaczającego wykonywanie działań przy pomocy liczb arabskich.

Słowo to pochodzi od nazwiska Muhammed ibn Musa Alchwarizmi ( موسى بن محمد الله عبد أبو .matematyka perskiego z IX wieku (الخوارزمي

Upowszechnił system dziesiętny i stosowanie symbolu 0 (zero)

http://pl.wikipedia.org/wiki/Algorytm#Algorytmy_komputerowe

Page 5: Wprowadzenie do algorytmow

Algorytmy - geneza

U podstaw informatyki leżała arytmetyka.

U podstaw algorytmiki logika matematyczna…

Page 6: Wprowadzenie do algorytmow

Algorytmy - geneza

Najstarszym znanym algorytmem jest algorytm Euklidesa który powstał w IV wiek p.n.e

1. Dane są dwie niezerowe liczby naturalne a i b.

2. Dopóki liczby nie są równe powtarzaj krok 3,

w przeciwnym razie przejdź do kroku 4.

3. Od większej liczby odejmij mniejszą i tę większą zastąp otrzymaną różnicą.

4. Wyprowadź wynik: NWD (największy wspólny dzielnik) jest równy pierwszej liczbie.

Page 7: Wprowadzenie do algorytmow

Algorytmy - geneza

Dla liczb 8 i 32

32 – 8, 8 -> 24, 8

24 – 8, 8 -> 16, 8

16 – 8, 8 -> 8, 8 -> 8

Page 8: Wprowadzenie do algorytmow

Algorytmy - geneza

Dla liczb 17 i 4

17-4, 4 -> 13,4

13-4, 4 -> 9, 4

9-4, 4 -> 5, 4

5-4, 4 -> 1, 4

1, 4-1 -> 1, 3

1, 3-1 -> 1, 2

1, 2-1 -> 1, 1 -> 1

Page 9: Wprowadzenie do algorytmow

Algorytmy - geneza

Leibniz w 1680 roku pisał o rozstrzyganiu dysput naukowych za pomocą rachunku - wyobrażał sobie, że filozofowie sprawy sporne zamiast drogą dyskusji rozstrzygać powinni prowadząc obliczenia.

Jego główną ideą było stworzenie języka, w którym wszystkie stwierdzenia zredukowane będą do stwierdzeń ściśle prawdziwych lub fałszywych, pozwalając na rozumowanie w oparciu o logikę formalną.

Znów jestem na WSB?

Page 10: Wprowadzenie do algorytmow

Algorytmy - geneza• W XVIII i XIX w. popularnością cieszyły się marionetki i androidy,

cuda mechaniki, piszące, rysujące i grające na pianinie lalki, automaty do gry w szachy i warcaby.

• Urządzenia te sterowane były skomplikowanymi mechanizmami zegarowymi. Wymienne metalowe płytki, podobnie jak w pianoli wymienne wałki z zapisaną sekwencją naciskania klawiszy, pozwalały na wykonywanie różnych czynności. Płytki te zawierają algorytm ruchów androida.

• Szczególnie piękne, działające do dzisiejszych czasów, budowali szwajcarscy rzemieślnicy. Stworzony przez nich „Skryba” potrafi pisać (gęsim piórem), „Rysownik” robi portrety kilku postaci, a „Muzyk” gra na instrumencie poruszając przy tym głową i zmieniając wyraz twarzy.

Tan android był fałszywy.

Page 11: Wprowadzenie do algorytmow

Człowiek a logika• Niestety logika nie jest naturalnym sposobem

rozumowania człowieka…

• Jest tzw. artefaktem kulturowym, związanym tylko z kulturami, w których rozwinęła się zdolność czytania i pisania.

Page 12: Wprowadzenie do algorytmow

Wracamy do informatyki…

Zainteresowania informatyki dotyczą rozwiązywania zadań algorytmicznych, czyli zadań, dla których można znaleźć formalne sposoby postępowania, prowadzące do ich rozwiązania.

A l g o r y t m i k a

jest podstawowym działem informatyki zajmującym się poszukiwaniem, konstruowaniem i badaniem własności algorytmów w kontekście ich przydatności do rozwiązywania problemów za pomocą komputerów.

Page 13: Wprowadzenie do algorytmow

Definicja w informatyce

Algorytm to kompletny, jednoznaczny przepis przetworzenia w skończonym czasie pewnych danych wejściowych do pewnych danych wynikowych.

Dla identycznego zestawu danych początkowych, algorytm zdefiniowany klasycznie zawsze zwróci identyczny wynik.

Algorytm rozwiązuje określoną klasę problemów.

Page 14: Wprowadzenie do algorytmow

Algorytm musi być kompletny:

Musi uwzględniać wszystkie możliwe przypadki, które mogą pojawić się podczas jego realizacji.

Uwzględnienie rożnych przypadków oznacza zapewnienie realizacji algorytmu, zgodnie z przewidzianymi na taką okoliczność instrukcjami, czyli przewiduje:

• przewidzenie wystąpienia błędów numerycznych i logicznych

• opracowanie systemu reakcji (komunikaty o błędach, odpowiednie zakończenie działania).

np. Obliczanie rozwiązań równania kwadratowego wymaga uwzględnienia przypadków: b2 − 4ac > 0, b2 − 4ac < 0. Czego jeszcze?

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 15: Wprowadzenie do algorytmow

Algorytm musi być skończony:

Musi zapewnić osiągnięcie rozwiązania w skończonej liczbie kroków (a więc też w skończonym czasie).

Skończona liczba kroków nie oznacza, ze z góry wiadomo po ilu krokach algorytm się zakończy.

Komunikat o błędzie lub braku rozwiązania też jest jednym z możliwych poprawnych zakończeń realizacji algorytmu.

Algorytm musi posiadać warunek zakończenie operacji (np. kryterium dokładności) aby nie wykonywał się, mimo że poprawnie, to w nieskończoność.

Np. obliczenie liczby PI – Jaka dokładność?Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 16: Wprowadzenie do algorytmow

Algorytm musi być jednoznaczny:

Dla tych samych danych wejściowych algorytm musi zawsze dawać te same wyniki.

Oznacza to niezależność działania programu od momentu jego wykonania, wpływu innych programów realizowanych równocześnie przez system operacyjny oraz, co najtrudniejsze, od sprzętu realizującego dany algorytm

np. algorytmy wykonujące obliczenia arytmetyczne powinny dawać dokładnie takie same wyniki - jest to bardzo trudne do spełnienia (różne kodowanie liczb, różne algorytmy ich przetwarzania)

np. algorytmy formatujące tekst (procesory tekstu) powinny dawać taki sam wygląd strony (układ tekstu, łamanie wyrazów, etc.) zgodny z informacją zapisaną w pliku.

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 17: Wprowadzenie do algorytmow

Dla rozruszania umysłów – łamigłówka algorytmiczna:

A ma wyznaczyć wiek trójki dzieci kolegi B• B informuje, że iloczyn wieku dzieci to 36• A zastanawia się i prosi o dodatkową informację• B podaje sumę wieku dzieci 13• A zastanawia się, ale dalej nie może ustalić wieku dzieci,

prosi o dodatkową informację• B informuje, że najstarsze dziecko gra na gitarze• A podaje rozwiązanie zagadki

• Jakie kroki należało przeprowadzić?

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 18: Wprowadzenie do algorytmow

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 19: Wprowadzenie do algorytmow

• Większość zadań da się zalgorytmizować, czyli znaleźć algorytm prowadzący do rozwiązania.

• Istnieją rozwiązania algorytmiczne większości problemów matematycznych. Należą do nich zagadnienia wyszukiwania, przesyłania i przetwarzania informacji.

Page 20: Wprowadzenie do algorytmow

• Niektóre problemy dają się rozwiązać w sposób ścisły. Dla innych nie istnieje, lub trudno jest znaleźć ścisłe rozwiązanie.

• Dla takich problemów próbuje się znajdować algorytmy heurystyczne.

Z takimi rozwiązaniami związane są też zagadnienia tzw. „sztucznej inteligencji”.

Page 21: Wprowadzenie do algorytmow

Zapisujemy algorytmy

Page 22: Wprowadzenie do algorytmow

Reprezentacja algorytmów

• Algorytmy powinny być tak przedstawiane, aby było możliwe ich jednoznaczne odczytanie i zastosowanie.

• Niektóre algorytmy można opisać w języku potocznym, zwłaszcza wtedy, gdy jego wykonawcą ma być człowiek

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 23: Wprowadzenie do algorytmow

Reprezentacja algorytmów

• lista kroków - najbardziej naturalny sposób zapisu algorytmu,

• graficznie (tzw. schematy blokowe) - z użyciem symbolicznych elementów będących odpowiednikiem czynności,

• w pseudojęzyku programowania,

• w konkretnym języku np. C++, TP, Java, itp.

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 24: Wprowadzenie do algorytmow

Reprezentacja algorytmów

Przykład listy kroków1. Wlać do garnka zimną wodę.

2. Zapalić gaz.

3. Gotować wodę do wrzenia.

4. Włożyć jajko.

5. Odczekać trzy minuty.

6. Zgasić gaz.

7. Wyjąć jajko.

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 25: Wprowadzenie do algorytmow

Reprezentacja algorytmów

Istnieją jednak sytuacje, w których dalsze postępowanie w algorytmie zależy od spełnienia, bądź nie, określonych warunków.

Czasami musimy powtórzyć pewne kroki algorytmu kilka razy.

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 26: Wprowadzenie do algorytmow

Reprezentacja algorytmów

Działa według jednego z dwóch przedstawionych schematów:

Jeśli spełniony jest warunek W, wykonaj instrukcję A.

Jeśli spełniony jest warunek W, to wykonaj instrukcję A; w przeciwnym razie wykonaj instrukcję B.

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 27: Wprowadzenie do algorytmow

1. Podnieś słuchawkę.

2. Wybierz cyfrę 6.

3. Wybierz cyfrę 1.

4. Wybierz cyfrę 6.

5. Wybierz cyfrę 2.

6. Wybierz cyfrę 2.

7. Wybierz cyfrę 2.

8. Wybierz cyfrę 2.

9. Czy połączyłeś się z koleżanką ?

A. Jeśli TAK, to przejdź do kroku 10.

B. Jeśli NIE, to przejdź do kroku 11.

10. Zaproś koleżankę.

11. Odłóż słuchawkę.Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Umawiamy się na randkę…

Page 28: Wprowadzenie do algorytmow

Reprezentacja algorytmówWielokrotne powtarzanie niektórych instrukcji jest cechą

charakterystyczną wielu algorytmów (choć nie zawsze możemy określić dokładnie liczbę powtórzeń).

Liczba powtórzeń może zależeć od spełnienia pewnych warunków.

Wielokrotne powtarzanie instrukcji umożliwiają instrukcje iteracyjne (pętle). Są różne rodzaje pętli.

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 29: Wprowadzenie do algorytmow

1. Podnieś słuchawkę.

2. Wybierz cyfrę 6.

3. Wybierz cyfrę 1.

4. Wybierz cyfrę 6.

5. Wykonaj czynność cztery razy

A. Wybierz cyfrę 2.

6. Czy połączyłeś się z koleżanką ?A. Jeśli tak, to przejdź do kroku 7.

B. Jeśli nie, to przejdź do kroku 8.

7. Zaproś koleżankę.

8. Odłóż słuchawkę.

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Umawiamy się na randkę… z pętlą

Page 30: Wprowadzenie do algorytmow

1.Czy słuchawka jest odłożona ?

A.Jeśli tak, to przejdź do kroku 2.

B.Jeśli nie, to odłóż słuchawkę.

2.Podnieś słuchawkę.

3.Czy linia jest zajęta ?

A.Jeśli Tak, to:

a.Odłóż słuchawkę.

b.Podnieś słuchawkę.

c.Przejdź do kroku 3.

B.Jeśli Nie, to przejdź do kroku 4.

4.Wybierz cyfrę 6.

5.Wybierz cyfrę 1.

6.Wybierz cyfrę 6.

7.Wykonaj czynność cztery razy

A.Wybierz cyfrę 2.

8.Czy połączyłeś się z koleżanką ?

A.Jeśli tak, to przejdź do kroku 9.

B.Jeśli nie, to przejdź do kroku 1.

9.Zaproś koleżankę.

10.Odłóż słuchawkę.Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Umawiamy się na randkę…

kompleksowo

Page 31: Wprowadzenie do algorytmow

Schematy blokowe

• Algorytmy wygodnie jest zapisywać w postaci diagramów czy schematów blokowych.

• Takie schematy przedstawiają w formie graficznej każdy krok wykonywanego algorytmu.

Page 32: Wprowadzenie do algorytmow

Schematy blokowe

• Schematy blokowe są tzw. metajęzykiem - jest to język ogólny, służy do opisywania algorytmów w taki sposób, by na jego podstawie można było je zaimplementować w każdym języku.

• Częściami składowymi schematów blokowych są proste figury geometryczne.

Page 33: Wprowadzenie do algorytmow

Schematy blokowe

Ta figura oznacza początek lub koniec algorytmu. W każdym algorytmie musi się znaleźć dokładnie jedna taka figura z napisem "Start" oznaczająca początek algorytmu oraz dokładnie jedna figura z napisem "Stop" oznaczająca koniec algorytmu.

START

STOP

Page 34: Wprowadzenie do algorytmow

Proces

Jest to figura oznaczająca proces. W jej obrębie umieszczamy wszelkie obliczenia lub podstawienia.

To odbywa się więc właściwe przetwarzanie danych.

Page 35: Wprowadzenie do algorytmow

Warunek

Romb symbolizuje blok decyzyjny. Umieszcza się w nim warunek (np. "x>2"). Z dwóch wierzchołków rombu prowadzą drogi TAK: gdy warunek jest spełniony oraz NIE: gdy warunek nie jest spełniony.

TAKNIEwarunek

Page 36: Wprowadzenie do algorytmow

Odczyt / zapis

Równoległobok oznacza odczyt lub zapis danych. Oznacza więc tzw. operacje wejścia/wyjścia (np. „Drukuj wynik na ekranie”).

Page 37: Wprowadzenie do algorytmow

Funkcje, procedury

Oznacza proces, który został wcześniej zdefiniowany. Możemy się więc do niego odwołać. W ten sposób oznaczane są np.. Funkcje i procedury.

Page 38: Wprowadzenie do algorytmow

Łączniki

Łącznik, który oznacza punkt do którego prowadzi wiele dróg, które „schodzą” się w tym miejscu.

Page 39: Wprowadzenie do algorytmow

Przykład 1

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Opracuj algorytm obliczający sumę 3 wprowadzonych z klawiatury liczb.

Algorytm w postaci ciągu kroków do wykonania:

1.Podaj pierwszą liczbę

2.Podaj drugą liczbę

3.Podaj trzecią liczbę

4.Dodaj do siebie liczby i wynik zapamiętaj

5.Wypisz otrzymany wynik

Page 40: Wprowadzenie do algorytmow

Przykład 1

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 41: Wprowadzenie do algorytmow

Przykład 2

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 42: Wprowadzenie do algorytmow

Przykład 3

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 43: Wprowadzenie do algorytmow

Przykład 4

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 44: Wprowadzenie do algorytmow

Przykład 5 – algorytm Euklidesa

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 45: Wprowadzenie do algorytmow

A jak wygląda nasz przykład z umawianiem się na randkę…?

Page 46: Wprowadzenie do algorytmow

Pseudokod• Czasem algorytmy zapisuje się w języku

symbolicznym służącym jedynie do zapisu algorytmów, tzw. pseudokodzie.

IF HoursWorked > NormalMax THEN

Display overtime message ELSE

Display regular time message ENDIF

CASE Title OF Mr : Print "Mister" Mrs : Print "Missus" Miss : Print "Miss" Ms : Print "Mizz" Dr : Print "Doctor" ENDCASEv

FOR X = 1 to 10 FOR Y = 1 to 10 IF gameBoard[X][Y] = 0 Do nothing ELSE CALL figureFound(X, Y) increment counter END IF END FOREND FOR

Page 47: Wprowadzenie do algorytmow

Klasyfikacja algorytmów

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 48: Wprowadzenie do algorytmow

Klasyfikacja algorytmów

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 49: Wprowadzenie do algorytmow

Klasyfikacja algorytmów

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 50: Wprowadzenie do algorytmow

Klasyfikacja algorytmów

Algorytmy rekurencyjne

Algorytmy sekwencyjne

Co to jest rekurencja?

Page 51: Wprowadzenie do algorytmow

Rekurencja

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Rekurencja, rekursja (ang. recursion) - cecha algorytmu,

polegająca na tym, że w którymś kroku algorytmu następuje

odwołanie do całego algorytmu.

Obiekt rekurencyjnym – obiekt, który częściowo składa się z

siebie samego lub jego definicja odwołuje się do jego samego

(np. płatek śniegu, kalafior, fraktale).

Funkcja (procedura) jest rekurencyjna, jeśli wywołuje sama

siebie.

Page 52: Wprowadzenie do algorytmow

Rekurencja

Page 53: Wprowadzenie do algorytmow

Rekurencja

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Ważne jest, aby kolejne wywołania funkcji

(procedury) rekurencyjnej były realizowane

dla kolejnych wartości parametrów

formalnych w taki sposób, aby nie doszło

do zjawiska „nieskończonej pętli

rekurencyjnych wywołań funkcji”

Page 54: Wprowadzenie do algorytmow

Rekurencja

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Definicja rekurencyjna składa się z dwóch części:

• W pierwszej, zwanej podstawową lub warunkiem początkowym, są wyliczone elementy podstawowe, stanowiące części składowe wszystkich pozostałych elementów zbioru.

• W drugiej części, zwanej krokiem indukcyjnym, są podane reguły umożliwiające konstruowanie nowych obiektów z elementów podstawowych lub obiektów zbudowanych wcześniej. Reguły te można stosować wielokrotnie, tworząc nowe obiekty.

Page 55: Wprowadzenie do algorytmow

Silnia

wczytaj n;

n = 0

zwróć n*(n-1)! zwróć 1

POWRÓT

START

TAKNIE

Page 56: Wprowadzenie do algorytmow

Przykład – rekurencyjne obliczanie silni

Przykład z http://www.cs.put.poznan.pl/akobusinska/downloads/wprowadzenie/w4-algorytmy.pdf

Page 57: Wprowadzenie do algorytmow

Wieże HanoiProblem:

Przełożyć krążki, przenosząc po jednym, z jednego „patyka” na drugi z zachowaniem docelowej kolejności (mniejsze na większych).

Dla 3:

Page 58: Wprowadzenie do algorytmow

Wieże Hanoi

Rozwiązanie sprowadza się do odpowiedniego podziału problemu w sposób rekurencyjny.

Page 59: Wprowadzenie do algorytmow

Ciąg Fibonacciego

F = 1 + 1 + 2 + 3 + 5 + 8 + 13…

F(5)= F(4) + F(3) = F(3) + F(2) + F(2) + F(1) = F(2) + F(1) + F(1) + F(0) + F(1) + F(0) + F(1)= F(1) + F(0) + F(1) + F(1) + F(0) + F(1) + F(0) + F(1) = 1 + 0 + 1 + 1 + 0 + 1 + 0 + 1 =

5 - pułapka rekurencji!

Ciąg Fibonacciego używany jest do określanie idealnej populacji zwierząt

(pszczoły,króliki), jest również używany w pseudogeneratorach liczb losowych oraz w zaawansowanych

obliczeniach matematycznych.

Page 60: Wprowadzenie do algorytmow

Podsumowanie, wnioski

?