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

Podobné dokumenty
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

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

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

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

Přijímací zkouška - matematika

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

ALGORITMY A DATOVÉ STRUKTURY

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

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů

TGH12 - Problém za milion dolarů

10. Složitost a výkon

Dynamické programování

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

Modely Herbrandovské interpretace

NP-úplnost problému SAT

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

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

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

AUTOMATY A GRAMATIKY. Pavel Surynek. Kontextové uzávěrové vlastnosti Turingův stroj Rekurzivně spočetné jazyky Kódování, enumerace

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

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

Výpočetní složitost algoritmů

5 Rekurze a zásobník. Rekurzivní volání metody

Od Turingových strojů k P=NP

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

Paměť počítače. alg2 1

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í

YZTI - poznámky ke složitosti

Vrcholová barevnost grafu

Logické programy Deklarativní interpretace

Doba běhu daného algoritmu/programu. 1. Který fragment programu z následujících dvou proběhne rychleji?

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

Pojem binární relace patří mezi nejzákladnější matematické pojmy. Binární relace

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

Unární je také spojka negace. pro je operace binární - příkladem může být funkce se signaturou. Binární je velká většina logických spojek

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

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

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

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

1 Nejkratší cesta grafem

H {{u, v} : u,v U u v }

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

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

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.

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

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

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

Fakulta informačních technologií. Teoretická informatika

DMA Přednáška Rekurentní rovnice. takovou, že po dosazení odpovídajících členů do dané rovnice dostáváme pro všechna n n 0 + m pravdivý výrok.

Matematická analýza pro informatiky I. Limita funkce

Úvod do informatiky. Miroslav Kolařík

10 Přednáška ze

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto:

PŘEDNÁŠKA 2 POSLOUPNOSTI

Množinu všech slov nad abecedou Σ značíme Σ * Množinu všech neprázdných slov Σ + Jazyk nad abecedou Σ je libovolná množina slov nad Σ

Úvod do informatiky. Miroslav Kolařík

Algebraické struktury s jednou binární operací

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

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.

Problém, algoritmus, program. Vykonání programu

FIT ČVUT MI-LOM Lineární optimalizace a metody. Dualita. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

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

Kapitola Základní množinové pojmy Princip rovnosti. Dvě množiny S a T jsou si rovny (píšeme S = T ) prvek T je také prvkem S.

Další NP-úplné problémy

Přednáška 3: Limita a spojitost

Základy matematické analýzy

Pomocný text. Polynomy

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

Výpočetní složitost I

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

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

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

Necht tedy máme přirozená čísla n, k pod pojmem systém lineárních rovnic rozumíme rovnice ve tvaru

1 Polynomiální interpolace

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

1 Linearní prostory nad komplexními čísly

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy

TGH05 - Problém za milion dolarů.

1 Báze a dimenze vektorového prostoru 1

Časová složitost algoritmů

Negativní informace. Petr Štěpánek. S použitím materiálu M.Gelfonda a V. Lifschitze. Logické programování 15 1

Vzdálenost uzlů v neorientovaném grafu

Matematická logika. Miroslav Kolařík

Doporučené příklady k Teorii množin, LS 2018/2019

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

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

Základní datové struktury III: Stromy, haldy

p 2 q , tj. 2q 2 = p 2. Tedy p 2 je sudé číslo, což ale znamená, že

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

Datové struktury. alg12 1

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

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

Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

FREDHOLMOVA ALTERNATIVA

Transkript:

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 problém řazení. Pro tento problém jsme uvedli algoritmy řazení -výběrem -vkládáním -bublinkové -Shellovo -haldou -slučováním -dělením Programy mohly množinu řazených prvků uchovávat pomocí - pole -spojového seznamu Jednotlivé algoritmy a jejich programové realizace jsme analyzovali z pohledu jejich časové případně paměťové náročnosti. Položme jsme si otázku jak je to s problémem samotným. Na to musíme přesněji odpovědět co je to problém. Další přirozenou otázkou je zda-li každý problém má algoritmus pro svoje řešení, jinými slovy je-li algoritmicky řešitelný. Víme-li, že tomu tak je, zřejmě má smysl se ptát jaký algoritmus je optimální. Předpokládejme, že bychom pro problém řazení znali jenom první tři z uvedených algoritmů. To by mohlo vést k domněnce, že nejlepší algoritmus řazení je O(N 2 ). Víme však, že všechny další jsou efektivnější. Neexistuje však další, dosud neznámý, algoritmus pro problém řazení N prvků? Jak je to s jinými problémy? Jak jsou těžké, rozumíme-li tím množství práce potřebné na jejich vykonání?

Abstrakce problému Abychom mohli studovat naznačené otázky musíme pojem problému formalizovat. Problém Q definujeme jako binární relaci nad množinou instancí problému I a množinou řešení S. Pro problém řazení například přirozených čísel je množina instancí množina všech jednoprvkových, dvou prvkových,... posloupností a množina řešení je množina těch posloupností, které jsou seřazeny. Uvedené zobrazení potom můžeme obvyklým způsobem vyjádřit následovně: I S 1 1 2 2 1,1 1,1 1,2 1,2 2,1 1,2 2,2 2,2 Vidíme, že různé instance problému mohou mít stejné řešení, ale ne více řešení a v tomto případě je problém vyjádřen funkcí. Uvažujme však problém nalezení nejkratší cesty v grafu. Instancí problému je konkrétní graf a dva jeho vrcholy. Pro každou takovou trojici je řešením posloupnost vrcholů na nejkratší cestě, včetně prázdné posloupnosti, označující neexistenci cesty mezi zadanými vrcholy. Nyní jde obecně o zobrazení, protože nejkratších cest mezi dvěma vrcholy v grafu může být více.

Algoritmická řešitelnost problémů Máme-li problém formalizován ptejme se, jest-li existuje pro každý problém formalizovaný uvedeným způsobem algoritmus. Pro tento účel je uvedená abstrakce problému obecnější než je nutné. Stačí, omezíme-li se na třídu rozhodovacích problémů. Rozhodovací problémy jsou takové, kterých množina řešení je dvouhodnotová ano/ne. Pro rozhodovací problémy je zobrazení množiny instancí na množinu řešení funkcí. Rozhodovací problémy můžeme formulovat ve vztahu k uvedeným obecnějším problémům. Pro problém řazení je odpovídající rozhodovací problém následující funkce I S 1 ano 2 ano 1,1 ano 1,2 ano 2,1 ne 2,2 ano Známe-li řešení uvedeného rozhodovacího problému umíme řešit i odpovídající problém, například systematickým generováním všech permutací prvků zadané posloupnosti a rozhodováním zda jsou seřazeny.

Použijeme-li na řešení problému počítač instance problému bude použitím odpovídajícího kódování vyjádřena jako řetězec 0 a 1, který můžeme jednojednoznačně interpretovat jako celé číslo (možná velmi veliké) a instanci problému říkáme vstup programu. Řešení, výstup program, můžeme kódovat 1=ano, 0=ne. Nyní je rozhodovací problém formalizován jako funkce f: N {0, 1} Příklad: Problém: Je zadané přirozené číslo liché? I / n N 1 2 3 4 5 6... S / f(n) 1 0 1 0 1 0... Uvedený problém řeší například následující algoritmy, zapsané jako metody v Javě. int jeliche1(int n) { return n%2; } int jeliche2(int n) { for( ; n > 1; n-=2); return n; } Tak jako v případě problému řazení, existuje víc než jeden algoritmus řešení problému. Předpokládejme, že najdeme problém, pro který neumíme napsat v Javě algoritmus, jinými slovy je neřešitelný JVM. Otázka je neexistuje-li jiný formalizmus pro zápis algoritmu, který by takový problém řešil.

Ve třicátých letech minulého století, Alan Turing zavedl pro opis algoritmů formální prostředek, nazývaný Turingovy stroje a Alonzo Church lambda-kalkulus. Ukázali, že opisují stejnou množinu funkcí. Churchova Turingova teze tvrdí, že každý algoritmus může být vykonán Turingovým strojem. Navíc, každý program v konvenčních programovacích jazycích může být transformován na Turingův stroj a naopak. Konvenční programovací jazyky a také Java jsou dostatečné pro vyjádření jakéhokoliv algoritmu. Také další formalizace pojmu algoritmu vedly ke stejnému výsledku a obecně se předpokládá platnost Churchovy Turingovy teze. Churchova Turingova teze však není větou a nemůže být dokázána. Může být vyvrácena, bude-li objevena metoda akceptována jako algoritmus, který nebude možno vykonat Turingovým strojem. Existuje-li tedy rozhodovací problém, pro jehož řešení neexistuje program, například v Javě, potom je tento problém algoritmicky neřešitelný a naopak. Uvažujme všechny rozhodovací programy v Javě. Jejich binární tvar můžeme interpretovat jako celá čísla a vyjmenovat je v jejich pořadí, tedy P1, P2,..., Pn,.... Každý z nich může mít vstup interpretovaný jako celé číslo 1, 2,..., k,... a jeho výstupem je Pn(k) {0, 1}. Vytvořme matici 1 2... k... P1 P1(1) P1(2)... P1(k)... P2 P2(1) P2(2)... P2(k)... Pn Pn(1) Pn(2)... Pn(k)...

Má-li každý rozhodovací problém specifikovaný nějakou funkcí f: N {0, 1} aspoň jeden program v Javě, jenž jej vypočítá, musí v uvedené matici existovat řádek Px takový, že Px(k) = f(k), k = 1, 2,... Musí tam být například řádky pro programy s metodami jeliche1() a jeliche2(). 1 2... k... P1 P1(1) P1(2)... P1(k)... P2 P2(1) P2(2)... P2(k)... jeliche1 1 0... jeliche2 1 0... Pn Pn(1) Pn(2)... Pn(k)... Metodou diagonalizace můžeme ukázat, že existuje problém, tj. funkce f: N {0, 1}, pro kterou v uvedené matici není žádný program. Problém nazveme D a je definován následovně: D(k) = 1 je-li Pk(k) = 0 0 je-li Pk(k) = 1 k = 1, 2, Takto definovaný problém existuje, ale nemůže být vypočten programem P1, protože D(1) P1(1) P2, protože D(2) P2(2)... Pn, protože D(n) Pn(n)...

Pro rozhodovací problém D, tedy neexistuje v Javě žádný program a tedy ani žádný algoritmus. Pro libovolné pořadí řádků v matici můžeme definovat odpovídající problém D. Existují tedy rozhodovací problémy, pro které neexistují v Javě programy a tedy vzhledem k Churchově-Turingově tezi, pro ně neexistují žádné algoritmy. Takové problémy se nazývají algoritmicky nerozhodnutelné. První algoritmicky nerozhodnutelný problém ukázal v roce 1936 Alan Turing. Jde o problém zastavení (halting problem), který pomocí programů například v Javě, můžeme formulovat následovně: Vstup: Program P v Javě reprezentován jako celé číslo a jeho vstup k reprezentován také jako celé číslo. Výstup: 1 když se program P zastaví, 0 když se program P nezastaví Ptáme se zda existuje v Javě program, který vypočítá (řeší) problém zastavení. Opět uvažujme všechny programy v Javě, J1, J2,..., Jn,... a vytvořme matici, jejíž prvky jsou výstupy těchto programů pro jejich vstupy anebo?, pokud pro daný vstup program nezastaví. Například 1 2 3 4... J1 5 4? 8... J2?? 7 3... J3 4 2 6?... J4 5 9??... D 6 0 7 0...

Nechť existuje metoda pro rozhodnutí zda se program Jn pro vstup k zastaví nebo ne. Potom metodou diagonalizace můžeme vytvořit program D, kterého výstup D(k) je 0 když Jk(k) nezastaví a Jk(k) + 1, když zastaví. Tento program však musí být jedním z programů J1, J2,..., Jn,..., což nemůže, protože jeho výstup D(k) je různý od Jk(k). Pro problém zastavení tedy neexistuje v Javě program, tedy ani žádný algoritmus a problém zastavení je algoritmicky nerozhodnutelný. Uvedený výsledek lze také dosáhnout následujícím postupem. Nechť existuje metoda zastavi() s parametry program v Javě J a jeho vstup w, oba reprezentované celými čísly, která vráti true jestliže program J pro vstup w se zastaví a false, jestliže se nezastaví. boolean zastavi(int J, int w) { return boolean z = program J pro vstup w se zastavi; } Můžeme napsat metodu, která bude cyklovat, když metoda zastavi() vrátí true. boolean cyklujkdyzzastavi(int J, int w) { if (zastavi(j, w)) for ( ; ;); return false; } Nyní zvažme program, který volá metodu cyklujkdyzzastavi se sebou pro sebe, tj. její parametry jsou její celočíselné reprezentace.

class X {... void x boolean() { return cyklujkdyzzastavi(cyklujkdyzzastavi, cyklujkdyzzastavi) } public static void main(string args[]) { x; } V tomto případě když metoda zastavi()vrátí false program zastaví (a vrátí false) a zůstane cyklovat, když zastavi() pro něj vrátí true, což je spor a tedy algoritmus pro problém zastavení nemůže existovat. ZACNI ano ZASTAVI? ne ZASTAV

Dolní omezení pro porovnávací řazení Zkoumejme dolní omezení počtu porovnání T(n) pro porovnávací algoritmy řazení. Předpokládejme, že všechny prvky posloupnosti a 1, a 2,..., a n jsou různé. Porovnávací řazení můžeme znázornit rozhodovacím stromem. Ve vnitřních vrcholech jsou prvky, které algoritmus porovná a v listech je permutace všech prvků původní posloupnosti, která je seřazena. Příklad rozhodovacího stromu pro řazení vkládáním tří prvků.

Jakýkoliv správný algoritmus musí vytvořit každou z n! permutací prvků původní posloupnosti. Každá z nich musí být alespoň v jednom listě. Nejhorším případem počtu porovnaní vykonaných algoritmem řazení je nejdelší cesta od kořene stromu k listu, je tedy roven výšce stromu T(n) = h Nyní musíme najít dolní omezení všech rozhodovacích stromů. Nechť rozhodovací strom o výšce h má l listů, potom l 2 h. Současně listů musí být alespoň tolik kolik je permutací, tedy n! l. Potom n! l 2 h a logaritmováním log 2 (n!) h = T(n) Použitím aproximace (n/e) n pro n! je log 2 (n!)=n*log 2 n n* log 2 e, čím dostáváme dolní omezení pro nejhorší případ Ω(n*log 2 n). Protože pro řazení haldou a slučováním je horní omezení času výpočtu O(n*log 2 n) jsou tato řazení asymptoticky optimální.

Klasifikace problémů První rozdělení všech problémů jsme již učinili a to na takové, které jsou algoritmicky řešitelné a algoritmicky neřešitelné. Další klasifikace vychází z horního omezení času výpočtu pro velikost vstupu n. Většina našich algoritmů měla časovou náročnost O(n k ) pro nějakou konstantu k, tj. polynomiální. Na druhé straně jsou řešitelné problémy, o nichž víme, že nemají algoritmus s polynomiálním časem výpočtu. Příkladem je problém Hanojských věží, kde minimální počet přesunů disků je 2 n 1. Problémy, které jsou řešitelné v polynomiálním čase považujeme za zvládnutelné, nebo-li lehké a problémy, které vyžadují superpolynomiální čas považujeme za nezvládnutelné, nebo-li těžké. Podobně jako při zkoumání řešitelnosti problémů se omezíme na rozhodovací problémy. Mnoho prakticky důležitých problémů jsou optimalizační problémy, kdy výstupem je hodnota, která nejlépe splňuje zadaná kritéria. Příkladem může být problém, který nazveme NEJKRATŠÍ_CESTA. V grafu G je úkolem najít mezi jeho vrcholy u a v cestu s nejmenším počtem hran.

Obvykle můžeme optimalizační problém převést na problém rozhodovací. Pro uvedený problém NEJKRATŠÍ_CESTA odpovídající problém, který nazveme CESTA, je následující. Existuje v daném grafu G mezi vrcholy u a v cesta mající délku nejvíce k hran. Známe-li řešení optimalizačního problému, víme najít řešení rozhodovacího problému. Vyřešením problému NEJKRATŠÍ_CESTA a porovnáním nalezené hodnoty s k máme řešení problému CESTA. Můžeme tedy říct, že rozhodovací problém je lehčí nebo alespoň není těžší než problém optimalizační. Ukážeme-li, že rozhodovací problém je těžký, ukážeme, že i optimalizační problém je těžký. Uvedli jsme již, že pro řešení abstraktního problému na počítači jeho instance musí kódovány do binárních řetězců. Když počítač řeší nějaký abstraktní problém, ve skutečnosti řeší jeho zakódovanou instanci. Problém v tomto tvaru nazýváme konkrétní. Konkrétní problém je řešitelný v polynomiálním čase, existuje-li algoritmus, který ho řeší v čase O(n k ). Třída složitosti P je množina konkrétních problémů řešitelných v polynomiálním čase. Vztah k časové náročnosti řešení abstraktního problému však není přímočarý, ale značně závisí na kódování. Uveďme jako příklad zjištění hrany mezi dvěma vrcholy grafu. Je-li graf zakódován maticí sousednosti je čas výpočtu Θ(1) a je-li zakódován seznamy sousednosti je Θ(n), kde n = V. Podobně mějme algoritmus, kterého vstup je celé číslo k a časová náročnost je Θ(k). Velikost vstupu takových algoritmů vyjadřujeme počtem znaků pro jeho reprezentaci. V unární reprezentaci (Římané ji použili pro k=1,2,3) to bude řetězec k jedniček a pro vstup velikosti n je algoritmus v čase polynomiální Θ(n). Použijeme-li obvyklé kódování

v dvojkové soustavě, pro číslo k délka vstupu bude n= log2 k + 1. V tomto případě čas výpočtu bude exponenciální - Θ(2 n ). Budeme uvažovat standardní kódovaní, tj. čísla v dvojkové soustavě a znaky v ASCII kódu (Unicode). V dalším potom nebudeme rozlišovat mezi abstraktními a konkrétními problémy. Pro některé rozhodovací problémy neumíme nalézt řešení v polynomiálním čase, ale na druhé straně pro ně existuje polynomiální verifikační algoritmus. Verifikační algoritmus ověří řešení problému na základě poskytnutých dat, která nazveme certifikát. Už jsem se setkali s problémem splnitelnosti výrokových formulí, kde navrhnuté řešení pro n proměnných prověřovalo 2 n možností. Pokud nám někdo řekne, že daná výroková formule je splnitelná a nabídne nám hodnoty jednotlivých proměnných na důkaz svého tvrzení, můžeme dosazením těchto hodnot a vyhodnocením výrokové formule verifikovat zda tomu tak je, jistě v polynomiálním čase. Dostáváme tak schéma: Je zadaná výroková formule splnitelná? Zadaná formule P Q R Certifikát P = true, Q = false, R = false Verifikace vyhodnocení Podobně pro následující problém. Je v zadané množině celých čísel podmnožina, která má součet prvků rovný nule? Zadaná množina {-7, -2, -3, 5, 6} Certifikát { -2, -3, 5} Verifikace sčítání

Problémy, jenž mohou být verifikovatelné v polynomiálním čase, tvoří třídu složitosti NP nedeterministicky polynomiální. Jaký je vztah třídy P a třídy NP? Je-li nějaký problém ve třídě P výsledek verifikace získáme jeho vyřešením, což odpovídá verifikaci bez certifikátu. Je tedy P NP. Je P vlastní podmnožinou NP? Tato otázka se označuje P NP. Není známo jestli P = NP.