Wprowadzenie do algorytmow

Preview:

DESCRIPTION

 

Citation preview

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

Algorytmy

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

Przepis

Składniki

Czynności

Przypomnienie

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

Algorytmy - geneza

U podstaw informatyki leżała arytmetyka.

U podstaw algorytmiki logika matematyczna…

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.

Algorytmy - geneza

Dla liczb 8 i 32

32 – 8, 8 -> 24, 8

24 – 8, 8 -> 16, 8

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

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

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?

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.

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.

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.

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.

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

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

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

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

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

• 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.

• 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”.

Zapisujemy algorytmy

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

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

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

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

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

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ę…

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

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ą

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

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.

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.

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

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.

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

Odczyt / zapis

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

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.

Łączniki

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

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

Przykład 1

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

Przykład 2

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

Przykład 3

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

Przykład 4

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

Przykład 5 – algorytm Euklidesa

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

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

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

Klasyfikacja algorytmów

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

Klasyfikacja algorytmów

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

Klasyfikacja algorytmów

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

Klasyfikacja algorytmów

Algorytmy rekurencyjne

Algorytmy sekwencyjne

Co to jest rekurencja?

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.

Rekurencja

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”

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.

Silnia

wczytaj n;

n = 0

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

POWRÓT

START

TAKNIE

Przykład – rekurencyjne obliczanie silni

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

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:

Wieże Hanoi

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

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.

Podsumowanie, wnioski

?