1 Algoritmus. 1.1 Úvod

Rozměr: px
Začít zobrazení ze stránky:

Download "1 Algoritmus. 1.1 Úvod"

Transkript

1 1 Algoritmus Cílem této kapitoly je seznámi studenty se základními pojmy informatiky jako jsou algoritmus, program, složitost. Student získá také přehled o složitostních třídách problémů (algoritmů). O algoritmech toho lze říci mnoho. Nejsou vidět, ale jsou důležitou součástí našeho života a běžně je při svých činnostech používáme. Je těžké si představit, jak složitý by byl náš každodenní život složitý, pokud by algoritmy neexistovaly. 1.1 Úvod V 9. století znamenal význam slova algoritmus provádění aritmetiky za pomoci arabských číslic. Dnes se s pojmem algoritmus setkáváme nejčastěji v matematice a v programování, kde označuje sestavení teoretických principů řešení. Využívá se k tomu i mnoho již známých algoritmů. Aniž bychom si to uvědomovali, s algoritmy v podobě návodů či instrukcí se setkáváme také v mnoha běžných každodenních činnostech. Ovšem ne každý návod je algoritmus. Takto lze označit jen postupy, které splňují určité vlastnosti. 1.2 Programování (tvorba algoritmů) V praxi se pod pojem programování schovávají následující činnosti: 1. Analýza (problému) zjistit, co uživatel přesně potřebuje, přesná specifikace úlohy 2. Algoritmizace vymyslet postup, jak danou úlohu řešit 3. Programování/Kódování donutit počítač, aby tento postup realizoval 4. Testování Analýza Často největší problém, je zde nutná spolupráce se zadavatelem. Zadavatel většinou neví, co chce (i když si myslí, že ví) a zjistí, že to chtěl jinak, až když je práce (program) hotová. Proto je vhodné před započetím práce sepsat dokument (specifikace zadání), kde bude přesně uvedeno, co zadavatel požaduje. Algoritmizace Algoritmus si můžeme představit jako kuchařku pro řešení dané úlohy. Algoritmus definujeme jako konečnou posloupnost elementárních příkazů, jejichž provádění umožňuje pro každá přípustná vstupní data mechanickým způsobem získat po konečném počtu kroků příslušná výstupní data. Programování/Kódování Programem budeme nazývat algoritmus, který je zapsaný ve tvaru vhodném pro jeden konkrétní typ procesoru (počítač). Procesory pracují ve strojovém kódu který pro lidi velmi nepřehledný. Proto vznikly programovací jazyky, které můžeme chápat jako kompromis. Pro lidi je relativně dobře čitelný a je snadno přeložitelný do strojového kódu pomocí překladače (kompilátoru). Výhoda je také ta, že jednou napsaný program (v programovacím jazyce) lze přeložit do strojového kódu různých počítaču. 1

2 Prekladač vs. Interpret Prekladač je nástroj, který vezme zdrojový tvar programu (napsaný v programovacím jazyce) a preloží (zkompiluje) ho do strojového kódu daného procesoru (binární tvar programu). Interperet (interpreter) je nástroj, který vezme zdrojový tvar programu a jeho jednotlivé instrukce postupně vykonává. Běh programu je tak pomalejší. Příklad: Uveďte programovací jazyky které znáte a rozhodněte, do které z těchto dvou kategorií patří. Testování Ověření funkčnosti vytvořeného programu. Alfa-testování provádí tvůrce programu, betatestování provádí vybraná skupinka uživatelů (beta-testeri). Na testování nezapomínat! V některých případech je to prakticky jediná možnost, jak zjistit jestli náš program funguje tak jak má. 1.3 Historie algoritmů S ohledem na obecnost algoritmu, jako popisu libovolné běžné každodenní činnosti, sahá počátek vzniku algoritmu až ke vzniku lidstva samotného. Vždyť i činnosti pravěkých lidí měly přesně daný postup, řád, konečnost a výsledek. Postupy, které dnes splňují podmínky algoritmu, se ve vědních oborech objevily již v období starého Řecka, ačkoli v této době pojem algoritmus ještě nebyl vůbec znám. Podstatu a použití algoritmu v období cca 300 let p.n.l. dokládá např. známý Euklidův algoritmus pro výpočet NSD, tj. největšího společného dělitele, nebo v 1 století n.l. Herón z Alexandrie který algoritmicky podal důkaz vzorce pro obsah trojůhelníku, či algoritmus pro hledání odmocniny z čísla. Samotný pojem algoritmus vzniknul zhruba o tisíc let později v 9. století našeho letopočtu, a je spojován se jménem perského matematika Abú Abd Alláh Muhammad ibn Músá al-chwárizmí, který vytvořil systém arabských číslic. Prvním významem slova algoritmus tak bylo provádění aritmetiky pomocí arabských čislic a používal se k vyjádření zejména matematických postupů. Pojem algoritmus ve smyslu dnešního významu se používá zhruba od 20. století. Využití známých algoritmů Algoritmy se dnes využívají ve všech vědních oborech. Nejčastěji se s nimi ale setkáme v matematice a v programování, kde jsou nástrojem k sestavení teoretickému principu řešení daného problému. Vytváření algoritmů je v dnešní době předmětem intenzivního zkoumání a stává se i samostatným vědním oborem, při kterém se v nemalé míře využívají a dále rozvíjejí již vytvořené algoritmy, kterých existuje velmi mnoho, např.: Eratosthenovo síto je algoritmus pro nalezení všech prvočísel menších než zadaná horní mez. Dijkstrův algoritmus slouží k nalezení nejkratší cesty v grafu. Ballman-Fordovův algoritmus nám umožní spočítat nejkratší cestu od uzlu k uzlu v ohodnoceném grafu. Algoritmus de Casteljau pro výpočet bodu na Beziérově křivce. Turingův stroj Díky objevu Alana Turinga ( ), který navrhl abstraktní matematický model počítače - Turingův stroj (1936/37), můžeme algoritmus definovat jako proceduru implementovatelnou pomocí Turingova stroje. TS se skládá z procesorové jednotky, tvořené konečným automatem, programu ve tvaru pravidel přechodové funkce a potenciálně nekonečné pásky pro zápis mezivýsledků. Existuje více obecných definicí Turingových strojů (jednopáskové / vícepáskové deterministické TS, nedeterministické TS, univerzální). V jednom kroku výpočtu stroj v závislosti od aktuálního stavu a od symbolu (resp. k symbolů u k-páskových TS) snímaných hlavami: 1. změní svůj stav, 2

3 2. zapíše symbol na každé políčko snímané hlavou (čímž přepíše symbol, který tam byl zapsaný předtím ), 3. posune každou hlavu o jedno políčko doprava nebo doleva. Způsob, kterým se má změnit stav, přepsat políčka a posunout hlavy, předepisuje přechodová funkce δ. Výpočet končí když stroj přejde do jednoho ze speciálních stop stav, na některých vstupech může výpočet stroje být nekonečný. Další zdroje: - projekt emulátoru TS - projekt animace činnosti TS 1.4 Algoritmy Algoritmem budeme nazývat jakýkoliv postup (návod, soupis kroků), který bude splňovat následující kritéria: 1. Elementárnost algoritmus se skládá z jednoduchých, tzv. elementárních, kroků. 2. Hromadnost, obecnost, univerzálnost algoritmus slouží k řešení celé třídy (skupiny) navzájem si podobných úloh. Úlohy jsou si podobné, ale liší se vstupními daty. Tzn. neřeší jak spočítat 3x7, ale řeší, jak spočítat součin dvou celých čísel. 3. Konečnost pro každá přípustná data algoritmus po konečném počtu kroků (může být libovolně velký) skončí. 4. Determinovanost algoritmu každý krok uvedený v algoritmu musí být jednoznačně a přesně definován. V každé situaci musí být napřosto zřejmé, co a jak se má provést a jak má provádění algoritmu pokračovat. 5. Částečná (parciální) správnost jestliže algoritmus skončí, pak výsledek je správný (tj. nestane se, že pro nějaká přípustná vstupní data algoritmus skončí se špatným výsledkem). 6. Výstup, resultativnost algoritmus musí mít alespoň jeden výstup. Říkáme, že algoritmus vede od zpracování hodnot k výstupu. Můžeme algoritmus chápat také jako funkci, která nám ke vstupu přiřadí příslušný výstup. 7. Mechanické provádění algoritmus může provádět každý bez hlubší znalosti řešené úlohy, např. procesor (umí jen základní sadu příkazů) nebo ten kdo bude vykonávat algoritmus (nemusí to být nutně počítač). 3

4 Druhy algoritmů Algoritmů dnes existuje celá řada a proto existuje klasifikace (roztřídění) do skupin. Rozdělení ale neplatí direktivně, a je běžné, že jeden algoritmus může patři současně i do více skupin. Mezi důležité skupiny algoritmů patří: 1. Rekurzivní algoritmy, které v rámci cyklu volají samy sebe. 2. Pravděpodobnostní algoritmy provádějí některá rozhodnutí náhodně. 3. Paralelní algoritmy lze využít v případě, kdy můžeme algoritmus rozdělit na více samostatných úloh a zpracovávat je odděleně na více strojích. Výhodou je časová úspora. 4. Genetické algoritmy, které pracují na základě napodobování biologických evolučních procesů. Pro vědu jsou přirozené procesy probíhající v přírodě velkým vzorem, protože mohou být chápány a aplikovány i jako možná řešení daného problému. 5. Heuristické algoritmy, jejichž cílem není nalézt přesné řešení daného problému. Tyto algoritmy se používají v situacích, kdy dostupné zdroje nepostačují na využití exaktních algoritmů. Ověřování správnosti algoritmu K ověření správnosti algoritmu nestačí vyzkoušet reakci algoritmu na konečný počet vstupních dat, i když se to tak v praxi často dělá a takové ověření o správnosti algoritmu leccos vypoví. Není ovšem dokázáno, že se algoritmus při neočekávané kombinaci vstupních dat nezhroutí. Pro ověřování správnosti algoritmu neexistuje univerzální metoda, algoritmus by měl být matematicky dokázán sledem předem známých kroků (operací), které nevyvratitelně vedou pro všechna přípustná data k správnému výsledku úlohy. Je zřejmé, že takový algoritmus je pak korektním řešením úlohy. Algoritmus můžeme považovat za korektní, pokud není opomenuta žádná z možností zpracování dat při průchodu algoritmem. Algoritmus je částečně (parciálně) správný, právě když platí, že pokud skončí, vydá správný výsledek. K dokázání částečné správnosti výpočtu můžeme použít tzv. invariant - tvrzení, které platí po celou dobu výpočtu. Nutné je také ověřit konečnost algoritmu (pro všechna přípustná data algoritmus po konečném počtu kroků skončí). Dokazování konečnosti algoritmu Konečnost algoritmu je často intuitivně zřejmá tím, že se pro vstupní data nemůže algoritmus zacyklit. Matematicky lze dokázat konečnost algoritmu takto: Pokud najdeme způsob, který každý stav výpočtu ohodnotí přirozeným číslem, a ukážeme, že provedením jednoho kroku algoritmu se tato hodnota zmenší, je jasné, že algoritmus po konečném počtu kroků skončí, neboť interval počtu průchodů algoritmem je konečný. Kvantitativní ukazatele kvality algoritmů Mezi dva nejdůležitější kvantitativní ukazatele kvality algoritmů patří: operační složitost paměťová složitost Příklady: Zadání: Pole S obsahuje n vzestupně seřazených prvků. Je třeba nalézt funkci typu Boolean, která vrátí hodnotu true, pokud zadaný prvek v poli S existuje, a hodnotu false v opačném případě. Řešení: Řešení hrubou silou - sekvenční hledání function sekvencni_hledani(hodnota, pole) { var existuje = false; var i = 0; while(i<pole.lenght &&!existuje) { if(pole[i] === hodnota) { existuje = true; i++; 4

5 return existuje; Nejhorší případ: prvek v poli není, pak tělo cyklu proběhne (n-1) krát a bude provedeno n porovnání. Cvičení: Je-li pole uspořádáno, lze využít efektivnější binární půlení, napište tento algoritmus. function binarni_hledani(hodnota, pole) { var existuje = false; var i = l = 0; var r = pole.length; while(!ret && r >= 1) { i = Math.round((l+r)/2); if(hodnota === pole[i]) { existuje = true; else { if(hodnota > pole[i]) { l = i+1; else { r = i-1; return existuje; Opět časově nejnáročnější při neexistenci prvku v poli. Cyklus while však proběhne jen (log 2 n) krát. Algoritmus je však mírně paměťově náročnější. Důležitost analýzy složitosti algoritmů Ukážeme na dvou příkladech tisku Fibonacciho posloupnosti: Fibonacci (Leonardo z Pisa) řešil reprodukční problém - kolik párů králíků může vzniknout za rok z jednoho páru, jestliže budeme předpokládat, že každý pár každý měsíc plodí nový pár, který se začne množit od druhého měsíce? Měsíc: Počet párů: f 0 = 0; f 1 = 1 a f n = f n -1 + f n -2 pro n > 1. Varianta 1: Rekurzivní výpočet n-tého Fibonacciho čísla: function fib(n) { return (n == 0)? 0:((n == 1)? 1 : fib(n-1) + fib(n-2)); function printfib(n) { for(var i = 1; i <= n; i++) { console.log(i + " " + fib(i)); Varianta 2: Fibonaccioho posloupnost bez rekurze: function prinfib2(n) { var p0 = p1 = p = 1; for (var i = 1; i <= n; i++) { console.log(i + " " + p0); 5

6 p = p1; p1 = p0 + p1; p0 = p; Pod složitostí algoritmu rozumíme tedy dobu prováděného algoritmu - časovou složitost a rozsah použité operační paměti - paměťovou náročnost (složitost). 1.5 Složitost algoritmu Složitost závisí na velikosti vstupních dat, tj. můžeme popsat jako funkci T(n), kde číslo n udává velikost vstupních dat. Např. T(n) = an + b, kde a, b jsou nějaké konstanty, je zápis lineární časové složitosti (složitost roste lineárně s rostoucí velikostí vstupů). Obvykle je pro odhad složitosti důležitý pouze typ funkční závislosti a nikoliv přesné hodnoty konstant, ty se zanedbávají. Efektivními algoritmy nazveme takové postupy, jejichž složitost je maximálně polynomiální (např. n 127, nikoliv exponenciální např. 2 n ). Provádění exponenciálních algoritmů T(n) = 2 n či dokonce algoritmů o složitosti T(n) = n! může už jen při malém navýšení velikosti vstupních dat trvat i mnoho tisíců a miliónů let. Ani polynomiální algoritmy s velkým stupněm polynomu nebo s velkými vstupními daty nejsou příliš rychlé, viz následující tabulka: V zápisu T(n) = an + b je a multiplikativní konstanta, která v sobě zahrnuje počet operací, který je třeba provést na jednotku vstupních dat. Aditivní konstanta b udává pouze konstantní nárůst složitosti nezávislý na velikosti vstupních dat. Při značné velikosti vstupních dat můžeme konstanty a a b zanedbat, protože vzhledem k velikosti n jsou nepatrné, a výsledná složitost T(n) tak závisí především na velikosti n, tj. velikosti vstupních dat algoritmu. 6

7 Vybereme-li ze všech konstant a největší konstantu, kterou označíme c, platí T(n) cn pro všechna dostatečně velká n. Tuto skutečnost značíme T = O(n), čímž vyjadřujeme asymptotické chování funkce T. Horní odhad složitosti algoritmu T worst (n) udává složitost algoritmu v nejhorším případě. Složitost algoritmu f(n) je asymptoticky menší nebo rovna g(n), tj. f(n) = O(g(n)), právě když existuje taková kladná konstanta c tak, že pro každou velikost dat n od určité hodnoty n 0 platí: 0 f(n) cg(n). Např.: 2n 2 + 3n + 4 = O(n 2 ), neboť pro n 0 = 1 a c = 10 platí 2n 2 + 3n + 4 <= cn 2. Dolní odhad složitosti T best (n) určuje minimální složitost daného algoritmu (nejkratší čas provedení), která nastává jen pro určité případy vstupních dat. Pokud o algoritmu víme, že má dolní odhad složitosti n 2, je jasné, že výsledek nedostaneme rychleji než v kvadratickém čase: Složitost algoritmu f(n) je asymptoticky větší nebo rovna g(n), tj. f(n) = Ω(g(n)), právě když existuje taková kladná konstanta c tak, že pro každou velikost dat n od určité hodnoty n 0 platí: 0 cg(n) f(n). Např. zápis T best (n) = Ω(n 3 ) udává kubickou dolní složitost algoritmu. Složitost v průměrném případě (očekávaná složitost) T avrg (n) se počítá jako střední hodnota náhodné složitosti T(n) při nějakém rozložení vstupních dat. Někdy může být i řádově lepší než složitost v nejhorším případě. Řekneme, že složitost algoritmu f(n) je asymptoticky stejná jako g(n), tj. f(n) = Θ(g(n)), právě když existují takové kladné konstanty c 1,c 2 tak, že pro každou velikost dat n od určité hodnoty n 0 platí: 0 c 1 g(n) f(n) c 2 g(n). Algoritmus je pro danou úlohu optimální, jestliže neexistuje algoritmus, který by tuto úlohu řešil v nejhorším případě s menším počtem základních operací. Často se místo T worst (n) odhaduje pouze podle toho, kolikrát se provedou některé základní, časově nejnáročnější operace. Většinou existuje tzv. triviální dolní odhad, což je velikost instance, protože algoritmus musí vždy projít celý vstup alespoň jednou. 1.6 Složitost úloh P a NP úlohy Třída P je třída všech rozhodovacích úloh U, pro něž existuje polynomiální algoritmus, řešící úlohy U. Rozhodovací úloha je úloha, jejímž řešením je odpověď ano nebo ne. Každou optimalizační úlohu zle převést na rozhodovací úlohu. Příklad - problém obchodního cestujícího. Je zadána množina nějakých bodů a pro každé dva z nich je zadána jejich vzdálenost. Uvažujeme cesty, které vychází z některého z daných bodů, projdou všemi body a vrátí se do výchozího. Optimalizační verze: Najděte trasu nekratší délky. Převedeno na rozhodovací úlohu: Je dáno navíc číslo K. Rozhodněte, zda existuje trasa délky K. Obchodní cestující není zatím ve třídě P, ale je ve třídě NP úloh. NP úloha je taková úloha, kdy platí : pro každou ano instanci lze v polynomiálním čase ověřit správnost odpovědi ano. Pro ne instanci takový algoritmus neexistuje. Třída NP je třída všech rozhodovacích úloh U, pro něž existuje nedeterministický algoritmus, pracující v polynomiálním čase. Nedeterministický algoritmus má dvě fáze. Nedeterministická, kdy se náhodně vygeneruje řetězec symbolů s a deterministická, kdy na vstupu úlohy je jak instance úlohy, tak řetězec s. Po konečném počtu kroků je výstupem ano nebo ne. Řetězec s je vlastně navržené řešení úlohy, které se v deterministické části otestuje, zda platí. Pro obchodního cestujícího je to číslo K. Redukce a polynomiální redukce Obtížnost rozhodovacích úloh se dá srovnávat. Pojem U se redukuje na V vlastně znamená, že rozhodovací úloha U není těžší než rozhodovací úloha V. U se redukuje na V, jestliže existuje algoritmus A, který pro každou instanci I úlohy U zkonstruuje instanci A(I) úlohy V tak, že I je ano instance U právě když A(I) je ano instance V. Je-li algoritmus A polynomiální, pak jde o polynomiální redukci. NP úplné úlohy Rozhodovací úloha U je NP úplná, jestliže je NP úloha a každá NP úloha se na U polynomiálně redukuje. Třídu NP úplných úloh označujeme jako NPC. (NP úplné úlohy jsou nejtěžší mezi NP úlohami). Není známo, zda třídy P a NP jsou opravdu různé. Jinak řečeno, o žádné úloze v NP se nepodařilo dokázat, že není v P. 7

8 Podařilo se však nalézt úlohy, které jsou úplné ve třídě NP. Příklady Otázka (obtížné problémy): Existuje pro každý problém efektivní (polynomiální) algoritmus, který ho řeší? Odpověď: Ne, existují problémy, pro které se dá dokázat, že neexistuje žádný efektivní algoritmus, který by daný problém řešil. Dokonce existují problémy, pro které se dá dokázat, že neexistuje žádný (ani neefektivní) algoritmus, který by daný problém řešil. Námitka (neexistence algoritmů): Jak dokázat, že něco neexistuje? Odpověď: Sporem. Předpokládáme, že to existuje a ukážeme, že z toho vyplývá nějaký závěr, který je ve zjevném rozporu se skutečností (typicky ukážeme, že něco musí být současně pravda i nepravda). Příklad obtížného problému Vstup: Uzavřená aritmetická formule vytvořená ze symbolů +, =,,,,,, (, ), proměnných a celočíselných konstant. Otázka: Je tato formule pravdivá v oboru přirozených čísel? Příklad vstupu: x y z((x + y = z) (y + 5 = x)) Pro tento problém je znám algoritmus se složitostí 2 2^2^O(n). Současně bylo dokázáno, že jakýkoliv algoritmus rešící tento problém má složitost minimálně 2 2^cn. Příklad algoritmicky neřešitelného problému Vstup: Uzavřená aritmetická formule vytvořená ze symbolů +,, =,,,,,, (, ), proměnných a celočíselných konstant. Otázka: Je tato formule pravdivá v oboru přirozených čísel? Příklad vstupu: x y z((x y = z) (y + 5 = x)) Tento problém je algoritmicky neřešitelný (u rozhodovacích problémů se používá též pojem algoritmicky nerozhodnutelný). Úzce souvisí s Gödelovou větou o neúplnosti. Další příklad nerozhodnutelného problému Vstup: Počítačový program a nějaká jeho vstupní data. Otázka: Zastaví se někdy tento program, když dostane na vstup tato data? Idea důkazu nerozhodnutelnosti: Předpokládejme existenci programu H, který řeší tento problém. Můžeme ho snadno upravit na podprogram H (p,v), který vrací Ano" nebo Ne" jako návratovou hodnotu. Vytvoříme nový program D: Vezme svůj vstup x a zavolá H jako H (x,x). Pokud H vrátí Ano", D skočí do nekonečné smyčky. Pokud H vrátí Ne", D se zastaví. Zastaví se program D nebo ne, když mu předložíme jako vstup jeho vlastní kód? 1.7 Třídy problémů Některé problémy jsou těžší než jiné. Při posuzování obtížnosti problémů se ukázalo jako užitečné rozdělit problémy do tříd složitosti, které značíme: PTIME - problémy řešitelné v polynomiálním čase PSPACE - problémy řešitelné s polynomiálním množstvím paměti EXPTIME - problémy řešitelné v exponenciálním čase EXPSPACE - problémy řešitelné s exponenciálním množstvím paměti 8

9 Třída NPTIME Jednou z nejdůležitějších tříd je třída NPTIME. Do třídy NPTIME patří rozhodovací problémy, pro které existuje polynomiální algoritmus, který ověří správnost nalezeného řešení. Přesněji řečeno, pokud je odpověď Ano", existuje svědek, který dosvědčuje, že odpověď je Ano", kterého je možné v polynomiálním čase otestovat, že tomu tak skutečně je. Pokud je odpověď Ne", žádný takový svědek neexistuje. Příklad problému z NPTIME Vstup: Popis mapy (seznam států a informace který stát sousedí s kterým) a číslo k. Otázka: Je možné státy obarvit k barvami tak, aby žádné dva sousední státy neměly stejnou barvu? P vs. NP Jeden z největších otevřených problémů teoretické informatiky: Otevřený problém: Je P = NP? Pozn.: Třídy PTIME a NPTIME bývají také označovány stručněji P a NP. NP-úplné problémy Důležitou podtřídou třídy NPTIME jsou tzv. NP-úplné problémy. Definice Problém P je NP-těžký, jestliže platí, že libovolný problém ze třídy NPTIME je možné v polynomiálním čase redukovat na problém P. Definice Problém P je NP-úplný, jestliže je NP-těžký a současně sám patří do třídy NPTIME. NP-úplné problémy jsou důležité, protože: Kdyby alespoň jeden z nich byl řešitelný v polynomiálním čase, všechny problémy z NPTIME by byly řešitelné v polynomiálním čase. Pokud v NPTIME existuje alespoň jeden problém, který není řešitelný v polynomiálním čase, pak žádný z NP-úplných problémů není řešitelný v polynomiálním čase. Velké množství problémů, které se objevují v praxi v různých oblastech informatiky, je NP-úplných nebo NP-těžkých. To, že NP-úplné problémy nelze řešit v polynomiálním čase je podmínkou nutnou (nikoli však postačující) pro to, aby existovaly šifrovací algoritmy, které by nebyly snadno prolomitelné. Někdy dva problémy mohou vypadat podobně, a přitom jeden z nich je řešitelný v polynomiálním čase, zatímco druhý je NP-úplný. Problém 1 Vstup: Popis měst a silnic. Výstup: Existuje okružní cesta, na které projedeme každou silnici právě jednou? Problém 2 Vstup: Popis měst a silnic. Výstup: Existuje okružní cesta, na které projedeme každé město právě jednou? 9

10 Problém 1 je v PTIME. Problém 2 je NP-úplný. Jak řešit těžké problémy? Pokud pro daný problém neexistuje efektivní algoritmus, máme následující možnosti: 1. Exponenciální algoritmy použitelné jen na malé instance. 2. Aproximační řešení použitelné jen pro optimalizační problémy. Najde řešení, které je o něco horší než optimum. 3. Pravděpodobnostní (randomizované) algoritmy najde rychle řešení, ale řešení je s určitou pravděpodobností špatně. 4. Speciální případy soutředit se jen na některé speciální případy instancí, neřešit problém v plné obecnosti. 5. Heuristiky postup, který najde řešení rychle ve většině rozumných" případů, není však zaručeno že vždy. Příklad: Randomizovaný algoritmus Zadání: Vstup: Přirozené číslo p. Otázka: Je p prvočíslo? Teprve od roku 2003 je znám polynomiální algoritmus (O(n 12+ε ), později o něco zlepšen). V praxi je používán randomizovaný algoritmus se složitostí O(n 3 ): Pokud p je prvočíslo, vrátí vždy odpověď Ano". Pokud p není prvočíslo, je pravděpodobnost odpovědi Ne" minimálně 50%, ale existuje až 50% šance, že program vrátí chybnou odpověď Ano". Program můžeme volat opakovaně (k krát). Pokud program vrátí alespoň jednou odpověď Ne", víme na 100%, že p není prvočíslo. Pokud program vrátí pokaždé Ano", je pravděpodobnost toho, že p není prvočíslo, menší než 2 k. Když k = 100, je pravděpodobnost chyby zanedbatelně malá. Poznámka: Lze například odvodit, že pravděpodobnost toho, že počítač bude zasažen během dané mikrosekundy meteoritem, je nejméně za předpokladu, že každých 1000 let je meteoritem zničeno alespoň 100 m 2 zemského povrchu. 10

10. Složitost a výkon

10. Složitost a výkon Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 10 1 Základy algoritmizace 10. Složitost a výkon doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Jiří

Více

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

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem. Algoritmus Algoritmus je schematický postup pro řešení určitého druhu problémů, který je prováděn pomocí konečného množství přesně definovaných kroků. nebo Algoritmus lze definovat jako jednoznačně určenou

Více

Databáze, sítě a techniky programování X33DSP

Databáze, sítě a techniky programování X33DSP Databáze, sítě a techniky programování X33DSP Anotace: Náplní předmětu jsou některé techniky a metody používané ve výpočetních systémech zaměřených na biomedicínské inženýrství. Cílem je položit jednotný

Více

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

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 1 Složitost 1.1 Operační a paměťová složitost Nezávislé určení na konkrétní implementaci Několik typů operací = sčítání T+, logické T L, přiřazení T A(assign), porovnání T C(compare), výpočet adresy pole

Více

Základy algoritmizace

Základy algoritmizace Algoritmus Toto je sice na první pohled pravdivá, ale při bližším prozkoumání nepřesná definice. Například některé matematické postupy by této definici vyhovovaly, ale nejsou algoritmy. Přesné znění definice

Více

Složitost Filip Hlásek

Složitost Filip Hlásek Složitost Filip Hlásek Abstrakt. Příspěvek popisuje dva základní koncepty teoretické informatiky, Turingovy stroje a složitost. Kromě definic důležitých pojmů uvádí také několik souvisejících tvrzení,

Více

Složitost. Teoretická informatika Tomáš Foltýnek

Složitost. Teoretická informatika Tomáš Foltýnek Složitost Teoretická informatika Tomáš Foltýnek foltynek@pef.mendelu.cz Teoretická informatika 2 Opakování z minulé přednášky Co říká Churchova teze? Jak lze kódovat Turingův stroj? Co je to Univerzální

Více

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

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr Seminář z IVT Algoritmizace Slovanské gymnázium Olomouc Tomáš Kühr Algoritmizace - o čem to je? Zatím jsme se zabývali především tím, jak určitý postup zapsat v konkrétním programovacím jazyce (např. C#)

Více

Algoritmy a výpočetní složitost

Algoritmy a výpočetní složitost Algoritmy a výpočetní složitost Zdeněk Sawa Katedra informatiky Fakulta elekrotechniky a informatiky VŠB-TU Ostrava 3. ledna 2005 Co je to algoritmus? Algoritmus Algoritmus je mechanický postup skládající

Více

Úvod do informatiky. Miroslav Kolařík

Úvod do informatiky. Miroslav Kolařík Úvod do informatiky přednáška devátá Miroslav Kolařík Zpracováno dle učebního textu prof. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008 Obsah 1 Kombinatorika: princip inkluze a exkluze 2 Počítání

Více

Definice 9.4. Nedeterministický algoritmus se v některých krocích může libovolně rozhodnout pro některé z několika možných různých pokračování.

Definice 9.4. Nedeterministický algoritmus se v některých krocích může libovolně rozhodnout pro některé z několika možných různých pokračování. 9.5 Třída NP Definice 9.4. Nedeterministický algoritmus se v některých krocích může libovolně rozhodnout pro některé z několika možných různých pokračování. Příklad. Uvažujme problém IND a následující

Více

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

Vztah teorie vyčíslitelnosti a teorie složitosti. IB102 Automaty, gramatiky a složitost, /31 Vztah teorie vyčíslitelnosti a teorie složitosti IB102 Automaty, gramatiky a složitost, 2. 12. 2013 1/31 IB102 Automaty, gramatiky a složitost, 2. 12. 2013 2/31 Časová složitost algoritmu počet kroků výpočtu

Více

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

Algoritmizace. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Úvod stránky předmětu: https://cw.felk.cvut.cz/doku.php/courses/a4b33alg/start cíle předmětu Cílem je schopnost samostatné implementace různých variant základních

Více

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

Třídy složitosti P a NP, NP-úplnost Třídy složitosti P a NP, NP-úplnost Cíle přednášky: 1. Definovat, za jakých okolností můžeme problém považovat za efektivně algoritmicky řešitelný. 2. Charakterizovat určitou skupinu úloh, pro které není

Více

Algoritmy I, složitost

Algoritmy I, složitost A0B36PRI - PROGRAMOVÁNÍ Algoritmy I, složitost České vysoké učení technické Fakulta elektrotechnická v 1.01 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená??

Více

Pojem algoritmus. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Pojem algoritmus. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Pojem algoritmus doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Pojem algoritmus 54 / 344

Více

Úvod do informatiky. Miroslav Kolařík

Úvod do informatiky. Miroslav Kolařík Úvod do informatiky přednáška jedenáctá Miroslav Kolařík Zpracováno dle P. Martinek: Základy teoretické informatiky, http://phoenix.inf.upol.cz/esf/ucebni/zti.pdf Obsah 1 Složitost algoritmu 2 Třídy složitostí

Více

PŘÍJMENÍ a JMÉNO: Login studenta: DATUM:

PŘÍJMENÍ a JMÉNO: Login studenta: DATUM: PŘÍJMENÍ a JMÉNO: Login studenta: DATUM: Závěrečný test z předmětu Vyčíslitelnost a složitost Doba trvání: 90 minut Max. zisk: 100 bodů Obecné pokyny: Po obdržení testu ihned do pravého horního rohu napište

Více

Algoritmizace. 1. Úvod. Algoritmus

Algoritmizace. 1. Úvod. Algoritmus 1. Úvod Algoritmizace V dnešní době již počítače pronikly snad do všech oblastí lidské činnosti, využívají se k řešení nejrůznějších úkolů. Postup, který je v počítači prováděn nějakým programem se nazývá

Více

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

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 Jan Schmidt 2011 Katedra číslicového návrhu Fakulta informačních technologií České vysoké učení technické v Praze Zimní semestr 2011/12 MI-PAA EVROPSKÝ SOCIÁLNÍ FOND PRAHA & EU: INVESTUJENE DO VAŠÍ BUDOUCNOSTI

Více

ALGORITMY A DATOVÉ STRUKTURY

ALGORITMY A DATOVÉ STRUKTURY Název tématického celku: Cíl: ALGORITMY A DATOVÉ STRUKTURY Metodický list č. 1 Časová složitost algoritmů Základním cílem tohoto tematického celku je vysvětlení potřebných pojmů a definic nutných k popisu

Více

Časová složitost / Time complexity

Časová složitost / Time complexity Časová složitost / Time complexity Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 24 Složitost algoritmů Algorithm complexity Časová a paměťová složitost Trvání výpočtu v závislosti

Více

Třída PTIME a třída NPTIME. NP-úplnost.

Třída PTIME a třída NPTIME. NP-úplnost. VAS - Přednáška 9 Úvod ke kursu. Složitost algoritmu. Model RAM. Odhady složitosti. Metoda rozděl a panuj. Greedy algoritmy. Metoda dynamického programování. Problémy, třídy složitosti problémů, horní

Více

Základy algoritmizace, návrh algoritmu

Základy algoritmizace, návrh algoritmu 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

Více

NP-úplnost problému SAT

NP-úplnost problému SAT Problém SAT je definován následovně: SAT(splnitelnost booleovských formulí) Vstup: Booleovská formule ϕ. Otázka: Je ϕ splnitelná? Příklad: Formule ϕ 1 =x 1 ( x 2 x 3 )jesplnitelná: např.přiohodnocení ν,kde[x

Více

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012 Obecná informatika Přednášející Putovních přednášek Matematicko-fyzikální fakulta Univerzity Karlovy v Praze Podzim 2012 Přednášející Putovních přednášek (MFF UK) Obecná informatika Podzim 2012 1 / 18

Více

Od Turingových strojů k P=NP

Od Turingových strojů k P=NP Složitost Od Turingových strojů k P=NP Zbyněk Konečný Zimnění 2011 12. 16.2.2011 Kondr (Než vám klesnou víčka 2011) Složitost 12. 16.2.2011 1 / 24 O čem to dnes bude? 1 Co to je složitost 2 Výpočetní modely

Více

Třída PTIME a třída NPTIME. NP-úplnost.

Třída PTIME a třída NPTIME. NP-úplnost. VAS - Přednáška 9 Úvod ke kursu. Složitost algoritmu. Model RAM. Odhady složitosti. Metoda rozděl a panuj. Greedy algoritmy. Metoda dynamického programování. Problémy, třídy složitosti problémů, horní

Více

Algoritmy a algoritmizace

Algoritmy a algoritmizace Otázka 21 Algoritmy a algoritmizace Počítačové programy (neboli software) umožňují počítačům, aby přestaly být pouhou stavebnicí elektronických a jiných součástek a staly se pomocníkem v mnoha lidských

Více

Definice 7.2. Nejmenší přirozené číslo k, pro které je graf G k-obarvitelný, se nazývá chromatické číslo (barevnost) grafu G a značí se χ(g).

Definice 7.2. Nejmenší přirozené číslo k, pro které je graf G k-obarvitelný, se nazývá chromatické číslo (barevnost) grafu G a značí se χ(g). 7 Barevnost grafu Definice 71 Graf G se nazývá k-obarvitelný, jestliže každému jeho uzlu lze přiřadit jednu z barev 1 k tak, že žádné dva sousední uzly nemají stejnou barvu Definice 72 Nejmenší přirozené

Více

Týden 11. Přednáška. Teoretická informatika průběh výuky v semestru 1. Nejprve jsme dokončili témata zapsaná u minulé přednášky.

Týden 11. Přednáška. Teoretická informatika průběh výuky v semestru 1. Nejprve jsme dokončili témata zapsaná u minulé přednášky. Teoretická informatika průběh výuky v semestru 1 Týden 11 Přednáška Nejprve jsme dokončili témata zapsaná u minulé přednášky. PSPACE, NPSPACE, PSPACE-úplnost Uvědomilijsmesi,ženapř.prozjištěnítoho,zdaBílýmánějakoustrategiivehřeŠACHY,

Více

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

11 VYPOČITATELNOST A VÝPOČTOVÁ SLOŽITOST 11 VYPOČITATELNOST A VÝPOČTOVÁ SLOŽITOST Na první přednášce jsme si neformálně zavedli pojmy problém a algoritmus pro jeho řešení, které jsme na počítači vykonávali pomocí programů. Jako příklad uveďme

Více

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

Algoritmy. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 15. dubna / 39 Algoritmy Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 15. dubna 2018 1/ 39 Algoritmy Příklad: Popis algoritmu pomocí pseudokódu: Algoritmus 1: Algoritmus pro nalezení největšího prvku v poli 1 Find-Max(A,n):

Více

Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III

Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III Michal Krátký Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 tel.: +420 596 993 239 místnost: A1004 mail: michal.kratky@vsb.cz

Více

3 Co je algoritmus? 2 3.1 Trocha historie... 2 3.2 Definice algoritmu... 3 3.3 Vlastnosti algoritmu... 3

3 Co je algoritmus? 2 3.1 Trocha historie... 2 3.2 Definice algoritmu... 3 3.3 Vlastnosti algoritmu... 3 Obsah Obsah 1 Program přednášek 1 2 Podmínky zápočtu 2 3 Co je algoritmus? 2 3.1 Trocha historie............................ 2 3.2 Definice algoritmu.......................... 3 3.3 Vlastnosti algoritmu.........................

Více

Dynamické programování

Dynamické programování Dynamické programování prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA)

Více

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky

Více

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

Složitost algoritmů. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Složitost algoritmů doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 27. prosince 2015 Jiří Dvorský (VŠB TUO) Složitost algoritmů

Více

Složitost algoritmů. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Složitost algoritmů. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol. Složitost algoritmů Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol., 2017 Datové struktury a algoritmy, B6B36DSA 02/2017, Lekce 3

Více

Rozhodnutelné a nerozhodnutelné problémy. M. Kot, Z. Sawa (VŠB-TU Ostrava) Úvod do teoretické informatiky 24. dubna / 49

Rozhodnutelné a nerozhodnutelné problémy. M. Kot, Z. Sawa (VŠB-TU Ostrava) Úvod do teoretické informatiky 24. dubna / 49 Rozhodnutelné a nerozhodnutelné problémy M. Kot, Z. Sawa (VŠB-TU Ostrava) Úvod do teoretické informatiky 24. dubna 2007 1/ 49 Co je to algoritmus? Algoritmus Algoritmus je mechanický postup skládající

Více

Časová a prostorová složitost algoritmů

Časová a prostorová složitost algoritmů .. Časová a prostorová složitost algoritmů Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Hodnocení algoritmů Programovací techniky Časová a prostorová

Více

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

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 Euklidův algoritmus Doprovodný materiál pro cvičení Programování I. NPRM044 Autor: Markéta Popelová Datum: 31.10.2010 Euklidův algoritmus verze 1.0 Zadání: Určete největšího společného dělitele dvou zadaných

Více

Výpočetní složitost algoritmů

Výpočetní složitost algoritmů Výpočetní složitost algoritmů Slajdy pro výuku na KS Ondřej Čepek Sylabus 1. Definice časové a prostorové složitosti algoritmů. Příklady na konkrétních algoritmech. Prostředky pro popis výpočetní složitosti

Více

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

NP-ÚPLNÉ PROBLÉMY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze NP-ÚPLNÉ PROBLÉMY Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2010/2011, Lekce 13 Evropský sociální fond Praha & EU: Investujeme do

Více

Dijkstrův algoritmus

Dijkstrův algoritmus Dijkstrův algoritmus Hledání nejkratší cesty v nezáporně hranově ohodnoceném grafu Necht je dán orientovaný graf G = (V, H) a funkce, která každé hraně h = (u, v) H přiřadí nezáporné reálné číslo označované

Více

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

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk NMIN101 Programování 1 2/2 Z --- NMIN102 Programování 2 --- 2/2 Z, Zk Pavel Töpfer Katedra software a výuky informatiky MFF UK MFF Malostranské nám., 4. patro, pracovna 404 pavel.topfer@mff.cuni.cz http://ksvi.mff.cuni.cz/~topfer

Více

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

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost Programování Algoritmus návod na vykonání činnosti, který nás od (měnitelných) vstupních dat přivede v konečném čase k výsledku přesně definovaná konečná posloupnost činností vedoucích k výsledku (postup,

Více

Digitální učební materiál

Digitální učební materiál Digitální učební materiál Číslo projektu: CZ.1.07/1.5.00/34.0548 Název školy: Gymnázium, Trutnov, Jiráskovo náměstí 325 Název materiálu: VY_32_INOVACE_146_IVT Autor: Ing. Pavel Bezděk Tematický okruh:

Více

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Vyhledávání 201 / 344 Osnova přednášky

Více

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

Výukový materiál zpracován v rámci projektu EU peníze školám Výukový materiál zpracován v rámci projektu EU peníze školám Registrační číslo projektu: CZ. 1.07/1.5.00/34.0637 Šablona III/2 Název VY_32_INOVACE_39_Algoritmizace_teorie Název školy Základní škola a Střední

Více

Algoritmy a výpočetní složitost

Algoritmy a výpočetní složitost Algoritmy a výpočetní složitost Zdeněk Sawa Katedra informatiky, FEI Vysoká škola báňská Technická universita Ostrava 17. listopadu 15, Ostrava-Poruba 708 33 Česká republika 12. prosince 2005 Zdeněk Sawa

Více

4. NP-úplné (NPC) a NP-těžké (NPH) problémy

4. NP-úplné (NPC) a NP-těžké (NPH) problémy Jan Schmidt 2011 Katedra číslicového návrhu Fakulta informačních technologií České vysoké učení technické v Praze Zimní semestr 2011/12 MI-PAA 4. NP-úplné (NPC) a NP-těžké (NPH) problémy Karpova redukce

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Algoritmus Daniela Szturcová Tento

Více

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

Různé algoritmy mají různou složitost / 1 Různé algoritmy mají různou složitost 1/ 1 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená?? 2/ 1 Asymptotická složitost y y x x Každému algoritmu

Více

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

Algoritmizace. Obrázek 1: Přeložení programu překladačem Algoritmizace V každém okamžiku ví procesor počítače přesně, co má vykonat. Pojmem procesor se v souvislosti s algoritmy označuje objekt (např. stroj i člověk), který vykonává činnost popisovanou algoritmem.

Více

Úvod do informatiky. Miroslav Kolařík

Úvod do informatiky. Miroslav Kolařík Úvod do informatiky přednáška desátá Miroslav Kolařík Zpracováno dle R. Bělohlávek, V. Vychodil: Diskrétní matematika 2, http://phoenix.inf.upol.cz/esf/ucebni/dm2.pdf P. Martinek: Základy teoretické informatiky,

Více

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem Test prvočíselnosti Úkol: otestovat dané číslo N, zda je prvočíslem 1. zkusit všechny dělitele od 2 do N-1 časová složitost O(N) cca N testů 2. stačí zkoušet všechny dělitele od 2 do N/2 (větší dělitel

Více

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

Algoritmizace- úvod. Ing. Tomáš Otáhal Algoritmizace- úvod Ing. Tomáš táhal Historie 9. století perský matematik a astronom Mohammed Al-Chorezím v latinském přepise příjmení= algoritmus Nejstarší algoritmus Euklides řecký matematik, 4. století

Více

Problém obchodního cestujícího(tsp) Vstup: Množina n měst a vzdálenosti mezi nimi. Výstup: Nejkratší okružní cesta procházející všemi městy.

Problém obchodního cestujícího(tsp) Vstup: Množina n měst a vzdálenosti mezi nimi. Výstup: Nejkratší okružní cesta procházející všemi městy. Problém obchodního cestujícího(tsp) Vstup: Množina n měst a vzdálenosti mezi nimi. Výstup: Nejkratší okružní cesta procházející všemi městy. Poznámka:Slovem okružní myslíme,žecestakončívestejném městě,

Více

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

Algoritmus pro hledání nejkratší cesty orientovaným grafem 1.1 Úvod Algoritmus pro hledání nejkratší cesty orientovaným grafem Naprogramoval jsem v Matlabu funkci, která dokáže určit nejkratší cestu v orientovaném grafu mezi libovolnými dvěma vrcholy. Nastudoval

Více

Vzdálenost uzlů v neorientovaném grafu

Vzdálenost uzlů v neorientovaném grafu Vzdálenosti a grafy Vzdálenost uzlů v neorientovaném grafu Je dán neorientovaný neohodnocený graf G = (V,E,I) vzdálenost uzlů u a v v neorientovaném souvislém grafu G je délka nejkratší cesty spojující

Více

Digitální učební materiál

Digitální učební materiál Digitální učební materiál Číslo projektu: CZ.1.07/1.5.00/34.0548 Název školy: Gymnázium, Trutnov, Jiráskovo náměstí 325 Název materiálu: VY_32_INOVACE_145_IVT Autor: Ing. Pavel Bezděk Tematický okruh:

Více

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

Algoritmus. Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu. Algoritmus Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu. Klíčové pojmy: Algoritmus, vlastnosti algoritmu, tvorba algoritmu, vývojový diagram, strukturogram Algoritmus

Více

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

Výroková a predikátová logika - XIII Výroková a predikátová logika - XIII Petr Gregor KTIML MFF UK ZS 2013/2014 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - XIII ZS 2013/2014 1 / 13 Úvod Algoritmická (ne)rozhodnutelnost Které

Více

Binární soubory (datové, typované)

Binární soubory (datové, typované) Binární soubory (datové, typované) - na rozdíl od textových souborů data uložena binárně (ve vnitřním tvaru jako v proměnných programu) není čitelné pro člověka - všechny záznamy téhož typu (může být i

Více

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Dynamické programování Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Rozděl a panuj (divide-and-conquer) Rozděl (Divide): Rozděl problém na několik podproblémů tak, aby tyto podproblémy odpovídaly původnímu

Více

TGH12 - Problém za milion dolarů

TGH12 - Problém za milion dolarů TGH12 - Problém za milion dolarů Jan Březina Technical University of Liberec 7. května 2013 Složitost problému Co je to problém? Složitost problému Co je to problém? K daným vstupním datům (velkému binárnímu

Více

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

Operátory pro maticové operace (operace s celými maticemi) * násobení maticové Pro čísla platí: 2*2 * násobení maticové Pro čísla platí: Pro matice - násobení inverzní maticí inv inverzní matice A -1 k dané matici A je taková matice, která po vynásobení s původní maticí dá jednotkovou matici. Inverzní

Více

Věta o dělení polynomů se zbytkem

Věta o dělení polynomů se zbytkem Věta o dělení polynomů se zbytkem Věta. Nechť R je okruh, f, g R[x], přičemž vedoucí koeficient polynomu g 0 je jednotka okruhu R. Pak existuje jediná dvojice polynomů q, r R[x] taková, že st(r) < st(g)

Více

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

Prohledávání do šířky = algoritmus vlny Prohledávání do šířky = algoritmus vlny - souběžně zkoušet všechny možné varianty pokračování výpočtu, dokud nenajdeme řešení úlohy průchod stromem všech možných cest výpočtu do šířky, po vrstvách (v každé

Více

Úvod do programování

Úvod do programování Úvod do programování Základní literatura Töpfer, P.: Algoritmy a programovací techniky, Prometheus, Praha učebnice algoritmů, nikoli jazyka pokrývá velkou část probíraných algoritmů Satrapa, P.: Pascal

Více

doplněk, zřetězení, Kleeneho operaci a reverzi. Ukážeme ještě další operace s jazyky, na které je

doplněk, zřetězení, Kleeneho operaci a reverzi. Ukážeme ještě další operace s jazyky, na které je 28 [181105-1236 ] 2.7 Další uzávěrové vlastnosti třídy regulárních jazyků Z předchozích přednášek víme, že třída regulárních jazyků je uzavřena na sjednocení, průnik, doplněk, zřetězení, Kleeneho operaci

Více

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace Programování: základní konstrukce, příklady, aplikace IB111 Programování a algoritmizace 2011 Připomenutí z minule, ze cvičení proměnné, výrazy, operace řízení výpočtu: if, for, while funkce příklady:

Více

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

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk NMIN101 Programování 1 2/2 Z --- NMIN102 Programování 2 --- 2/2 Z, Zk Pavel Töpfer Katedra software a výuky informatiky MFF UK MFF Malostranské nám., 4. patro, pracovna 404 pavel.topfer@mff.cuni.cz http://ksvi.mff.cuni.cz/~topfer

Více

Z. Sawa (VŠB-TUO) Teoretická informatika 18. prosince / 67

Z. Sawa (VŠB-TUO) Teoretická informatika 18. prosince / 67 Další třídy složitosti Z. Sawa (VŠB-TUO) Teoretická informatika 18. prosince 018 1/ 67 Další třídy složitosti Pro libovolnou funkci f : N R + definujme následující třídy: DTIME(f(n)) třída všech rozhodovacích

Více

Pojem algoritmus a jeho základní vlastnosti

Pojem algoritmus a jeho základní vlastnosti DUM Algoritmy DUM III/2-T1-1-1 PRG-01A-var1 Téma: Úvod do algoritmů - výklad Střední škola Rok: 2012 2013 Varianta: A Zpracoval: Mgr. Pavel Hrubý VÝKLAD Pojem algoritmus a jeho základní vlastnosti Obsah

Více

Časová složitost algoritmů

Časová složitost algoritmů Časová složitost algoritmů Důležitou vlastností algoritmu je časová náročnost výpočtů provedené podle daného algoritmu Ta se nezískává měřením doby výpočtu pro různá data, ale analýzou algoritmu, jejímž

Více

Digitální učební materiál

Digitální učební materiál Digitální učební materiál Číslo projektu: CZ.1.07/1.5.00/34.0548 Název školy: Gymnázium, Trutnov, Jiráskovo náměstí 325 Název materiálu: VY_32_INOVACE_148_IVT Autor: Ing. Pavel Bezděk Tematický okruh:

Více

Náplň. v.0.03 16.02.2014. - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

Náplň. v.0.03 16.02.2014. - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění Náplň v.0.03 16.02.2014 - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění Spojení dvou samostatně setříděných polí void Spoj(double apole1[], int adelka1, double

Více

IB111 Úvod do programování skrze Python

IB111 Úvod do programování skrze Python Vyhledávání, řazení, složitost IB111 Úvod do programování skrze Python 2012 Otrávené studny 8 studen, jedna z nich je otrávená laboratorní rozbor dokáže rozpoznat přítomnost jedu ve vodě je drahý (je časově

Více

TGH05 - Problém za milion dolarů.

TGH05 - Problém za milion dolarů. TGH05 - Problém za milion dolarů. Jan Březina Technical University of Liberec 20. března 2012 Časová složitost algoritmu Závislost doby běhu programu T na velikosti vstupních dat n. O(n) notace, standardní

Více

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

Výroková a predikátová logika - II Výroková a predikátová logika - II Petr Gregor KTIML MFF UK ZS 2015/2016 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - II ZS 2015/2016 1 / 18 Základní syntax Jazyk Výroková logika je logikou

Více

Týden 14. Přednáška. Teoretická informatika průběh výuky v semestru 1. PSPACE, NPSPACE, PSPACE-úplnost

Týden 14. Přednáška. Teoretická informatika průběh výuky v semestru 1. PSPACE, NPSPACE, PSPACE-úplnost Teoretická informatika průběh výuky v semestru 1 Týden 14 Přednáška PSPACE, NPSPACE, PSPACE-úplnost Uvědomili jsme si nejprve, že např. pro zjištění toho, zda Bílý má nějakou strategii ve hře ŠACHY, která

Více

Numerická stabilita algoritmů

Numerická stabilita algoritmů Numerická stabilita algoritmů Petr Tichý 9. října 2013 1 Numerická stabilita algoritmů Pravidla v konečné aritmetice Pro počítání v konečné aritmetice počítače platí určitá pravidla, která jsou důležitá

Více

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

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk Pavel Töpfer Katedra softwaru a výuky informatiky MFF UK MFF Malostranské nám., 4. patro, pracovna 404 pavel.topfer@mff.cuni.cz http://ksvi.mff.cuni.cz/~topfer

Více

Obsah přednášky. Analýza algoritmu Algoritmická složitost Návrhy algoritmů Urychlování algoritmů 1/41

Obsah přednášky. Analýza algoritmu Algoritmická složitost Návrhy algoritmů Urychlování algoritmů 1/41 Obsah přednášky Analýza algoritmu Algoritmická složitost Návrhy algoritmů Urychlování algoritmů 1/41 Analýza algoritmu Proč vůbec dělat analýzu? pro většinu problémů existuje několik různých přístupů aby

Více

Úvod do problematiky

Úvod do problematiky Úvod do problematiky Karel Richta a kol. Přednášky byly připraveny i s pomocí materiálů, které vyrobili Marko Berezovský, Petr Felkel, Josef Kolář, Michal Píše a Pavel Tvrdík Katedra počítačů Fakulta elektrotechnická

Více

Usuzování za neurčitosti

Usuzování za neurčitosti Usuzování za neurčitosti 25.11.2014 8-1 Usuzování za neurčitosti Hypotetické usuzování a zpětná indukce Míry postačitelnosti a nezbytnosti Kombinace důkazů Šíření pravděpodobnosti v inferenčních sítích

Více

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

Výroková a predikátová logika - III Výroková a predikátová logika - III Petr Gregor KTIML MFF UK ZS 2017/2018 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - III ZS 2017/2018 1 / 16 2-SAT 2-SAT Výrok je v k-cnf, je-li v CNF a

Více

VYŠŠÍ ODBORNÁ ŠKOLA a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA Mariánská 1100, 407 47 Varnsdorf PROGRAMOVÁNÍ FUNKCE, REKURZE, CYKLY

VYŠŠÍ ODBORNÁ ŠKOLA a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA Mariánská 1100, 407 47 Varnsdorf PROGRAMOVÁNÍ FUNKCE, REKURZE, CYKLY Jméno a příjmení: Školní rok: Třída: VYŠŠÍ ODBORNÁ ŠKOLA a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA Mariánská 1100, 407 47 Varnsdorf 2007/2008 VI2 PROGRAMOVÁNÍ FUNKCE, REKURZE, CYKLY Petr VOPALECKÝ Číslo úlohy: Počet

Více

Složitost problémů. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 25. dubna / 23

Složitost problémů. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 25. dubna / 23 Složitost problémů Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 25. dubna 2012 1/ 23 Složitost problémů Ukazuje se, že různé(algoritmické) problémy jsou různě těžké. Obtížnější jsou ty problémy, k

Více

Naproti tomu gramatika je vlastně soupis pravidel, jak

Naproti tomu gramatika je vlastně soupis pravidel, jak 1 Kapitola 1 Úvod V přednášce se zaměříme hlavně na konečný popis obecně nekonečných množin řetězců symbolů dané množiny A. Prvkům množiny A budeme říkat písmena, řetězcům (konečným posloupnostem) písmen

Více

Složitost a moderní kryptografie

Složitost a moderní kryptografie Složitost a moderní kryptografie Radek Pelánek Modulární systém dalšího vzdělávání pedagogických pracovníků JmK v přírodních vědách a informatice CZ.1.07/1.3.10/02.0024 Složitost a moderní kryptografie

Více

Tato tematika je zpracována v Záznamy přednášek: str

Tato tematika je zpracována v Záznamy přednášek: str Obsah 10. přednášky: Souvislosti Složitost - úvod Výpočet časové složitosti Odhad složitosti - příklady Posuzování složitosti Asymptotická složitost - odhad Přehled technik návrhů algoritmů Tato tematika

Více

Intervalová data a výpočet některých statistik

Intervalová data a výpočet některých statistik Intervalová data a výpočet některých statistik Milan Hladík 1 Michal Černý 2 1 Katedra aplikované matematiky Matematicko-fyzikální fakulta Univerzita Karlova 2 Katedra ekonometrie Fakulta informatiky a

Více

YZTI - poznámky ke složitosti

YZTI - poznámky ke složitosti YZTI - poznámky ke složitosti LS 2018 Abstrakt Poznámky k přednášce YZTI zabývající se složitostí algoritmických problémů a teorií NP-úplnosti. Složitost algoritmu a problému Zabýváme se už pouze rekurzivními

Více

5.6.3 Rekursivní indexace složitostních tříd 5.6.4 Uniformní diagonalizace 5.6.5 Konstrukce rekursivních indexací a aplikace uniformní diagonalizace

5.6.3 Rekursivní indexace složitostních tříd 5.6.4 Uniformní diagonalizace 5.6.5 Konstrukce rekursivních indexací a aplikace uniformní diagonalizace Obsah prvního svazku 1 Úvod 1.1 Přehled pojmů a struktur 1.1.1 Množiny, čísla a relace 1.1.2 Funkce 1.1.3 Pravděpodobnost 1.1.4 Grafy 1.2 Algebra 1.2.1 Dělitelnost, prvočíselnost a základní kombinatorické

Více

Polynomy. Mgr. Veronika Švandová a Mgr. Zdeněk Kříž, Ph. D. 1.1 Teorie Zavedení polynomů Operace s polynomy...

Polynomy. Mgr. Veronika Švandová a Mgr. Zdeněk Kříž, Ph. D. 1.1 Teorie Zavedení polynomů Operace s polynomy... Polynomy Obsah Mgr. Veronika Švandová a Mgr. Zdeněk Kříž, Ph. D. 1 Základní vlastnosti polynomů 2 1.1 Teorie........................................... 2 1.1.1 Zavedení polynomů................................

Více

Programovací jazyk Pascal

Programovací jazyk Pascal Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce

Více

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

Výroková a predikátová logika - XII Výroková a predikátová logika - XII Petr Gregor KTIML MFF UK ZS 2015/2016 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - XII ZS 2015/2016 1 / 15 Algebraické teorie Základní algebraické teorie

Více