Základy algoritmizace, návrh algoritmu

Podobné dokumenty
Algoritmus. Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu.

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Základy algoritmizace

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost

Algoritmizace. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Složitost 1.1 Opera ní a pam ová složitost 1.2 Opera ní složitost v pr rném, nejhorším a nejlepším p ípad 1.3 Asymptotická složitost

Algoritmy I, složitost

ALGORITMY A DATOVÉ STRUKTURY

Časová a prostorová složitost algoritmů

Výukový materiál zpracován v rámci projektu EU peníze školám

Časová složitost / Time complexity

Algoritmy a algoritmizace

Lekce 01 Úvod do algoritmizace

Program a životní cyklus programu

Algoritmizace. 1. Úvod. Algoritmus

10. Složitost a výkon

ALGORITMIZACE Příklady ze života, větvení, cykly

Složitost algoritmů. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Algoritmus. Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu.

Algoritmizace- úvod. Ing. Tomáš Otáhal

Digitální učební materiál

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

Numerická stabilita algoritmů

2. Systémová analýza SA návrhová část projektu = příručka projektu - systémový přístup k analýze problémů, nejdůležitější etapa projektu - podrobné st

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

2. lekce Algoritmus, cyklus Miroslav Jílek

Třídy složitosti P a NP, NP-úplnost

Digitální učební materiál

Vývojové diagramy 1/7

NP-ÚPLNÉ PROBLÉMY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

NÁSTROJE A TECHNIKY PROJEKTOVÉHO MANAGEMENTU

Modely teorie grafů, min.kostra, max.tok, CPM, MPM, PERT

TÉMATICKÝ OKRUH Teorie zpracování dat, Databázové a informační systémy a Teorie informačních systémů

NÁSTROJE A TECHNIKY PROJEKTOVÉHO MANAGEMENTU. Projektová dekompozice

Management projektu III. Fakulta sportovních studií přednáška do předmětu Projektový management ve sportu

Algoritmizace složitost rekurzivních algoritmů. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk

Prohledávání do šířky = algoritmus vlny

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

Algoritmizace. Obrázek 1: Přeložení programu překladačem

Různé algoritmy mají různou složitost

Hodnoticí standard. Programátor (kód: M) Odborná způsobilost. Platnost standardu. Skupina oborů: Informatické obory (kód: 18)

Operátory pro maticové operace (operace s celými maticemi) * násobení maticové Pro čísla platí: 2*2

Základy algoritmizácie a programovania

Regulární výrazy. Definice Množina regulárních výrazů nad abecedou Σ, označovaná RE(Σ), je definována induktivně takto:

Řízení projektů. Konstrukce síťového grafu pro řízení projektů Metoda CPM Metoda PERT

Algoritmizace prostorových úloh

Algoritmy. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 15. dubna / 39

U Úvod do modelování a simulace systémů

Asymptotická složitost algoritmů

Algoritmizace prostorových úloh

Výroková a predikátová logika - III

Teorie síťových modelů a síťové plánování

Digitální učební materiál

REGRESNÍ ANALÝZA V PROSTŘEDÍ MATLAB

6 Příkazy řízení toku

3. Třídy P a NP. Model výpočtu: Turingův stroj Rozhodovací problémy: třídy P a NP Optimalizační problémy: třídy PO a NPO MI-PAA

Vztah teorie vyčíslitelnosti a teorie složitosti. IB102 Automaty, gramatiky a složitost, /31

ALGORITMIZACE. Výukový materiál pro tercii osmiletého gymnázia

Operační výzkum. Síťová analýza. Metoda CPM.

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

Úloha ve stavovém prostoru SP je <s 0, C>, kde s 0 je počáteční stav C je množina požadovaných cílových stavů

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk

Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i,

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest

AVDAT Nelineární regresní model

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk

VISUAL BASIC. Přehled témat

1 Strukturované programování

Úvod do informatiky. Miroslav Kolařík

Úvod do problematiky

11 VYPOČITATELNOST A VÝPOČTOVÁ SLOŽITOST

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) b)

Algoritmizace a programování

Základní informace o předmětu Otázka:

Výroková a predikátová logika - II

Časová složitost algoritmů

Datové typy a struktury

Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno

Programování. řídících systémů v reálném čase. Střední odborná škola a Střední odborné učiliště - - Centrum Odborné přípravy Sezimovo Ústí

10. Techniky formální verifikace a validace

Úvod do informatiky. Miroslav Kolařík

Algoritmizace prostorových úloh

NPRG030 Programování I RNDr.Tomáš Holan, Ph.D. 4.patro, č

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

ZÁKLADNÍ NÁSTROJE ŘÍZENÍ JAKOSTI

Lekce 04 Řídící struktury

10. Předpovídání - aplikace regresní úlohy

NP-úplnost problému SAT

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Složitost Filip Hlásek

IB111 Úvod do programování skrze Python

Výroková a predikátová logika - III

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

Transkript:

Základy algoritmizace, návrh algoritmu Algoritmus Předpoklady automatického výpočtu: předem stanovit (rozmyslet) přesný postup během opakovaného provádění postupu již nepřemýšlet a postupovat mechanicky Přesná definice algoritmu vyžaduje sestavit matematický model počítače (výpočtu) konečný automat, zásobníkový automat, Turingův stroj, Naivní (nepřesná) definice algoritmu Algoritmus je konečná posloupnost elementárních kroků (příkazů), organizovaná tak, že po provedení každého kroku je jednoznačně určeno, jaký krok bude následovat nebo zda výpočet končí. Jeho provedení umožní pro každá přípustná data mechanickým způsobem a po konečném počtu kroků získat příslušná výstupní data. Vlastnosti algoritmu Při návrhu je třeba dbát na to, aby výsledný algoritmus byl: mechanický v průběhu jeho provádění již není nutné se vracet k porozumění dané úloze, to je zapotřebí pouze při návrhu algoritmu, jeho provedení lze svěřit i stroji. deterministický po provedení každého kroku musí být jasné, co má následovat, tj. zda výpočet končí nebo jaký krok se provede jako další. hromadný algoritmus neslouží k řešení jediné osamocené úlohy, ale celé třídy úloh, které jsou si navzájem podobné. konečný musí být zajištěno, že pro přístupná data výpočet po provedení konečného počtu kroku vždy jednou skončí. správný požadavek, aby algoritmus vytvořil pro všechna přípustná data příslušná výstupní data, tj. data, která lze považovat za adekvátní řešení daného problému. Správnost znamená, že pokud vstupní data splňují zadanou podmínku na vstup, musí výstupní data spolu se vstupními splňovat výstupní podmínku. (P(Vstup) = True)) (Q(Vstup, Výstup)) = True) Použití algoritmů - některé důležité otázky a odpovědi Lze každý problém řešit algoritmem? NE existují principiálně algoritmicky neřešitelné problémy u jiných problémů algoritmus neznáme - -

Lze o daném postupu vždy rozhodnout, zda je algoritmem? NE V některých případech neumíme ověřit, zda je postup resultativní (konečný). Konečnost nelze ověřit algoritmicky Pokud algoritmus známe, je již vyhráno? NE Algoritmus může vyžadovat tak velké množství kroků, že i na velmi rychlém počítači je nereálné jej provést v přijatelném čase (časová složitost) Algoritmus může vyžadovat neúnosně mnoho paměťových míst (prostorová složitost) Algoritmus může pracovat se zaokrouhlovacími chybami tak nešťastně, že pohltí platné cifry (numerická nestabilita) Prostorová a časová složitost Účinnost (efektivnost) programu je měřená skutečným časem výpočtu programu a počtem bytů paměti potřebných k provedení programu Závislá na konkrétním HW a SW prostředí Analýzou lze určit složitost nezávisle na konkrétní implementaci (zjednodušený model procesoru). Jde však často o komplikovaný výpočet Většinou nás pouze zajímá, jak rychle roste složitost v závislosti na rozsahu řešeného problému asymptotická složitost. Někdy je podstatné znát složitost v nejhorším možném případě pesimistický odhad, například při řízení časově kritických procesů Jindy je důležitější znát průměrnou složitost u náročných výpočtů, které se často opakují. Asymptotickou složitost vyjadřujeme řádem růstu skutečné časové či prostorové složitosti. Tedy porovnáním s nějakou funkcí o jejímž růstu máme určitou představu. Říkáme, že časová složitost roste maximálně (minimálně) tak rychle, jako funkce f(n), jestliže existuje konstanta C tak, že pro dostatečně velké n je T(n) f(n), (T(n) f(n)), kde n je rozměr vstupních dat a T čas potřebný k realizaci výpočtu Nejčastěji se pro porovnání užívají tyto funkce: f(n) - jednotková složitost f(n) log n - logaritmická složitost f(n) n log n - linearitmická složitost f(n) n - lineární složitost f(n) n 2 - kvadratická složitost f(n) n 3 - kubická složitost f(n) n k - obecně polynomická složitost f(n) 2 n - exponenciální složitost f(n) n!, f(n) n n - faktoriální složitost - 2 -

Porovnání růstu vybraných funkcí f (n ) / n 2 0 20 log(n ) 0 0,30, 30 n 2 0 20 n 2 4 00 400 e n 3 7 22 026 485 65 95 n! 2 3 628 800 2 432 902 008 76 640 000 Průběh vybraných funkcí Funkce složitosti 0000000 n! 000000 f(n) - logaritmické měřítko 00000 0000 000 00 0 0, 2 3 4 5 6 7 8 9 0 n e n n k n 2 n log(n) - 3 -

Rozsah řešeného problému za min. x hod. f(n) rozsah za min. rozsah za hod. n n n 2 = 60. n n. log n n n 2 60. n n 2 n n 2 8. n 2 n n n 2 n + 6 n! n n 2 = n + ln 60 / ln (n -) Prostorová (paměťová) složitost Paměťová složitost je dána paměťovými nároky na reprezentaci zpracovávaných dat nikoliv délkou programu obvykle pouze asymptotický odhad řádu růstu v závislosti na rozsahu řešeného problému Časová složitost Výpočet časové složitosti bývá náročná úloha zejména výpočet průměrné složitosti je třeba odhadnout pravděpodobnost každé permutace vstupních dat Obvykle se zjišťuje asymptotická složitost pro nejhorší možný případ neuvažuje se v časových jednotkách, ale v počtu nutných operací operační složitost Jak ověřit algoritmus? Důkaz korektnosti: Parciální (částečná) korektnost: Pokud vstupy splňují nějakou podmínku, musí vstupy spolu s výstupy splňovat nějakou podmínku. (P(Vstup) = True)) (Q(Vstup, Výstup)) = True). Zachování této podmínky se sleduje krok po kroku během provádění algoritmu Resultativnost: Ověří se, že postup někdy skončí. Obecný návod k ověření neexistuje. Testování na zkušebních datech Ověří vždy pouze nesprávnost algoritmu (pro vyvrácení správnosti stačí jediný protipříklad) Nikdy nelze testováním na zkušebních datech plně prověřit správnost. Vždy lze jen snížit pravděpodobnost chyb Testovací data je třeba volit vhodně (projít všechny cesty v algoritmu aspoň jednou verzí vstupních dat, brát hodnoty blízké mezi přípustnosti, ověřit reakci na nepřípustná data ) - 4 -

Grafické znázornění algoritmu VÝVOJOVÉ DIAGRAMY Vývojové diagramy se někdy též označují jako bloková schémata, grafy řízení univerzální, avšak ne bezproblémový prostředek znázorňují časový postup provádění kroků algoritmu pomocí orientovaného grafu s jediným počátečním uzlem (začátek postupu) s jediným koncovým uzlem (konec postupu). jednotlivé uzly (bloky) jsou spojeny šipkami (orientované hrany grafu) Bloky vývojového diagramu: Výkonné bloky - po daném kroku následuje vždy jednoznačně určený (následující) krok. Výsledkem kroku je obvykle změna obsahu paměti nebo akce na vnějším zařízení. Rozhodovací bloky - po daném kroku mohou následovat dva různé bloky v závislosti na splnění či nesplnění určité podmínky. V těchto blocích se vyhodnotí splnění, či nesplnění podmínky. Slučovací bloky - slouží ke sloučení dvou šipek znázorňujících tok řízení do jediné. Neprovádí se v nich žádná akce ani rozhodování. Typy uzlů ve vývojových diagramech TYP UZLU graf počet vstupy výstupy Počátek Z 0 Konec K 0 Výkonný n Rozhodovací m 2 (predikátový) Slučovací m 2-5 -

Pravidla pro vývojové diagramy Do výkonného bloku vede vždy jediná šipka a jediná z něj vychází Do rozhodovacího bloku vede jediná šipka a vycházejí z něj dvě šipky Do slučovacího bloku vedou dvě šipky a pouze jediná vychází Existuje počáteční blok, z kterého vychází jedna šipka a žádná do něj nevede Existuje koncový blok, do kterého vede jediná šipka a žádná z něj nevychází Musí být splněna podmínka, že každý uzel leží na nějaké orientované cestě od počátečního uzlu do koncového uzlu. Každý uzel musí být dosažitelný. Nejjednodušší jsou ty konstrukce, které žádný rozhodovací blok neobsahují a ty, které obsahují pouze jediný rozhodovací blok. Ukazuje se, že s těmito konstrukcemi lze již vystačit, pokud nebudeme algoritmus navrhovat najednou v detailech, ale postupným rozkladem složitého úkolu na jednodušší, těch opět na jednodušší, v řadě úrovní, až dospějeme k elementárním krokům algoritmu. Při těchto rozkladech můžeme užívat pouze jednoduché základní konstrukce. Základní konstrukce Sekvence obsahuje pouze výkonné bloky, seřazené za sebou Selekce (výběr alternativ) obsahuje rozhodovací blok a dvě výkonné větve ukončené slučovacím bodem Iterace (cyklus) nejprve slučovací blok, poté rozhodovací blok, z něj se jedna šipka vrací ke slučovacímu bloku a druhá pokračuje Každý uzel musí ležet aspoň na jedné cestě od počátečního uzlu k uzlu koncovému (musí být dosažitelný) Vývojové diagramy lze sestavit i velmi komplikované a mimořádně obtížně srozumitelné. To je jejich hlavní nebezpečí a nevýhoda!! - 6 -

Strukturovaný návrh algoritmu Důvody co nejjednoduššího návrhu a realizace algoritmu: Méně chyb Snadná srozumitelnost pro ostatní a tím i snadné provádění změn (údržby z důvodu oprav chyb, změny prostředí, rozšiřování funkcí) Obvykle i rychlejší a méně nároků na paměť Preference strukturovaného návrhu algoritmu principy: Hierarchický rozklad složité úlohy na jednodušší (postup shora dolů top-down ) v případě potřeby v několika mnoha úrovních Na všech úrovních rozkladu je možné použít pouze základní struktury: sekvence selekce (výběr) iterace (opakování = cyklus) Jiné způsoby rozkladu složité úlohy na jednodušší přípustné nejsou!!! Lze každý problém, který umíme řešit nějakým algoritmem, řešit i strukturovaným algoritmem? ANO Dokonce se nic podstatného neztratí. Lze dokázat, že toho lze vždy dosáhnout přidáním jediné pomocné proměnné. Strukturovaný algoritmus je přehlednější, jednodušší a obvykle i efektivnější. Zkušený a odpovědný programátor navrhuje algoritmy a programy strukturovaně. Příklad nestrukturovaného návrhu - 7 -

Jediná výjimka, jejíž povolení stojí za úvahu - předčasný výskok z cyklu Tak zvané dobře navržené programy nebo BJ-programy tvoří širší třídu než strukturované algoritmy. STRUKTUROGRAMY - 8 -

Výhody a nevýhody strukturogramů Výhody: nelze sestavit nestrukturovaný algoritmus, lze postupně zjemňovat návrh, lze pojmenovávat celky, lze se vždy soustředit na jednoduchou úvahu (jednu úroveň), algoritmus lze odvozovat ze struktury dat Nevýhody: způsob zakreslování není normalizován, spojnice nezaznamenají časovou následnost, ale rozklad úlohy (to může být nenázorné a nezvyklé) PLOŠNÉ STRUKTUROGRAMY Snaha zachovat výhody a minimalizovat nevýhody strukturogramů vede k plošným strukturogramům sekvence selekce Akce ano podmínka ne Akce 2 Akce Akce 2 iterace Podmínka opakování Akce Akce Podmínka opakování Plošné strukturogramy jsou velmi názorný publikační nástroj Časová následnost akcí je v nich v porovnání se stromovými strukturogram potlačena méně. Zpravidla stačí sledovat směr shora dolů. Umožňují používat pouze strukturované konstrukce. Nebezpečí vzniku algoritmu, který není strukturovaný, nehrozí. Částečnou nevýhodou může být to, že není kam zapsat názvy celků, což může vést k menší srozumitelnosti při jejich konstrukci metodou shora-dolů bývá obtížné správně odhadnout velikost ploch, které si v obrázku vyhradíme - 9 -

Ukázka plošného strukturogramu ano Akce Podmínka Akce 2 Podmínka 2 ne Akce 3 Akce 4 Podmínka 3-0 -