Informatyka wprowadzenie do algorytmów (I) dr hab. inż. Mikołaj Morzy

Podobne dokumenty
Algorytm. a programowanie -

Algorytmy w teorii liczb

Piotr Chrząstowski-Wachtel Uniwersytet Warszawski. Al Chwarizmi i trzy algorytmy Euklidesa

1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba)

WHILE (wyrażenie) instrukcja;

Zaawansowane algorytmy i struktury danych

Technologie informacyjne Wykład VII-IX

Algorytmy i struktury danych. Wykład 4

Podstawy programowania. Podstawy C# Przykłady algorytmów

WHILE (wyrażenie) instrukcja;

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 5. Karol Tarnowski A-1 p.

Algorytmy i struktury danych

Algorytm i złożoność obliczeniowa algorytmu

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

2.8. Algorytmy, schematy, programy

Podstawy Informatyki. Sprawność algorytmów

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Dr inż. Robert Wójcik, p. 313, C-3, tel Katedra Informatyki Technicznej (K-9) Wydział Elektroniki (W-4) Politechnika Wrocławska

Wykład IV Algorytmy metody prezentacji i zapisu Rzut oka na język PASCAL

Teoria liczb. Magdalena Lemańska. Magdalena Lemańska,

ALGORYTMY MATEMATYCZNE Ćwiczenie 1 Na podstawie schematu blokowego pewnego algorytmu (rys 1), napisz listę kroków tego algorytmu:

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Wstęp do programowania

Algorytmy. Programowanie Proceduralne 1

Wstęp do Informatyki

Algorytm Euklidesa. Największy wspólny dzielnik dla danych dwóch liczb całkowitych to największa liczba naturalna dzieląca każdą z nich bez reszty.

1 Wprowadzenie do algorytmiki

Przykładowe zadania z teorii liczb

Wykład 1. Na początku zajmować się będziemy zbiorem liczb całkowitych

Język C część 2. Podejmowanie decyzji w programie. if else. switch

Algorytmy. Programowanie Proceduralne 1

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Wprowadzenie do algorytmiki

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Luty 2001 Algorytmy (8) 2000/2001

Analiza algorytmów zadania podstawowe

Matematyka dyskretna

Jeszcze o algorytmach

ALGORYTMY I STRUKTURY DANYCH

Zadania do samodzielnego rozwiązania

Iteracje. Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony.

Wielomiany. dr Tadeusz Werbiński. Teoria

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

TEORETYCZNE PODSTAWY INFORMATYKI

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Matematyka dyskretna

FUNKCJE ELEMENTARNE I ICH WŁASNOŚCI

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Największy wspólny dzielnik Algorytm Euklidesa (także rozszerzony) WZAiP1: Chińskie twierdzenie o resztach

5. Rekurencja. Przykłady

1) 2) 3) 5) 6) 7) 8) 9) 10) 11) 12) 13) 14) 15) 16) 17) 18) 19) 20) 21) 22) 23) 24) 25)

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 7 Algorytmy

2. LICZBY RZECZYWISTE Własności liczb całkowitych Liczby rzeczywiste Procenty... 24

Luty 2001 Algorytmy (7) 2000/2001

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 1

Język C zajęcia nr 5

1. Równania i nierówności liniowe

WYRAŻENIA ALGEBRAICZNE

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

Matematyka dyskretna

Indukcja matematyczna

1. LICZBY DZIAŁ Z PODRĘCZNIKA L.P. NaCoBeZu kryteria sukcesu w języku ucznia

Metody numeryczne I Równania nieliniowe

Liczby całkowite i rzeczywiste

W wielu obliczeniach w matematyce bądź fizyce wykonanie niektórych kroków zależy od spełnienia warunku.

Informatyka wprowadzenie do algorytmów (II) dr hab. inż. Mikołaj Morzy

Zasady analizy algorytmów

Rekurencja (rekursja)

Złożoność algorytmów. Wstęp do Informatyki

Zajęcia nr 1 (1h) Dwumian Newtona. Indukcja. Zajęcia nr 2 i 3 (4h) Trygonometria

Teoria liczb. Wykład nr 1: Podzielność i algorytm Euklidesa Semestr letni 2018/2019

Algorytmy komputerowe. dr inŝ. Jarosław Forenc

Zadanie 1. Potęgi (14 pkt)

Opis problemu i przedstawienie sposobu jego rozwiązania w postaci graficznej. Gimnazjum nr 3 im. Jana Pawła II w Hrubieszowie 1

W. Krysicki, L.Włodarski, Analiza matematyczna w zadaniach cz. 1 i cz. 2. Pomocnicze symbole. Spójniki logiczne: Symbole kwantyfikatorów:

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Indukcja matematyczna. Zasada minimum. Zastosowania.

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Teoria liczb. Zajmuje się własnościami liczb, wszystkim całkowitych

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p.

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

WYMAGANIA EDUKACYJNE NA POSZCZEGÓLNE OCENY MATEMATYKA KLASA 8 DZIAŁ 1. LICZBY I DZIAŁANIA

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

WYMAGANIA EDUKACYJNE Z MATEMATYKI W KLASIE VIII

Ćwiczenia z teoria liczb, ciąg dalszy (pt 15 maja) Matematyka Dyskretna

Logarytmy. Funkcje logarytmiczna i wykładnicza. Równania i nierówności wykładnicze i logarytmiczne.

Funkcja kwadratowa. f(x) = ax 2 + bx + c,

Algorytmy komputerowe. dr inż. Jarosław Forenc

Metody numeryczne Wykład 4

Zagadnienia - równania nieliniowe

WYMAGANIA EDUKACYJNE NA POSZCZEGÓLNE OCENY MATEMATYKA STOSOWANA - KLASA II I. POWTÓRZENIE I UTRWALENIE WIADOMOŚCI Z ZAKRESU KLASY PIERWSZEJ

Analiza algorytmów zadania podstawowe

Podstawowe algorytmy i ich implementacje w C. Wykład 9

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

Algorytm. Krótka historia algorytmów

Algorytmy i Struktury Danych, 2. ćwiczenia

Transkrypt:

Informatyka wprowadzenie do algorytmów (I) dr ha. inż. Mikołaj Morzy

jak zagotować wodę na heratę?

Muḥammad in Mūsā al-khwārizmī urodzony w Chorezmie, żył w latach ok. 780 - ok. 850 pracował w Domu Nauk w Bagdadzie największe dzieło to Hisa al dżar w'al muquaala zajmował się matematyką, geografią, astronomią i astrologią wprowadził do Europy indyjski system numeryczny twórca nowożytnej algery i trygonometrii równania liniowe i kwadratowe talice funkcji trygonometrycznych mapa współczesnego świata astrolaium i zegar słoneczny

metoda oliczania równań kwadratowych ogólne równania postaci x + x + c = 0 przykład: x + 10x 39 = 0 pole kwadratu wynosi x + 5 x + 5 x + 5 = 39 + 5 = 64 ok kwadratu wynosi zatem 8 szukana wartość x = 8 5 = 3 metoda działa dla dowolnych x = c + ( ) > 0, c < 0

zapis metody metodę al-khwarizmiego można zapisać następująco 1. podziel przez i wynik zapisz w pomocniczej zmiennej '. podnieś ' do kwadratu 3. dodaj do otrzymanej liczy wartość c 4. wyciągnij z sumy otrzymanej w (3) pierwiastek kwadratowy 5. odejmij od uzyskanej wartości zmienną ' 6. otrzymana licza jest szukanym nieujemnym pierwiastkiem równania x + x + c = 0 czy to ay na pewno jest poprawny krok? c > 0, c + ( ) > ( ) = = '

zadanie samodzielne zaprojektuj analogiczną metodę graficzną dla rozwiązania równania x = 5x + 6 5 1 x 6 x

co to jest algorytm? przepis postępowania który prowadzi do uzyskania rozwiązania zadania w skończonej liczie kroków przepis kucharski zapis nutowy muzyki instrukcja montażu mela opis dojazdu układ choreograficzny

cechy algorytmu sposó zapisu język naturalny schemat lokowy instrukcje programu pseudokod sposó zapisu musi pozwalać na wyrażenie sekwencyjności wyoru iteracji rekursji

sekwencyjność sekwencyjność odnosi się do konieczności wykonania kroków algorytmu zgodnie z kolejnością ich zapisu 1. weź 4 jajka, szklankę cukru i cukier waniliowy. utrzyj żółtka z cukrem 3. przygotuj szklankę mąki z łyżeczką proszku do pieczenia 4. dodaj część mąki do ucieranej masy 5. uij pianę z iałek 6. dodaj do ucieranej masy pianę i resztę mąki 7.

wyór opis algorytmu może zawierać wiele alternatywnych ścieżek wiodących do celu jeżeli ucierana masa jest zyt gęsta to wtedy dodaj łyżkę wody jeżeli gracz odpowiedział poprawnie na 3 pytania, to wówczas przechodzi do następnego etapu, w przeciwnym wypadku odpada jeżeli wyróżnik trójmianu kwadratowego jest ujemny, to piszemy ze trójmian nie ma pierwiastków, jeżeli wyróżnik jest równy zero, to piszemy ze trójmian ma jeden pierwiastek, w pozostałych przypadkach trójmian ma dwa pierwiastki

iteracja iteracja pozwala powtórzyć fragment algorytmu określoną liczę razy lu powtarzać fragment algorytmu aż do momentu zajścia pewnego warunku podgrzewaj masę mieszając, dopóki cukier się nie rozpuści powtórz 100 razy czynność "dodaj łyżeczkę wody"

rekurencja rekurencja oznacza podział prolemu na mniejsze zagnieżdżone podprolemy o identycznej strukturze i rozwiązanie podprolemów przez algorytm nadrzędny Przykład (informatyk pod prysznicem) nanieść na rękę niewielką ilość szamponu wymyć włosy szamponem i następnie spłukać czynność powtórzyć

rzeczywisty przykład rekurencji silnia: n! = 1** K*( n 1) * n function silnia(int n) { function silnia(int n) { if (n==1) then return 1; else return n * silnia(n-1); }

pisanie algorytmów czy rozumiemy, co potrafi zroić komputer? podejście redukcjonistyczne podziel prolem na mniejsze i prostsze podprolemy zaprojektuj rozwiązania dla poszczególnych modułów, w razie konieczności podziel podprolem na mniejsze elementy zapisz algorytm w wyranym języku programowania top-down design, od ogółu do szczegółu programowanie jest jedno, jest tylko wiele języków

Euklides z Aleksandrii żył w latach ok. 365 p.n.e. ok. 300 p.n.e. ojciec współczesnej geometrii największe dzieło to Elementy definicja całej geometrii teoria licz związek między liczami doskonałymi i liczami pierwszymi Mersenne'a lemat o faktoryzacji iloczynu przez liczy pierwsze (podstawowe twierdzenie arytmetyki) algorytm znajdowania największego wspólnego dzielnika

algorytm Euklidesa dane są dwie nieujemne liczy całkowite a i takie, że a+ > 0. Wyznacz największą liczę całkowitą c taką, że a mod c = 0, mod c = 0. Liczę c nazywamy największym wspólnym dzielnikiem licz a i i oznaczamy przez (a,) ( a, ) = a if = 0 ( a, ) if > 0 przykład ( 84,36) = (48,36) = (1,36) = (36,1) = (4,1) = (1,1) = (0,1) = (1,0) = 1

zadanie samodzielne udowodnij, że powyższa procedura w skończonej liczie kroków prowadzi do rezultatu (czyli jest poprawnym algorytmem) odpowiedź oa argumenty są po każdym kroku nieujemne zatem suma ou argumentów po każdym kroku jest nieujemna suma argumentów po każdym kroku maleje ciąg licz naturalnych nie może ściśle maleć w nieskończoność

algorytm Euklidesa (wersja 1) function Euclid_1 (int a, int ) { while ( > 0) { if (a < ) then swap(a,); a := a ; } return a; } w kryptografii często 10 18 przeanalizujmy najgorszy możliwy przypadek, a=10 30, =1 załóżmy, że jedna pętla wykonuje się w 0.1 nanosekundy (10-10 s) w ciągu doy wykona się 86400*10 10 pętli w ciągu roku wykona się 365*10 13 pętli od Wielkiego Wyuchu minęło 14 mld lat, czyli 5*10 8 orotów pętli jeśli komputer został uruchomiony na początku istnienia Wszechświata, to zdążył już wykonać około 0% oliczeń

algorytm Euklidesa (wersja ) function Euclid_ (int a, int ) { while ( > 0) { a := a mod ; swap(a,); } return a; } odejmowanie yło potrzene tylko do wyznaczenia reszty z dzielenia od a zawsze odejmujemy całkowite wielokrotności reszta z dzielenia jest zawsze mniejsza od dzielnika a jaki jest najgorszy możliwy przypadek? (1,0)(,1)(3,)(5,3)(8,5)(13,8), jeśli w danym orocie pętli jest (a,), to w poprzednim powinno yć (a+,)

Leonardo Pisano Bigollo żył w latach ok. 1170 ok. 150 ardziej znany jako Fionacci wprowadził do Europy liczy araskie główne dzieło to Lier Aaci adania nad populacją królików ciąg Fionacciego, kolejne pary tworzą złoty podział

liczy Fionacciego definicja F = 0 n 1, F = 1 1, F = + n Fn F 1 1,1,,3,5,8,13,1,... ogólna formuła F n = 1 n n 5 1+ (( 5 ) 1 ( 5 ) ) oznaczmy mamy 1+ 5 1 5 Φ = = 1.618... Φ ' = = 0.318... F n = 1 ( Φ 5 n Φ' n ) 1 Φ 5 n licza rośnie wykładniczo względem indeksu indeks rośnie logarytmicznie względem liczy a po zlogarytmowaniu logφ Fn = n logφ 5 n = logφ Fn + log Φ 5

no i mamy nowy kłopot dla liczy 30-cyfrowej licza pętli to zamiast odejmowania używamy dzielenia z resztą wyznacz cyfrę wyniku przemnóż cyfrę wyniku przez dzielnik log odejmij wynik iloczynu od fragmentu dzielnej 10 30 = wykonaj powyższą procedurę tyle razy, ile cyfr ma iloraz w każdej pętli wykonujemy O(n ) kroków Φ 148.33K licza orotów głównej pętli też jest proporcjonalna do n w każdym systemie pozycyjnym licza cyfr jest proporcjonalna do logarytmu z danej liczy przy podstawie ędącej podstawą systemu łączna licza operacji rzędu O(n 3 ) kroków

rozwiązanie prolemu czy można znaleźć algorytm wyznaczania największego wspólnego dzielnika, który, zachowując złożoność kwadratową, wykorzystywały prostsze operacje niż dzielenie z resztą? = a a 0 = P a a P P a a P P a a P a a a, ), (, ), (, ), (, ), ( ), ( jeśli licza jest parzysta, to rozwiązanie nie zmieni się, jeśli licza parzysta zostanie podzielona przez dzielenie przez wymaga sprawdzenia jedynie ostatniej cyfry w liczie

algorytm Euklidesa (wersja 3) function Euclid_3 (int a, int ) { int nwd := 1; while ( > 0) { if (a < ) then swap(a,); if (even(a) & even()) then { nwd := nwd * ; a := a div ; } := div ; } else if (even(a) &!even()) then a := a div ; else if (!(even(a) & even()) then := div ; else a := a ; } return (nwd * a);

algorytm Euklidesa (wersja 3) : analiza w każdym kroku alo argument jest połowiony, alo staje się parzysty w wyniku odejmowania i zostanie przepołowiony w kolejnej pętli maksymalna licza orotów pętli to *(log a + log ) wewnątrz pętli wszystkie operacje mają złożoność liniową złożoność operacji na cyfrach wynosi O((log ) ) a

dziedzina algorytmiczna dziedziną algorytmiczną algorytmu A nazywamy krotkę A,{ o i } r i I,{ j} j J zawierającą nośnik, ziór operacji i ziór relacji których można używać w algorytmie. Euklides 1: Euklides : Euklides 3: N,,, = 0 N, mod, = N,, = 0,*,, P, 0

złożoność algorytmu oliczamy liczę operacji dominujących złożoność wyznaczamy z dokładnością do rzędu wielkości f : N R jest O(g) jeśli istnieją c > 0, m N, takie, że dla każdego n > m zachodzi f(n) cg(n) złożoność zależy od rozmiaru danych sortowanie n oiektów, rozmiarem jest n algorytmy grafowe, rozmiarem jest suma liczy wierzchołków i krawędzi algorytmy liczowe, rozmiarem jest długość zapisu cyfrowego liczy jeśli algorytm wymaga pamięci na pomocnicze struktury, to uwzględniamy złożoność pamięciową w zależności od danych mówimy o złożoności pesymistycznej i złożoności losowej