Podklady předmětu pro akademický rok 006007 Radim Faraa Obsah Tvorba algoritmů, vlastosti algoritmu. Popis algoritmů, vývojové diagramy, strukturogramy. Hodoceí složitosti algoritmů, vypočitatelost, časová složitost, NP a NPúplé problémy. Algoritmus 3 Algoritmus je přesý předpis defiující výpočtový proces vedoucí od měitelých výchozích údajů až k žádaým (vždy správým) výsledkům. Teto předpis se skládá z jedotlivých výpočtových kroků, které jsou zapsáy v určitém pořadí. Počet výpočtových kroků musí být koečý. 1
Vlastosti algoritmu 4 determiovaost shruje přesost, srozumitelost a jedozačost. V každém okamžiku řešeí musí být jasé, jakou operaci má algoritmus provádět. hromadost (masovost) algoritmus musí popisovat zpracováí celé skupiy příbuzých hodot. rezultativost algoritmus musí vždy dospět ke správému výsledku, a to pomocí koečého počtu kroků. opakovatelost při stejých hodotách vstupích dat musí algoritmus vždy dospět ke stejému výsledku. Algoritmus versus program 5 program posloupost příkazů, dokumetu je se výpisem programu, je chráě autorským zákoem. algoritmus postup práce, dokumetuje se zápisem algoritmu, je možé ho patetovat. Program realizuje algoritmus (algoritmy), algoritmus je jeho utou součástí. Popis algoritmu 6 Sloví popis pracoví postup, strukturovaý text, zápis pomocí grafu, pseudokód (programovací). Grafický zápis vývojový diagram, Kopeogram, NSdiagram, strukturogram.
Vývojový diagram 7 Popis algoritmů pro FORTRAN (FORmula TRANslator) IBM v r. 1954 Formalizová růzými ormativy (ČSN 36 9030) Začátek čti číslo číslo0 piš číslo koec číslo je sudé piš liché piš sudé Strukturogram 8 M. A. Jackso, 1975 Základí struktury: sekvece (posloupost operací), selekce (větveí). opakováí zvláští případ sekvece. Sadé postupé upřesňováí algoritmu Jedozačý vztah mezi daty a algoritmem Strukturogram 9 Vstupí soubor dat vstup 1 : 1 1 : 1 Algoritmus zpracováí výstup čísla ula začátek tělo koec * číslo zázorěí opakováí čísel příprava 1 : 1 čti číslo * řádek 1 : 1 piš číslo text vstup apiš "sudé" číslo je sudé apiš "liché" čti číslo 3
Základí struktury 10 Pseudojazyk Vývojový diagram Kopeogram Strukturogram Programový celek (rutia, podrogram, procedura a pod.) defiice ázev (parametry)... ed ázev začátek. koec ázev horí pruh vybarve žlutě jede celý strukturogram programový celek použití (voláí) ázev (parametry) ázev(par.) ázev blok vybarve červeě, při rekurzívím voláí žlutě ázev(parametry) Podmíěá, rozhodováí Pseudojazyk Vývojový diagram Kopeogram Strukturogram Provedeí kokrétí i 11 popis čiosti popis i popis i popis i Podmíěá (provádí se pouze pokud je splěa určitá ) blok vybarve červeě if podmíěá ed if podmíěá horí pruh vybarve modře Rozhodováí (pokud platí určeá, provede se 1, jiak ) if 1 else ed if 1 1 horí pruh vybarve modře 1 Větveí (podle hodoty u se provádí určeá ) Pseudojazyk Vývojový diagram Kopeogram Strukturogram 1 case hodota 1 1 case hodota hodota1 hod.1 hod. hodota1 hodota...... case else při ezámé hodotě ed case 1 hodota při ezámé hodotě či. při či. či. ez. 1 hod. horí pruh vybarve modře či.1 či. při ez. hodotě Opakováí s pevým počtem opakováí for počítadlozačátek to koec step krok počítadlozačátek počet opakováí # počet opakováí ed for počít. > koec horí a dolí pruh vybarvey zeleě počítadlopočítadlokrok 4
Opakováí 13 Pseudojazyk Vývojový diagram Kopeogram Strukturogram Opakováí s testem a začátku (dokud platí, se opakuje pokud a začátku opakováí eí splěa, se vůbec eprovede) while ed while horí a dolí pruh vybarve zeleě * Opakováí s testem a koci (opakováí kočí, pokud je splěa i když platí již a začátku opakováí, se jedou provede) repeat util (v ěkterých jazycích while ed while ) eexistuje Zvláští i 14 Pseudojazyk Vývojový diagram Kopeogram Strukturogram Vstupí ebo výstupí operace Jako každá jiá popis i Jako každá jiá Jako každá jiá Přípravá Jako každá jiá popis i Jako každá jiá Jako každá jiá Spojka ( kočí v jedé části algoritmu a pokračuje v jié části) Neexistuje číslo číslo Neexistuje Neexistuje Algoritmus ásobeí dvou čísel Sigle 15 Acc 0 začátek tělo koec Exp expoet(a) expoet(b) 1 Bit(B, I)1 přičti ásobeí Násobeí čísel # I 1 to 4 bit posu Shift(A) Proměé: A, B čiitelé (ormalizovaé matisy) Acc akumulátor Exp expoet I celočíselé počítadlo Fukce: Shift(x) bitová rotace vpravo expoet(x) expoet čísla AccAcc A ormalizace Bit(Acc, 0)1 uprav Shift(Acc) Shift(A) Exp Exp 1 5
Testováí algoritmu Násobeí čísel začátek tělo koec Acc 0 Exp expoet(a) # I 1 to 4 expoet(b) 1 bit 16 Proměé: A : 0,110011001100110011001100. 3 0,011001100110011001100110 0,001100110011001100110011 0,000110011001100110011001 B : 0,100011001100110011001100. 3 ásobeí posu AccAcc A Bit(B, I)1 přičti ormalizace Shift(A) Acc : 0 1,001100110011001100110010 Chyba opisu, 1,001100110011001100110010 riziko ručího testováí Bit(Acc, 0)1 Exp: 7 6 uprav Shift(Acc) Shift(A) Exp Exp 1 I: 1 3 atd. Hodoceí složitosti algoritmů 17 Vypočitatelost algoritmu Turigův stroj (Ala M. Turig, 1936) abstraktí model počítače, s Alozem Churchem vyslovili doměku, že je ekvivaletí s počítačem (s ekoečou pamětí), Dokázal, že elze sestavit stroj, který určí, zda se libovolý stroj zastaví. Determiistický Turigův stroj ekoečá páska čtecí hlava procesor Další krok závisí a vitřím stavu a přečteé hodotě Časové omezeí 18 Čas a vykoáí algoritmu vyjádřeý v počtu elemetárích operací. Všechy operace trvají stejě dlouho. Složitost algoritmu je fukcí vstupu (). Kostatí rozdíly se igorují. Nechť f(), g() jsou fukce z možiy přirozeých čísel do možiy reálých čísel, pak f() O(g()), pokud existuje kostata c, že pro velké platí: f() cg(). 6
Výpočet složitosti algoritmu Násobeí dvou čtvercových matic rozměru ( ) 19 Sub NasobeiCtvercovychMatic(a( ),b( ),c( )) For I 1 to For J 1 to c(i, J) 0 For K 1 to *( *( 1 *( c(i, J) c(i, J) a(i, K)*b(K, J) Next K ) Next J ) Next I ) Ed Sub f() ((1()))4 3 3 zjedodušeí f() ( ( ( 1 ))) 3 Složitost algoritmů 0 Polyomická složitost: výpočet vyžaduje O(k d ) bitových operací sčítáí d 1, ásobeíd. Nepolyomická složitost, složitost výpočtu s rostoucím roste rychleji.! O(log ()) O( k k ). a Příklady fukcí 1 Fukce Přibližé hodoty 10 100 1000 Průběh fukcí (v logaritmickém měřítku) log () 33 664 9966 3 1000 1000000 1000000000 104 1,7E30 1,07E301 0 18 log ()! 099 368800 1,94E13 9,33E157 7,90E9 4E567 16 14 log(f()) 1 10 8 log() ^3 ^ ^log() 6! 4 0 0 5 10 15 0 7
Třídy NP a NPúplých problémů P schůdé algoritmy běžící ejhůře v polyomiálím čase (PT) ásobeí, NP problém (odetermiistic polyomial) eschůdé algoritmy, v PT lze pouze ověřit správost řešeí faktorizace, NPúplý problém NP problémy vzájemě mapovatelé v PT obchodí cestující, (existuje P trasformace jedoho a druhý). 8