Úvod do informatiky. Miroslav Kolařík

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

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. Teoretická informatika Tomáš Foltýnek

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

ALGORITMY A DATOVÉ STRUKTURY

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

Časová složitost / Time complexity

Problémy třídy Pa N P, převody problémů

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

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

Výpočetní složitost algoritmů

Digitální učební materiál

Složitost a moderní kryptografie

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í.

TGH12 - Problém za milion dolarů

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

Složitost Filip Hlásek

Digitální učební materiál

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

10. Složitost a výkon

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).

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

Základy matematické analýzy

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

TGH05 - Problém za milion dolarů.

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

Úvod do informatiky. Miroslav Kolařík

Základy algoritmizace, návrh algoritmu

VLASTNOSTI GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze. BI-GRA, LS 2010/2011, Lekce 5

Algoritmy I, složitost

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

Matice. a m1 a m2... a mn

Digitální učební materiál

Od Turingových strojů k P=NP

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

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

YZTI - poznámky ke složitosti

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

Posloupnosti a jejich konvergence POSLOUPNOSTI

Jak funguje asymetrické šifrování?

Přijímací zkouška - matematika

Návrh Designu: Radek Mařík

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

Základy algoritmizace a programování

Zpracoval: 7. Matematická indukce a rekurse. Řešení rekurentních (diferenčních) rovnic s konstantními koeficienty.

2. Složitost, grafové algoritmy (zapsal Martin Koutecký)

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.

Drsná matematika III 10. demonstrovaná cvičení Kostry grafů

PŘEDNÁŠKA 2 POSLOUPNOSTI

Základní pojmy teorie množin Vektorové prostory

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

2.6. VLASTNÍ ČÍSLA A VEKTORY MATIC

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

autorovu srdci... Petr Hliněný, FI MU Brno 1 FI: MA010: Průnikové grafy

Pomocný text. Polynomy

Texty k přednáškám z MMAN3: 4. Funkce a zobrazení v euklidovských prostorech

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

Principy indukce a rekursivní algoritmy

Posloupnosti a jejich konvergence

Přednáška 3: Limita a spojitost

Operace s maticemi. 19. února 2018

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

Numerická stabilita algoritmů

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

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

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

Základní pojmy teorie grafů [Graph theory]

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

Diskrétní matematika 1. týden

Graf. Uzly Lokality, servery Osoby fyzické i právní Informatické objekty... atd. Hrany Cesty, propojení Vztahy Informatické závislosti... atd.

Matematika pro informatiky

Diskrétní matematika. DiM /01, zimní semestr 2018/2019

Dynamické programování

Matematická analýza 1

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

Definice. Vektorový prostor V nad tělesem T je množina s operacemi + : V V V, tj. u, v V : u + v V : T V V, tj. ( u V )( a T ) : a u V které splňují

Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 2014

5 Orientované grafy, Toky v sítích

2. Schurova věta. Petr Tichý. 3. října 2012

Dynamické programování

Vrcholová barevnost grafu

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

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

Úvod do informatiky. Miroslav Kolařík

Přednáška 9, 28. listopadu 2014 Část 4: limita funkce v bodě a spojitost funkce

Kapitola 1: Reálné funkce 1/20

PQ-stromy a rozpoznávání intervalových grafů v lineárním čase

Matematická analýza pro informatiky I. Limita posloupnosti (I)

Kapitola 1: Reálné funkce 1/13

ALGORITMY. 0. krok (inicializace algoritmu): položme a 0 = a, b 0 = b. 2. krok: určíme zbytek r 1 (a 1, b 1 ) při dělení a 1

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

Kostry. 9. týden. Grafy. Marie Demlová (úpravy Matěj Dostál) 16. dubna 2019

Bakalářská matematika I

METRICKÉ A NORMOVANÉ PROSTORY

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

Výpočetní složitost I

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Kapitola 11. Vzdálenost v grafech Matice sousednosti a počty sledů

)(x 2 + 3x + 4),

Principy indukce a rekurentní rovnice

Transkript:

Ú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í P a NP

Obsah 1 Složitost algoritmu 2 Třídy složitostí P a NP

Složitost každého algoritmu může být studována bud z hlediska pamět ové náročnosti nebo z hlediska časové náročnosti. Pamět ovou náročností rozumíme požadavek na velikost paměti počítače, jež je zapotřebí k provedení výpočtu. Podobně časovou náročností rozumíme čas potřebný pro výpočet. Tento čas se obvykle neměří v časových jednotkách, ale počtem provedených elementárních kroků algoritmu. Poznámka: Dále se budeme věnovat pouze časové složitosti, nebot k pamět ové složitosti se přistupuje analogicky. Poznámka: Složitost je funkce závislá na velikosti vstupních dat algoritmu. U funkcí popisujících časovou složitost budeme uvažovat pouze jejich řádovou velikost, tedy například složitosti lišící se konstantním násobkem budeme považovat za stejné.

Definice řádové porovnávání funkcí Necht f, g jsou dvě funkce, které přiřazují přirozeným číslům reálná čísla. Pak řekneme, že funkce f roste řádově nejvýše jako funkce g, píšeme f (n) = O(g(n)), právě když existují čísla K > 0 a n 0 N taková, že pro každé přirozené číslo n n 0 platí f (n) K g(n). Příklad 3n 3 n 2 + 2n = O(n 3 ), nebot 3n 3 n 2 + 2n Kn 3 n 3 (K 3) + n 2 2n 0, což pro K = 4 dává n 3 + n 2 2n 0 n(n + 2)(n 1) 0, což platí n n 0 = 1. Definice Řekneme, že algoritmus má polynomickou časovou složitost, právě když existuje polynom p takový, že f (n) p(n) pro všechna n N.

Poznámka: Základním kritériem pro určování časové složitosti výpočetních problémů je jejich algoritmická zvládnutelnost. Je třeba si uvědomit, že existují algoritmicky neřešitelné problémy, pro které nemá smysl zkoušet algoritmy konstruovat. Příkladem je problém sestrojení algoritmu, který by o každém algoritmu uměl rozhodnout, zda jeho činnost skončí po konečném počtu kroků či nikoliv. Redukcí z problému zastavení se dá ukázat nerozhodnutelnost celé řady problémů, které se týkají ověřování chování programů: Vydá daný program pro nějaký vstup odpověd Ano? Zastaví se daný program pro libovolný vstup? Dávají dva dané programy pro stejné vstupy stejný výstup?

Poznámka: V praxi používané algoritmy mívají většinou některou z následujících složitostí: O(log N), O(N), O(N log N), O(N 2 ), O(N 2 logn), O(N 3 ),..., O(2 N ), O(N!). Přitom stupeň polynomu bývá poměrně nízký. Algoritmům se složitostí O(N) říkáme lineární, se složitostí O(N 2 ) kvadratické, se složitostí O(N 3 ) kubické.

Příklad Některé typické příklady časové složitosti (od nejrychlejší po nejpomalejší): O(1) konstantní (indexování prvků v poli) O(log 2 N) logaritmická (vyhledání prvku v seřazeném poli metodou půlení intervalu) O(N) lineární (vyhledání prvku v neseřazeném poli lineárním vyhledáváním) O(N log N) lineárnělogaritmická (seřazení pole N čísel dle velikosti; třídění sléváním či třídění haldou či quicksort) O(N 2 ) kvadratická (třídění N čísel dle velikosti; přímý výběr či bublinkové třídění)... O(2 N ) exponenciální (Fibonacciho posloupnost řešená pomocí stromové rekurze) O(N!) faktoriálová (řešení problému obchodního cestujícího hrubou silou).

Definice Necht f,g : N R jsou funkce. Pak píšeme f (n) = O(g(n)) K > 0, n 0 N, n n 0 : f (n) K g(n) a říkáme, že funkce f roste řádově nejvýše jako funkce g. f (n) = Ω(g(n)) k > 0, n 0 N, n n 0 : f (n) k g(n) a říkáme, že funkce f roste řádově aspoň jako funkce g. f (n) = Θ(g(n)) f (n) = O(g(n)) a f (n) = Ω(g(n)) a říkáme, že funkce f roste řádově stejně jako funkce g; nebo, že funkce f a g jsou řádově ekvivalentní (neboli asymptoticky ekvivalentní).

Příklad Dokažte, že n2 1 n+1 = Θ(n). Řešení: k n n2 1 n + 1 K n k n n 1 K n k 1 1 n K Je to splněno např. pro k = 1 2, K = 1 a pro n n 0 = 2. Příklad Dokažte, že platí a) 5n 3 3n 2 + 7 = O(n 3 ), b) lnn = O(n). Řešení: Jednoduché.

Uvažme počítač, u nějž provedení 1 instrukce trvá 1 nanosekundu. Následující tabulka ukazuje délky trvání výpočtu, spustíme-li na takovém počítači algoritmus o řádové složitosti f (n) se vstupními daty velikosti n. f (n) n = 20 n = 40 n = 60 n = 80 n = 100 n = 1000 n 20ns 40ns 60ns 80ns 0, 1µs 1µs n log n 86ns 0, 2µs 0, 35µs 0, 5µs 0, 7µs 10µs n 2 0,4µs 1,6µs 3,6µs 6,4µs 10µs 1ms n 4 0,16ms 2,56ms 13ms 41ms 0,1s 16,8min 2 n 1ms 16,8min 36,6let n! 77let

Předchozí tabulka potvrzuje oprávněnost představy: prakticky použitelný algoritmus je algoritmus s nejvýše polynomickou časovou složitostí. Nelze to však brát jako dogma. Viz následující dva příklady: f 1 (n) = 2 100 n, f 2 (n) = 2 n0,0001 (= 2 10 pro n = 10 104 ). Předchozí představu rámcově potvrzuje i další tabulka, která popisuje, jak se zvětší rozsah zpracovatelných úloh v případě zvětšení výpočetní rychlosti použitého počítače 100x a 1000x, jestliže původně bylo možno v daném časovém limitu zpracovat vstupní data o velikosti n = 100.

f (n) zrych. výp. 1x zrych. výp. 100x zrych. výp. 1000x n 100 10000 100000 n log n 100 5362 43150 n 2 100 1000 3162 n 4 100 316 562 2 n 100 106 109 n! 100 100 101 Z tabulek je vidět, že už pro algoritmy s exponenciální časovou složitostí je typická existence mezní velikosti vstupních dat, nad níž je úloha prakticky neřešitelná i při zvýšení rychlosti počítače o několik řádů.

Obsah 1 Složitost algoritmu 2 Třídy složitostí P a NP

Definice Úlohu (algoritmus) nazveme řešitelnou v polynomiálním čase, jestliže její časovou složitost můžeme shora ohraničit polynomem. Třídu úloh s polynomiální složitostí označíme P. Například třídění na haldě je úloha třídy P, nebot má složitost n logn n 2. Úlohy třídy P považujeme za řešitelné (v přiměřeném čase). Definice Úlohu nazveme nedeterministicky polynomiální, jestliže existuje nedeterministický algoritmus, který ji řeší v polynomiálním čase. Tuto třídu úloh označíme NP.

Příklad (úloha batohu) Máme množinu různých přirozených čísel a 1,...,a n a máme zadáno přirozené číslo A. Úkolem je vybrat z čísel a 1,...,a n podmnožinu jejíž součet bude A. Tedy a i1,a i2,...,a ik je řešením úlohy, jestliže a i1 + a i2 + + a ik = A. Nedeterministický algoritmus: 1 Položíme X = 0. 2 Pro i = 1,2,...,n bud číslo a i přičteme k X nebo číslo a i nepřičteme k X. 3 Jestliže A = X, máme řešení. Poznámka: Při řešení úloh třídy NP je jediný známý deterministický způsob řešení postupně projít všechny možnosti připadající v úvahu, což u úlohy batohu je 2 n možností. Poznámka: Vzhledem k časovým nárokům považujeme NP-úplné problémy za neřešitelné pro n 70.

Skutečnost, že r je řešením úlohy U označíme r U. Definice Říkáme, že úloha U 1 je redukovatelná na úlohu U 2, jestliže existuje deterministický polynomiální algoritmus M, který řešení úlohy r převádí na výsledek M(r) tak, že r U 1 právě když M(r) U 2. Označujeme U 1 U 2. Definice Úlohu U nazveme NP-úplnou, jestliže na ni lze redukovat libovolnou úlohu z třídy NP, tj. pro každou úlohu U NP platí U U. Třídu NP-úplných úloh označujeme NPC. Poznámka: NP-úplné problémy patří mezi ty nejsložitější problémy z třídy NP.

Cookova věta Problém splnitelnosti booleovských formulí je NP-úplný. Poznámka: NP-úplnost zde byla dokázána jako první. P NP problém Je P = NP nebo je P NP? Poznámka: Nevěříme v platnost P = NP (důkaz však stále chybí). Očekáváme, že P NP, tj. P NP. Poznámka: Ten kdo první správně vyřeší P-NP problém dostane (kromě doživotního věhlasu) milión amerických dolarů. (Vyhlašovatelem soutěže je Clay Mathematics Institut, více informací lze nalézt na jeho webových stránkách.)

Některé NP-úplné úlohy 1 Problém splnitelnosti booleovských formulí. 2 Úloha batohu. 3 Chromatické číslo grafu. Určení nejmenšího počtu barev, jimiž lze obarvit vrcholy grafu G tak, že žádné dva sousední vrcholy nemají stejnou barvu; značíme χ(g). 4 Nalezení Hamiltonovy kružnice. Hamiltonova kružnice je kružnice, která obsahuje všechny vrcholy grafu. 5 Problém kliky. Klikou v neorientovaném grafu rozumíme takovou podmnožinu vrcholů, jejíž každé dva vrcholy jsou navzájem propojeny hranami. Problémem kliky rozumíme problém stanovení, zda má daný neorientovaný graf kliku o k vrcholech. 6 Hledání nejkratší (resp. nejdelší) cesty v orientovaném ohodnoceném grafu z vrcholu x do vrcholu y. (Též odpověd na otázku zda existuje cesta délky m.) 7 Úloha rozhodnout zda dva konečné automaty rozpoznávají stejný jazyk.

Dalším NP-úplným problémem je tzv. problém obchodního cestujícího: Může obchodní cestující projet všechna města tak, aby každé navštívil právě jednou, na závěr se vrátil do výchozího města a přitom urazil vzdálenost menší než K? (= Existuje v (úplném) neorientovaném grafu s ohodnocenými hranami hamiltonovská kružnice, v níž je součet ohodnocení jejích hran menší než předem daná hodnota K?) Poznámka: NP-úplných problémů jsou tisíce. Víme, že všechny NP-úplné problémy jsou mezi sebou převoditelné (tam i zpět) v polynomiálním čase, neboli jsou na sebe redukovatelné. Poznámka: Typickým představitelem třídy NP je problém, který je řešen algoritmem (s exponenciální časovou složitostí) probírajícím všechny varianty, kde ověření správnosti každé z těchto variant vyžaduje pouze polynomický čas.

Poznámka: K žádnému NP-úplnému problému není znám algoritmus řešící jej v polynomickém čase. Pokud by někdo dokázal příslušnost některého NP-úplného problému k třídě P, dokázal by rovnost P=NP. Poznámka: V praxi se NP-úplné úlohy (s většími vstupy) obvykle řeší pouze přibližně (heuristickými algoritmy, genetickými algoritmy,... ). Tím se (za cenu vzdání se nároků na nalezení přesného řešení) dosahuje prakticky použitelných časů. Poznámka: Obtížně řešitelné problémy mají využití například v oblasti šifrování.

Využití výpočetně obtížných úloh v šifrování Při utajené komunikaci požadujeme nemožnost nebo alespoň enormní časovou náročnost odhalení klíče potřebného k dešifrování zašifrované zprávy. Jestliže systém tvorby klíče propojíme s některými ze známých obtížně řešitelných problémů, pak úkol dešifrovat odeslanou zprávu bez znalosti příslušného klíče odpovídá úloze nalézt konkrétní řešení souvisejícího problému. Víme-li, že v současnosti nikdo takový problém efektivně řešit neumí a uvedený problém je výpočetně náročný, pak jsme pro utajení zprávy udělali maximum. Za typický příklad využití výpočetně obtížné úlohy v šifrování lze považovat metodu RSA používanou při šifrování s veřejným klíčem.

Metoda RSA je založena na využití součinu velkých prvočísel. Poznamenejme, že testování prvočíselnosti zadaného čísla je úloha zvládnutelná v rozumném čase, naproti tomu úloha nalézt rozklad zadaného přirozeného čísla na součin prvočinitelů je výpočetně velmi náročná. Úkol rozšifrovat zasílanou zprávu tak odpovídá úkolu nalézt přijatelně rychlý algoritmus pro rozklad přirozeného čísla na součin prvočinitelů.

Idea šifrování s veřejně přístupným klíčem Jeden účastník utajené komunikace (např. ústředí banky) vygeneruje dvojici klíčů A 1,A 2, mezi nimiž je určitá matematická závislost. Klíč A 1 dostačuje k zašifrování posílaných zpráv, klíč A 2 je potřebný k rozšifrování přijatých zpráv. Klíč A 2 utají, A 1 naproti tomu rozešle ostatním účastníkům utajené komunikace (např. bankovním pobočkám) prostřednictvím veřejně přístupného média (např. telefonní linkou). S pomocí klíče A 1 tedy může každý zašifrovat svou zprávu, ale její rozšifrování lze provést pouze s využitím klíče A 2, jenž je známý výhradně iniciátoru celé komunikace.