Informatika Algoritmy Radim Farana Podklady předmětu Informatika pro akademický rok 2010/2011 Obsah Algoritmus. Vlastnosti algoritmu. Popis algoritmu. Hodnocení algoritmů. Příklady algoritmů. Algoritmus Algoritmus je přesný předpis definující výpočtový proces vedoucí od měnitelných výchozích údajů až k žádaným (vždy správným) výsledkům. Tento předpis se skládá z jednotlivých výpočtových kroků, které jsou zapsány v určitém pořadí. Počet výpočtových kroků musí být konečný. Muhammad ibn Musa Al'Khwarizmi * 778? Baghdad 850? http://www.cs.jcu.edu.au/ftp/web /teaching/subjects/cp1030/1997 /lectures/history/algorism.html 1
Vlastnosti algoritmu determinovanost shrnuje přesnost, srozumitelnost a jednoznačnost. V každém okamžiku řešení musí být jasné, jakou operaci má algoritmus provádět. hromadnost (masovost) algoritmus musí popisovat zpracování celé skupiny příbuzných hodnot. rezultativnost algoritmus musí vždy dospět ke správnému výsledku, a to pomocí konečného počtu kroků. opakovatelnost při stejných hodnotách vstupních dat musí algoritmus vždy dospět ke stejnému výsledku. Algoritmus versus program program posloupnost příkazů, dokumentu je se výpisem programu, je chráněn autorským zákonem. algoritmus postup práce, dokumentuje se zápisem algoritmu, je možné ho patentovat. Program realizuje algoritmus (algoritmy), algoritmus je jeho nutnou součástí. Popis algoritmu Slovní popis pracovní postup, strukturovaný text, zápis pomocí grafu, pseudokód (programovací). Grafický zápis vývojový diagram, Kopenogram, NSdiagram, strukturogram. 2
Slovní popis Příklad 2.1: Z klávesnice čteme celá čísla a vypisujeme je na obrazovku doplněná o informaci, zda je číslo sudé nebo liché. Práce končí po vstupu čísla 0, které se nezpracovává. Příklad 2.3: 10 Read Cislo 20 If Cislo0 Then Goto 90 30 Write Cislo 40 If Int(Cislo/2)*2Cislo Then Goto 70 50 Write "liché" 60 Goto 10 70 Write "sudé" 80 Goto 10 90 End Příklad 2.2: 1 pře ze vstupu 2 když je číslo 0 jdi k bodu 9 3 vyšli číslo na výstup 4 když je číslo sudé, jdi k bodu 7 5 vyšli na výstup "liché" 6 jdi k bodu 1 7 vyšli na výstup "sudé" 8 jdi k bodu 1 9 konec Příklad 2.4: číslo je 0? napiš číslo konec je číslo sudé? napiš "liché" napiš "sudé" Vývojový diagram Popis algoritmů pro FORTRAN (FORmula TRANslator) IBM v r. 1954 Formalizován různými normativy (ČSN 36 9030 ) John Warner Baskus * 3. 12. 1924 Philadelphia, USA http://wwwgap.dcs.stand.ac.uk/~history/ Mathematicians/Backus.html Kopenogram Autoři: Kofránek, Pecinovský a Novák Pro výukový jazyk Karel zpracování řady čísel Ing. Rudolf Pecinovský, CSc. * 17. 7. 1954, Praha http://rudolf.pecinovsky.cz/ MUDr. Jiří Kofránek, CSc. číslo není 0 napiš číslo zpracování řady čísel jedno číslo napiš číslo číslo je sudé číslo není 0 jedno číslo číslo je sudé napiš "sudé" napiš "liché" napiš "sudé" napiš "liché" zpracování řady čísel 3
NS diagramy Autoři: Nassi a Schneiderman Úspornější zápis Stále používán Plugin do Vizio Isaac Ike Nassi číslo není nula http://www.nassi.com napiš číslo číslo je sudé Ben Shneiderman * 21. 8. 1947 http://www.cs.umd.edu/~ben/ ano ne napiš "sudé" napiš "liché" Diagramy aktivit UML Podpora paralelismu rozvětvení karoserie motor sestavení vozu spojení Strukturogramy M. A. Jackson, 1975 * 1936 Základní struktury: http://mcs.open.ac.uk/mj665/ sekvence (posloupnost operací), selekce (větvení). opakování zvláštní případ sekvence. Snadné postupné upřesňování algoritmu Jednoznačný vztah mezi daty a algoritmem Michael Anthony Jackson 4
Strukturogramy Vstupní soubor dat vstup 1 : 1 1 : 1 Algoritmus zpracování výstup čísla nula začátek tělo konec * číslo znázornění opakování čísel příprava 1 : 1 * řádek 1 : 1 piš číslo text vstup / napiš "sudé" číslo je sudé / napiš "liché" Základní struktury Pseudojazyk Vývojový diagram Kopenogram Strukturogram Programový celek (rutina, podrogram, procedura a pod.) definice název (parametry)... end název začátek. konec název horní pruh vybarven žlutě jeden celý strukturogram programový celek použití (volání) název (parametry) název(par.) název blok vybarven červeně, při rekurzívním volání žlutě název(parametry) Podmíněná, rozhodování Pseudojazyk Vývojový diagram Kopenogram Strukturogram Provedení konkrétní i popis činosti popis i popis i popis i Podmíněná (provádí se pouze pokud je splněna určitá ) blok vybarven červeně if podmíněná end if podmíněná horní pruh vybarven modře Rozhodování (pokud platí určená, provede se 1, jinak 2) if 1 else 2 end if 1 2 1 2 horní pruh vybarven modře 1 2 5
Pseudojazyk Vývojový diagram Kopenogram Strukturogram Větvení (podle hodnoty u se provádí určená ) case hodnota 1 1 case hodnota 2 hodnota1 hod.1 hod.2 hodnota1 hodnota2... 2... case else při neznámé hodnotě end case 1 hodnota n n při neznámé hodnotě činn. při činn. činn. nezn. 1 2 hodn. horní pruh vybarven modře činn.1 činn.2 při nezn. hodnotě Opakování s pevným počtem opakování for počítadlozačátek to konec step krok počítadlozačátek počet opakování # počet opakování end for počít. > konec horní a dolní pruh vybarveny zeleně počítadlopočítadlokrok Opakování Pseudojazyk Vývojový diagram Kopenogram Strukturogram Opakování s testem na začátku (dokud platí, se opakuje pokud na začátku opakování není splněna, se vůbec neprovede) while end while horní a dolní pruh vybarven zeleně * Opakování s testem na konci (opakování končí, pokud je splněna i když platí již na začátku opakování, se jednou provede) repeat until (v některých jazycích while end while ) neexistuje Zvláštní i Pseudojazyk Vývojový diagram Kopenogram Strukturogram Vstupní nebo výstupní operace Jako každá jiná popis i Jako každá jiná Jako každá jiná Přípravná Jako každá jiná popis i Jako každá jiná Jako každá jiná Spojka ( končí v jedné části algoritmu a pokračuje v jiné části) Neexistuje číslo číslo Neexistuje Neexistuje 6
Hodnocení algoritmů Složitost algoritmu (binární bitová). Sčítání dvou kbitových čísel má binární bitovou složitost úměrnou délce k. Násobení dvou k a j bitových čísel představuje Tedy celkem nejvýše (j 1) součtů (k j 1) místných čísel: (j 1)(k j 1) < j(k j) < 2kj. Zkráceně: f(n) O(g(n)), f ( n) pro konečnou limitu: lim n g n ( ) Složitost algoritmů Polynomická složitost: výpočet vyžaduje O(k d ) bitových operací sčítání d 1, násobení d 2. Nepolynomická složitost, složitost výpočtu s rostoucím n roste rychleji. n! O(nlog 22 (n)) O(2 k k 2 ). a n Realizace základních operací Sčítání (odečítání) binárně: 45 23 dekadicky: 68 23 45 23 68 1 0 1 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 0 29 6 3 81 7
Násobení Násobení postupné sčítání a rotace 45 x 11 495 1 0 1 1 0 1 x 1 0 1 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 0 1 1 1 1 2 3 4 5 01 12 0 1 3 5 dekadicky: 23.45 x x x Realizace funkcí Taylorova řada f ( x) f ( a) 40000000 f '( a) f ''( a) 10000000 1! 02! a 2 x x 1... 1! 2! 50000000 e x 40000000 50000000 ( x 1) ( x 1) 30000000 ( ) ( ) 2 20000000 x a x... 3 ( x 1) ( x 1) 10000000 0 5 10 15 20 25 30 20000000 30000000 a(k) Suma 1..k problémy kumulace chyb, výpočet e 20 : 5 ( x 1) ( x 1) ln x 2.... 3 3. 5. 5 8