TIN 062 Ondej epek Sloitost I TIN 062
- Slides: 55
TIN 062 Ondřej Čepek Složitost I TIN 062 Ondřej Čepek
TIN 062 Ondřej Čepek Sylabus 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Prostředky pro popis složitosti algoritmů Hladové algoritmy a souvislost s matroidy Grafové algoritmy – pokročilejší aplikace DFS a BFS DTS, NTS, prostorová a časová složitost jazyků Třídy P a NP, polynomiální transformace NP-úplnost, příklady NPÚ problémů a transformací mezi nimi Pseudopolynomiální algoritmy, silná NP-úplnost PSPACE versus NPSPACE, Savičova věta Aproximační algoritmy a aproximační schémata pro NP -těžké optimalizační úlohy Třída #P, #P-úplné úlohy (Pravděpodobnostní algoritmy – bude-li čas) 2
TIN 062 Ondřej Čepek Materiály k přednášce • Cormen, Leiserson, Rivest, Stein: Introduction to algorithms (popis konkrétních algoritmů) • Arora, Barak: Computational complexity – A modern approach (třídy časové a prostorové složitosti) • Garey, Johnson: Computers and Intractability – A Guide to the Theory of NP-completeness (klasická ale dnes již trochu historická knížka o NP-úplnosti) • http: //kti. mff. cuni. cz/~cepek (promítané slajdy, příklady řešené na cvičeních, požadavky k zápočtu a zkoušce) 3
TIN 062 Ondřej Čepek Jak porovnávat algoritmy? časová složitost algoritmu oboje závisí na „velikosti“ prostorová složitost algoritmu vstupních dat Jak měřit velikost vstupních dat? rigorózně: počet bitů nutných k zapsání vstupních dat __________________________________ Příklad: vstupem jsou (přirozená) čísla a 1, a 2, … , an která je třeba setřídit velikost dat D v binárním zápisu je |D| = log 2 a 1 + … + log 2 an __________________________________ časová složitost = funkce f(|D|) udávající počet kroků algoritmu v závislosti na velikosti vstupních dat intuitivně: není podstatný přesný tvar funkce f (multiplikativní a aditivní konstanty), ale pouze to, do jaké „třídy“ funkce f patří (lineární, kvadratická, exponenciální, …) 4
TIN 062 Ondřej Čepek Příklad: f(|D|) = a |D| + b lineární algoritmus f(|D|) = a |D|2 + b |D| + c kvadratický algoritmus f(|D|) = k 2|D| exponenciální algoritmus Co je to krok algoritmu? rigorózně: operace daného abstraktního stroje (Turingův stroj, stroj RAM) zjednodušení (někdy budeme používat): krok algoritmu = operace proveditelná v konstantním (tj. na velikosti dat nezávislém) čase • aritmetické operace (sčítání, odčítání, násobení, …) • porovnání dvou hodnot (typicky čísel) • přiřazení (pouze pro jednoduché datové typy, ne pro pole …) → tím se zjednoduší i měření velikosti dat (čísla mají pevnou maximální velikost) Příklad: setřídit čísla a 1, a 2, … , an → velikost dat je |D| = n Toto zjednodušení nevadí při porovnávání algoritmů, ale může vést k chybě při zařazování algoritmů do tříd složitosti Proč měřit časovou složitost algoritmů? stačí přeci mít dostatečně rychlý počítač … 5
TIN 062 Ondřej Čepek Doba provádění f(n) operací (délka běhu algoritmu) pro vstupní data velikosti n za předpokladu že použitý hardware je schopen vykonat 1 milion operací za sekundu n f(n) 20 40 60 80 100 500 1000 n 20μs 40μs 60μs 80μs 0. 1 ms 0. 5 ms 1 ms n log n 86μs 0. 2 ms 0. 35 ms 0. 7 ms 4. 5 ms 10 ms n 2 0. 4 ms 1. 6 ms 3. 6 ms 6. 4 ms 10 ms 0. 25 s 1 s n 3 8 ms 64 ms 0. 22 s 0. 5 s 1 s 125 s 17 min 2 n 1 s n! 77 tis. let 11. 7 dní 36 tis. let 6
TIN 062 Ondřej Čepek Růst rozsahu zpracovatelných úloh, tj. „zvládnutelné“ velikosti vstupních dat, díky zrychlení výpočtu (lepší hardware) za předpokladu, že na „stávajícím“ hardware lze řešit úlohy velikosti x Zrychlení výpočtu f(n) původní 10 krát 1000 krát n x 100 x 1000 x n log n x 7. 02 x 53. 56 x 431. 5 x n 2 x 3. 16 x 10 x 31. 62 x n 3 x 2. 15 x 4. 64 x 10 x 2 n x x+3 x+6 x+9 7
TIN 062 Ondřej Čepek Asymptotická (časová) složitost Intuitivně: zkoumá „chování“ algoritmu na „velkých“ datech, tj. nebere v úvahu multiplikativní a aditivní konstanty, pouze zařazuje algoritmy do „kategorií“ podle jejich skutečné časové složitosti Rigorózně: f(n) je asymptoticky menší nebo rovno g(n), značíme f(n) O(g(n)), pokud c>0 n 0>0 n≥n 0 : 0 ≤ f(n) ≤ c g(n) f(n) je asymptoticky větší nebo rovno g(n), značíme f(n) Ω(g(n)), pokud c>0 n 0>0 n≥n 0 : 0 ≤ c g(n) ≤ f(n) je asymptoticky stejné jako g(n), značíme f(n) (g(n)), pokud c>0 d>0 n 0>0 n≥n 0 : 0 ≤ c g(n) ≤ f(n) ≤ d g(n) f(n) je asymptoticky ostře menší než g(n), značíme f(n) o(g(n)), pokud c>0 n 0>0 n≥n 0 : 0 ≤ f(n) ≤ c g(n) f(n) je asymptoticky ostře větší než g(n), značíme f(n) ω(g(n)), pokud c>0 n 0>0 n≥n 0 : 0 ≤ c g(n) ≤ f(n) 8
Hladové Algoritmy TIN 062 Ondřej Čepek Hladový algoritmus většinou splňuje následující podmínky: • v každém kroku udělá LOKÁLNĚ optimální rozhodnutí (výběr hodnoty) • nikdy nemění již udělaná rozhodnutí („nebacktrackuje“) • pokud vždy zaručeně nalezne GLOBÁLNĚ optimální řešení tak jde o hladový optimalizační algoritmus, jinak (většinou) hovoříme o hladové heuristice Problém 1: je dán souvislý neorientovaný graf G=(V, E) a funkce d : E R+ udávající délky hran. Najděte minimální kostru grafu G, tj. acyklický podgrafu G, který má |V|-1 hran, a mezi všemi takovými podgrafy má minimálním součet délek hran. Problém 2: Je dána množina S={1, 2, … , n} úkolů jednotkové délky. Ke každému úkolu i je dána požadovaná lhůta dokončení di N+ a pokuta wi N+, kterou je úkol penalizován není-li hotov do své lhůty. Najděte rozvrh (permutaci) úkolů (od času 0 do času n), který minimalizuje celkovou pokutu za úkoly, které nejsou hotovy do jejich lhůty. Problém 3: Je dána množina S={1, 2, … , n} úkolů. Ke každému úkolu i je dán čas si N+ jeho zahájení a čas fi N+ jeho dokončení, kde si ≤ fi. Úkoly i a j jsou kompatibilní pokud se intervaly [si, fi) a [sj, fj) nepřekrývají. Najděte množinu po dvou kompatibilních úkolů, která je co největší. Plán: Navrhneme obecný hladový algoritmus řešící problémy 1 a 2 jako speciální případy a dávající návod, jak řešit Problém 3. 9
TIN 062 Ondřej Čepek Matroidy Definice: Matroid je uspořádaná dvojice M=(S, I) splňující následující tři podmínky : 1. S je konečná a neprázdná množina prvků matroidu M. 2. I je neprázdná množina podmnožiny S (nezávislých podmnožiny S), která má následující dědičnou vlastnost: pokud (B I) a (A B) tak (A I). 3. I má následující výměnnou vlastnost: pokud (A I) a (B I) takové, že (|A| < |B|) tak platí ( x B A : A {x} I). 4. Příklad 1: Maticový matroid (zdroj matroidové terminologie) • T je reálná matice řádu nxn. Pak T definuje matroid MT=(ST, IT) kde • ST je množina sloupců matice T a • A ST je nezávislá (tj. A IT) pokud A sestává z lineárně nezávislých vektorů. Příklad 2: Grafový matroid • G=(V, E) je neorientovaný graf. Pak G definuje matroid MG=(SG, IG) kde • SG=E a • A SG je nezávislá (tj. A IG) pokud A neobsahuje cyklus (tj. pokud A tvoří les). Věta: Všechny maximální nezávislé množiny v matroidu mají stejnou velikost. 10
TIN 062 Ondřej Čepek R+ a její Definice: Matroid M=(S, I) je vážený pokud je dána váhová funkce w : S přirozené rozšíření na podmnožiny S je dáno předpisem A S: w(A) = x Aw(x). Matroidový Problém (MP): Pro daný vážený matroid M najděte nezávislou množinu v M s co největší váhou (taková množina se nazývá optimální množina matroidu M) Poznámka: Protože jsou všechny váhy kladné, tak je optimální množina vždy (v inkluzi) maximální nezávislou množinou. Fakt: Problém 1 je speciální případ MP Vezměme MG=(SG, IG) a pro každé e SG definujme w(e) = c - d(e), kde c je dostatečně velké číslo (libovolné c > max d(e) vyhovuje). Nyní platí: optimální množina v MG (vzhledem k w) = minimální kostra v G (vzhledem k d) Fakt : Problém 2 je speciální případ MP (toto není tak snadné jako předchozí případ) Nechť X je rozvrh všech úkolů. Úkol i nazveme : • včasným v X pokud je ukončen v čase di nebo dříve • zpožděným v X pokud je ukončen až po čase di Pozorování 1: Při hledání optimálního rozvrhu stačí uvažovat pouze ty rozvrhy, ve kterých jsou všechny včasné úkoly rozvrženy před všemi zpožděnými. Pozorování 2: Navíc lze předpokládat, že včasné úkoly jsou v rozvrhu uspořádány 11 podle neklesajících lhůt dokončení (při shodě rozhoduje například číslo úkolu).
TIN 062 Ondřej Čepek Definice: Rozvrhy splňující podmínky Pozorování 1 a 2 se nazývají kanonické. Fakt: Optimální rozvrh stačí hledat v množině kanonických rozvrhů. Navíc je každý kanonický rozvrh „jednoznačně“ určen množinou svých včasných úkolů (až na permutaci zpožděných úkolů). Definice: Množina úkolů A S je nezávislá pokud existuje rozvrh X všech úkolů takový, že všechny úkoly v A jsou včasné v X. Označme IS množinu všech nezávislých podmnožiny S. Fakt: Množina včasných úkolů v libovolném kanonickém rozvrhu je nezávislá množina, což dává bijekci množiny včasných úkolů v kanonických rozvrzích nezávislé množiny A tudíž (díky výše uvedeným úvahám): minimalizace celkové pokuty rozvrhu = = minimalizace součtu vah zpožděných úkolů v kanonickém rozvrhu = = maximalizace součtu vah včasných úkolů v kanonickém rozvrhu = = nalezení nezávislé množiny s co největší váhou (nalezení optimální množiny) což je přesně MP neboť platí Věta: M=(S, IS) je matroid. 12
Hladový algoritmus pro MP TIN 062 Ondřej Čepek Nechť je dán matroid M=(S, I), kde S={x 1, … , xn}, a váhová funkce w : S R+. GREEDY(M, w); A : = ; setřiď a přečísluj S sestupně (do nerostoucí posloupnosti) podle vah {w(x 1)=max w(xi)}; for i : = 1 to n do if ((A {x}) I) then A : = A {x}; return A. Časová složitost: • (n logn) na setřídění • n krát test na nezávislost (složitost záleží na konkrétním matroidu) • celkem (n logn + n f(n)) kde f(n) je složitost testu na nezávislost Lemma 1: Nechť x S takový, že {x} I. Potom neexistuje A I taková, že x A. Důsledek 1: Prvky přeskočené před prvním výběrem nemohou být v žádné optimální množině. Lemma 2: (přípustnost hladového výběru) Nechť je S setříděno podle vah do nerostoucí posloupnosti a nechť je x první prvek v S pro který {x} I. Potom existuje optimální množina A I taková, že x A. 13
TIN 062 Ondřej Čepek Důsledek 2: První výběr „nezablokuje“ cestu ke konstrukci optimální množiny, což znamená, že v další práci může algoritmus pátrat po optimální množině pouze mezi těmi množinami prvků, které obsahují prvek x. Lemma 3: (existence optimální podstruktury) Nechť je x první prvek vybraný algoritmem GREEDY(M, w). Pak je nalezení optimální množiny v M obsahující x ekvivalentní s nalezením optimální množiny v matroidu M’=(S’, I’), kde S’ = {y S | {x, y} I} I’ = {B S’ {x} | (B {x}) I} a váhová funkce w je stejná jako u M (omezená na S’). Matroid M’ se nazývá kontrakce M prvkem x. Věta: GREEDY(M, w) vrací optimální množinu matroidu M. Důkaz (pouze zhruba): • prvky přeskočené na počátku nemohou být v žádné optimální množině (Lemma 1) • po výběru prvního prvku x Lemma 2 zaručuje existenci optimální množiny obsahující x • zbývající problém je převeden (díky Lemma 3) na problém stejného typu ale na menší množině prvků iterujeme dokud existují neprázdné nezávislé množiny 14
Hladový algoritmus pro Problém 3 TIN 062 Ondřej Čepek Nechť S={1, 2, … , n} je množina úkolů, s 1, … , sn N+ jsou časy zahájení a f 1, … , fn N+ jsou časy dokončení (kde si ≤ fi). GREEDY-SELECT(s, f); A : = ; f 0 : = 0; j : = 0; setřiď a přeznač pole s a f vzestupně podle časů dokončení fi {tj. f 1=min fi}; for i : = 1 to n do if (si ≥ fj) then A : = A {i}; j : = i; return A. Časová složitost: (n logn) na setřídění, zbytek je pak (n). Lemma 1: (přípustnost hladového výběru) Existuje optimální množina (tj. kompatibilní množina úkolů maximální kardinality) která obsahuje úkol s nejmenším fi. Lemma 2: (existence optimální podstruktury) A je optimální množina pro S obsahující úkol 1 tehdy a jen tehdy, když A {1} je optimální množina pro S’ = {i | f 1 ≤ si}. Věta: GREEDY-SELECT(s, f) vrací optimální množinu pro S. Důkaz Přímý důsledek Lemma 1 a Lemma 2. 15
TIN 062 Ondřej Čepek Grafové algoritmy Značení: graf G=(V, E), V vrcholy, |V|=n, E hrany, |E|=m (budeme používat stejné značení pro orientované i neorientovaný grafy) Reprezentace grafů: budeme používat pouze seznamy sousedů (velikost dat (n+m)) Prohledávání grafů Prohledávání do šířky (BFS – breadth first search) BFS(G, s) for each u V do begin barva[u]: =bílá; d[u]: =Maxint; p[u]: =NIL end; barva[s]: =šedá; d[s]: =0; Fronta: ={s}; while Fronta neprázdná do u: =první ve Frontě; for each v je soused u do if barva[v]=bílá then begin barva[v]: =šedá; d[v]: =d[u]+1; p[v]: =u; v zařaď na konec Fronty end; barva[u]: =černá; vyhoď u z Fronty Poznámky k BFS (opakování z přednášek Programování a ADS 1): 1. Prohledává graf po vrstvách podle vzdálenosti (měřeno počtem hran) od vrcholu s 2. Běží v čase (n+m) a funguje i na orientovaném grafu (beze změny) 16
TIN 062 Ondřej Čepek Prohledávání do hloubky (DFS – depth first search) neorientovaná verze – hlavní rozdíl proti BFS spočívá v tom, že aktivní (šedé) vrcholy nejsou ukládány do fronty ale do zásobníku, který je buď explicitně vytvářen algoritmem nebo implicitně rekurzivním voláním DFS(G) begin for i: =1 to n do begin barva[i]: =bílá; rodič[i]: =0 end; for i: =1 to n do if barva[i]=bílá then NAVŠTIV(i) end; NAVŠTIV(i) begin barva[i]: =šedá; for each j je soused i do if barva[j]=bílá then begin označ hranu (i, j) jako stromovou; rodič[j]: =i; NAVŠTIV(j) end else if (barva[j]=šedá) and (j <> rodič[i]) then označ hranu (i, j) jako zpětnou; barva[i]: =černá; end; Plán: ukážeme jak doplnit neorientovanou verzi DFS o další příkazy tak, že složitost 17 zůstane lineární ( (n+m)), ale algoritmus bude „plnit“ podstatně složitější úkol.
TIN 062 Ondřej Čepek Testování 2 -souvislosti neorientovaného grafu Definice: Nechť G=(V, E) je souvislý neorientovaný graf. Pak 1. Vrchol v V je artikulace grafu G, pokud po odstranění v přestane být G souvislý. 2. Graf G je 2 -souvislý pokud nemá žádné artikulace. 3. Množina hran K E tvoří 2 -souvislou komponentu grafu G pokud je K v inkluzi maximální množina taková, že každé dvě hrany z K leží na prosté kružnici (tj. na kružnici bez opakování vrcholů) 4. Důsledek 1: v V je artikulace grafu G x, y V, x y takové, že každá cesta v G mezi x a y prochází vrcholem v 5. Důsledek 2: G je 2 -souvislý x, y V, x y existují alespoň dvě vrcholově disjunktní cesty v G mezi x a y (odtud pojem 2 -souvislost) 6. Algoritmy na testování 2 -souvislosti: 7. Triviální využití DFS v V otestuje, zda je graf G {v} souvislý (tj. 1 -souvislý), což lze docílit pomocí n spuštění DFS v čase (n(n+m)) = (nm) (protože G je souvislý a tedy m ≥ n-1) 2. Sofistikované využití DFS 3. v čase (n+m) = (m) rozhodne o 2 -souvislosti a zároveň označí všechny 18 artikulace a 2 -souvislé komponenty pomocí jediného spuštění „obohaceného“ DFS
TIN 062 Ondřej Čepek Fakt: Vrchol i V je artikulací tehdy a jen tehdy když buď • vrchol i není kořenem DFS stromu a má potomka j takového, že z podstromu s kořenem j nevede žádná zpětná hrana do nějakého předchůdce vrcholu i, nebo • vrchol i je kořenem DFS stromu a má alespoň dva potomky. Jak artikulace najít? DFS doplníme tak, že budeme číslovat vrcholy podle pořadí jejich objevení indexy d[i] a pro každý vrchol i navíc spočítáme funkci low[i] definovanou následovně: Definice: cestu z vrcholu i v DFS stromě nazveme přípustnou pokud vede z i „dolů“ po libovolném (případně nulovém) počtu stromových hran a poté končí nejvýše jedním „skokem vzhůru“ po zpětné hraně. Definice: low[i] = min { d[j] | z i do j vede přípustná cesta } Rekurzivní definice: low[i] = min { x, y, z } kde • x = d[i] • y = min { d[j] | hrana (i, j) je zpětná } • z = min { low[j] | hrana (i, j) je stromová } 19
Jak spočítat low[i] ? TIN 062 Ondřej Čepek 1. při objevení vrcholu i (přebarvení z bílý na šedý) inicializace low[i] : = d[i] 2. při procházení seznamu sousedů vrcholu i pokud je soused j : • bílý tak je rekurzivně navštíven (jako u obyčejného DFS) a hrana (i, j) se stává stromovou • šedý tak pokud a) j = rodič[i] (tzn. že hrana (j, i) je stromová), tak se neděje nic b) j rodič[i] (tzn. že hrana (i, j) se stává zpětnou), tak proveď update: pokud platí low[i] > d[j] tak dosaď low[i] : = d[j] • černý (tzn. že hrana (j, i) je zpětná) tak se neděje nic 3. při backtrackingu do i (návrat po stromové hraně (i, j) z j do i) proveď update: pokud platí low[i] > low[j] tak dosaď low[i] : = low[j] Jak se pozná, že vrchol i je artikulace? 1. vrchol i není kořenem DFS stromu a má potomka j takového, že d[i] low[j] (což lze testovat při backtrackingu z vrcholu j do vrcholu i) nebo 2. vrchol i je kořenem DFS stromu a má alespoň dva potomky (což budeme testovat pomocí jednoduchého triku) 20
TIN 062 Ondřej Čepek DFS-2 -SOUVISLOST(G) begin čas: =0; S: =prázdný zásobník; for i: =1 to n do begin barva[i]: =bílá; rodič[i]: =0; d[i]: =0; kořen[i]: =false; art[i]: =false end; for i: =1 to n do if barva[i]=bílá then begin kořen[i]: =true; NAVŠTIV(i) end; NAVŠTIV(i) begin čas: =čas+1; d[i]: =čas; low[i]: =čas; barva[i]: =šedá; for each j je soused i do if barva[j]=bílá then begin označ hranu (i, j) jako stromovou a dej ji do S; rodič[j]: =i; NAVŠTIV(j); {po návratu backtracking po (i, j)} if low[i] > low[j] then low[i] : = low[j]; {update} if d[i] low[j] then {i je artikulace nebo kořen} begin if not kořen[i] then art[i]: =true; odstraň hrany z vršku S až po hranu (i, j) včetně end; {vyjmuté hrany tvoří komponentu} if kořen[i] then kořen[i]: =false end {při návratu z 2. potomka je kořen označen jako artikulace} else if (barva[j]=šedá) and (j <> rodič[i]) then begin označ hranu (i, j) jako zpětnou a dej ji do S; if low[i] > d[j] then low[i] : = d[j] {update} end; 21 barva[i]: =černá; end;
TIN 062 Ondřej Čepek Prohledávání do hloubky (DFS – depth first search) orientovaná verze (předpokládáme že graf je reprezentován pomocí seznamů sousedů) DFS(G) begin for i: =1 to n do barva[i]: =bílá; čas: =0; for i: =1 to n do if barva[i]=bílá then NAVŠTIV(i) end; NAVŠTIV(i) begin barva[i]: =šedá; čas: =čas+1; d[i]: =čas; for each j je soused i do if barva[j]=bílá then begin NAVŠTIV(j); označ (i, j) jako stromovou end else if barva[j]=šedá then begin ohlas nalezení cyklu; označ (i, j) jako zpětnou end else if d[i] < d[j] then označ (i, j) jako dopřednou else označ (i, j) jako příčnou barva[i]: =černá; čas: =čas+1; f[i]: =čas end; 22
Rovinné grafy - terminologie: TIN 062 Ondřej Čepek Definice: Neorientovaný graf G = (V, E) se nazývá rovinný pokud existuje jeho vnoření (nakreslení) do Eukleidovské roviny takové, že se žádné dvě hrany neprotínají. Platí: Pro daný graf G = (V, E) lze v čase (n+m) rozhodnout, zda je rovinný a v kladném případě zkonstruovat jeho rovinné vnoření. Definice: Nechť je G = (V, E) rovinný graf s daným rovinným vnořením. Duální graf (resp. duální multigraf) G* = (V*, E) je pak dán následovně: stěny G vrcholy G* hrany G* Poznámka: Pokud existují v G dvě stěny s více než jednou společnou hranou, tak je G* multigraf. Platí: G* je vždy souvislý. Pokud je i G souvislý, tak jsou G a G** izomorfní, a navíc v takovém případě platí stěny G* vrcholy G. Pro daný vstupní graf G lze duální graf G* zkonstruovat v čase (n+m). Lemma 1: Nechť je G = (V, E) souvislý rovinný graf s daným rovinným vnořením, nechť je G* = (V*, E) jeho duální graf a nechť E’ E. Pak podgraf (V, E’) grafu G obsahuje cyklus tehdy a jen tehdy, když podgraf (V, E E’) grafu G* není souvislý. Lemma 2: Nechť je G = (V, E), G* = (V*, E) a E’ E jsou dány jako v Lemma 1. Pak (V, E’) je kostra grafu G tehdy a jen tehdy, když (V, E E’) je kostra grafu G*. 23
TIN 062 Ondřej Čepek Definice: Rovinný graf G = (V, E) se nazývá triangulovaný pokud je každá jeho stěna trojúhelník, tj. každá jeho stěna je omezena právě třemi hranami. Graf G’ = (V, E’) je triangulací grafu G = (V, E) pokud je G’ triangulovaný a E E’. Platí: Pokud je graf G triangulovaný, tak je jeho duální graf G* 3 -regulární. Navíc lze pro každý rovinný graf G daný (nějakým) jeho rovinným vnořením zkonstruovat (nějakou) jeho triangulaci v čase (n+m). Věta o planárním separátoru Věta: Nechť je G = (V, E) neorientovaný rovinný graf. Pak existuje rozklad V na disjunktní množiny A, B a S takové, že 1. A B S = V (každý vrchol je v některé části rozkladu) 2. (A B) E = (množina S od sebe separuje množiny A a B) 3. |A| ⅔ n 4. |B| ⅔ n 5. |S| 4 n Toto rozdělení lze navíc zkonstruovat v čase (n+m). Poznámka: BÚNO můžeme předpokládat, že G je souvislý. Důkaz: je konstruktivní, sestává z „preprocessingu“ (eliminace „jednoduchých“ případů) a pak vlastního „jádra“ důkazu 24
TIN 062 Ondřej Čepek Preprocessing Zkonstruujeme rovinné vnoření grafu G (lze v linearním čase), vybereme libovolné s V a provedeme BFS(G) z vrcholu s. Toto BFS rozdělí V do vrstev L 0, … , Lq, kde L 0 = {s}. Dodefinujme Lq+1 = a označme |Li| = zi, i = 1, 2, … , q+1. Platí (vlastnost BFS): Nechť (x, y) E. Pak buď i: {x, y} Li nebo i: x Li a y Li 1. Z toho plyne, že i: Li je separátor oddělující A = L 0 … Li-1 a B = Li+1 … Lq+1. Definice: Nechť t je index takový, že Lt obsahuje n/2 -tý vrchol navštívený pomocí BFS. Pozorování: Pokud platí zt 4 n tak jsme hotovi. Proto předpokládejme zt > 4 n. Lemma 3: Existují indexy v < t a w > t takové, že zv n, zw n a (w – v) n. Značení: C = L 0 … Lv-1, D = Lv+1 … Lw-1, E = Lw+1 … Lq (víme |C|<n/2, |E| <n/2) Pozorování: Pokud platí |D| 2 n/3 tak jsme hotovi. Proto předpokládejme |D| > 2 n/3. Plán pro jádro důkazu: Nalezneme separátor S’ velikosti 2 n rozdělující D v poměru 2: 1 nebo vyrovnanějším. Potom definujeme: • S = S’ Lv Lw • A = (větší z dvojice C, E) (menší kus D) • B = (menší z dvojice C, E) (větší kus D) Tím budeme hotovi. 25
TIN 062 Ondřej Čepek Postup konstrukce separátoru S’ • Z grafu G odstraníme vše kromě D a přidáme „nový“ vrchol s, který spojíme hranou s každým vrcholem v Lv+1 (graf zůstane rovinný). Získaný graf označíme G’ = (V’, E’) • Zkonstruujeme kostru T grafu G’ : a) Pro každý vrchol x Lw-1 vyber jednu hranu jdoucí z x do Lw-2 a dej ji do T b) Opakuj předchozí krok pro vrcholy ve vrstvách Lw-2 , … , Lv+2 c) Dej do T všechny hrany z s do Lv+1 • Provedeme triangulaci grafu G’, získaný graf označíme G’’ = (V’’, E’’) (platí V’’ = V’) • Vybereme cestu v T, která tvoří hledaný separátor S’ (zbytek důkazu popisuje jak) Lemma 4: x, y V’’ : cesta z x do y v kostře T má délku 2 n (T má průměr 2 n). Definice: Hrany v E’’ T (čili ty co nejsou v kostře T) se nazývají příčky grafu G’’. Označme G* = (V*, E’’) duální graf ke grafu G’’. Platí (důsledek Lemma 2): (V*, E’’ T) je kostra grafu G* (tj. příčky z G’’ tvoří kostru v G*) Platí (vlastnost kostry grafu): e = (u, v) E’’ T existuje v T právě jedna cesta z u do v, která spolu s e tvoří cyklus ce. Další postup: hledáme hranu e takovou, že cyklus ce (což je cesta v T doplňená o e) 26 tvoří požadovaný separátor, tj. cyklus ce musí „obklíčit“ něco mezi jednou třetinou a dvěmi třetinami všech vrcholů v D.
TIN 062 Ondřej Čepek Hledání vhodné hrany e • Vybereme list kostry E’’ T grafu G*, označíme ho x* a orientujeme všechny hrany kostry směrem od x* • Provedeme DFS na kostru E’’ T z vrcholu x* a pro každou hranu e E’’ T induktivně spočítáme (v DFS stromě od listů vzhledem vzhůru, tj. při backtracku): 1. Ue = počet vrcholů grafu G’’ uvnitř cyklu ce 2. De = počet vrcholů na cyklu ce (délka cyklu ce) 3. Ce = reprezentace cyklu ce seznamem vrcholů • Tento výpočet závisí na typu hrany, musíme rozlišit 4 případy (nechť e=(f, g) E’’ T) 1. Stěna g grafu G’’ je omezena 2 hranami stromu T a 1 příčkou 2. Stěna g grafu G’’ je omezena 1 hranou stromu T a 2 příčkami a) Hrana stromu T je částí cyklu ce b) Hrana stromu T není částí cyklu ce 3. Stěna g grafu G’’ je omezena 3 příčkami Lemma 5: Existuje příčka e taková, že Ue 2 n’/3 a n’– (Ue + De) 2 n’/3 (kde n’ = |V’’|). Navíc e najdeme v průběhu práce DFS na kostře E’’ T, tj. v čase (n+m). Po nalezení hrany e zvolíme: S’ = Ce {s}, X = Ue, Y = V’’ {Ue Ce}, kde tentokrát chápeme Ue jako množinu vrcholů. Tím jsme hotovi. 27
TIN 062 Ondřej Čepek Algoritmus pro konstrukci planárního separátoru 1. Zkonstruuj vnoření G=(V, E) do roviny (lineárním algoritmem Hopcroft-Tarjan) 2. Proveď BFS(G) a rozděl V do vrstev L 0, … , Lq+1 3. Najdi „prostřední“ vrstvu Lt a pokud zt 4 n tak KONEC (S = Lt, A = L 0 … Lt-1, B = Lt+1 … Lq+1) 4. Najdi v < t a w > t takové, že zv n, zw n a (w – v) n a rozděl V na C = L 0 … Lv-1, D = Lv+1 … Lw-1, E = Lw+1 … Lq. Pokud |D| 2 n/3 tak KONEC (S = Lv Lw, A = největší z {C, D, E}, B = sjednocení zbývajících dvou z {C, D, E}) 5. Zkonstruuj graf G’=(V’, E’) přidáním vrcholu s k D a jeho kostru T o průměru 2 n. 6. Zkonstruuj graf G’’=(V’’, E’’) triangulací grafu G’. 7. Zkonstruuj graf G*=(V*, E’’) duální ke grafu G’’ a jeho kostru T* = E’’ T. 8. Proveď DFS(T*) z listu kostry T* a pro každou příčku e T* spočti Ue, De, Ce. 9. Najdi příčku pro kterou platí Ue 2 n’/3 a n’– (Ue + De) 2 n’/3. KONEC Nechť S’ = Ce {s}, X = Ue, Y = V’’ {Ue Ce}, kde Ue představuje množinu vrcholů. (S= Lv Lw S’, A= větší z {X, Y} menší z {C, E}, B= menší z {X, Y} větší z {C, E}) 10. 11. Každý krok trvá O(n+m) a tedy celkově algoritmus trvá (n+m). 28
Úlohy, optimalizační úlohy, rozhodovací problémy TIN 062 Ondřej Čepek Úloha = pro daný vstup (instanci úlohy) je cílem získat výstup s danými vlastnostmi. KOSTRA: Je dán neorientovaný graf G=(V, E). Najděte v G kostru. HAMILTONOVSKÁ KRUŽNICE: Je dán neorientovaný graf G=(V, E). Najděte v G HK. Optimalizační úloha = úloha, kde je cílem získat optimální (zpravidla nejmenší / největší) výstup s danými vlastnostmi. MINIMÁLNÍ KOSTRA: Je dán neorientovaný graf G=(V, E). Najděte v G kostru minimální celkové váhy. KLIKA: Je dán neorientovaný graf G=(V, E). Najděte největší kliku (úplný podgraf maximální kardinality) v grafu G. OBCHODNÍ CESTUJÍCÍ (TSP): Je dán ohodnocený neorientovaný graf G=(V, E) s nezápornými váhami na hranách. Najděte v G Hamiltonovskou kružnici minimální celkové váhy. Rozhodovací problém = úloha, jejímž výstupem je odpověď ANO / NE SPLNITELNOST (SAT): Je dána KNF F on n Booleovských proměnných. Existuje pravdivostní ohodnocení proměnných které splňuje F ? SOUČET PODMNOŽINY (SP): Je dána množina n přirozených čísel a 1, … , an a dále přirozené číslo b. Existuje S {1, … , n} takové, že Σi Sai = b? 29
TIN 062 Ondřej Čepek V dalším výkladu se omezíme pouze na rozhodovací problémy, což není omezující podmínka, protože ke každé úloze a optimalizační úloze lze „přiřadit“ nejvýše stejně těžký (z hlediska řešitelnosti v polynomiálním čase) rozhodovací problém, takový že: • polynomiální algoritmus řešící (optimal. ) úlohu řeší i přiřazený rozhodovací problém • pokud je přiřazený rozhodovací problém „těžký“ je „těžká“ i (optimalizační) úloha Často platí i opačným směrem (ale tento směr nebývá tak snadný). Rozhodovací problém jako problém rozpoznávání jazyka Nechť P je rozhodovací problém: • předpokládáme, že každé zadání (instance) problému P je zakódována jako řetězec (slovo) v nějaké pevné abecedě Σ, tj. instance problému P = slovo ze Σ* • kódy všech instancí problému P = jazyk L(P) Σ* který se dělí na • L(P)Y = kódy instancí s odpovědí ANO • L(P)N = kódy instancí s odpovědí NE • rozhodovací problém P lze nyní formulovat takto: pro daný vstup x L(P) rozhodni zda x L(P)Y nebo x L(P)N předpokládáme, že rozhodnout zda x L(P) (tj. rozhodnout zda x kóduje nějakou instanci problému P nebo je to “nesmysl”) je možné v polynomiálním čase 30 vzhledem k |x| (tento test lze považovat za jakýsi „preprocessing“) •
Deterministický Turingův Stroj (DTS) TIN 062 Ondřej Čepek DTS je abstraktní stroj definovaný pěticí (Q, Σ, δ, q 0, F), který se skládá z: • řídící jednotky, která je v každém okamžiku v jednom ze stavů v konečné množině stavů Q, obsahující počáteční stav q 0 a množinu přijímacích stavů F • potenciálně nekonečné (jednosměrné) vstupní pásky (pouze pro čtení) a několika potenciálně nekonečných (jednosměrných) pracovních pásek, které sestávají z buněk, z nichž každá může obsahovat právě jeden symbol abecedy Σ • hlav pro čtení (vstupní páska) a čtení a zápis (pracovní pásky), které se mohou po páskách pohybovat oběma směry • programu, který je zadán přechodovou funkcí δ : Q Σk-1 { , , }k, kde k je počet pásek (včetně vstupní), funkce není definována pro všechny vstupy Konfigurace TS = stav řídící jednotky + pozice hlav na všech páskách (včetně vstupní) + obsah pracovních pásek (té jejich konečné části kde došlo od počátku výpočtu k nějakým změnám) Počáteční konfigurace TS = stav q 0 + všechny hlavy na počátečních pozicích + vstupní slovo na vstupní pásce a prázdná slova (prázdné symboly) na pracovních páskách Displej TS = stav řídící jednotky + symboly (obsahy buněk) pod všemi hlavami Krok TS = jedno použití přechodové funkce na základě aktuálního displeje, tj. změna stavu řídící jednotky, přepsání symbolů pod pracovními hlavami a posun všech 31 hlav (lze i zůstat na místě)
TIN 062 Ondřej Čepek Výpočet TS = posloupnost kroků TS začínající v počáteční konfiguraci Zastavení TS = okamžik kdy přechodová funkce není pro daný displej definována (vždy platí pokud je řídící jednotka v přijímacím stavu) Přijímající výpočet TS = výpočet TS, který zastaví v přijímacím stavu Odmítající výpočet TS = výpočet TS, který zastaví v jiném než přijímacím stavu nebo výpočet, který nezastaví (nekonečný výpočet) Přijímané slovo: Slovo w je přijímáno DTS M pokud výpočet M nad vstupním slovem w zastaví v přijímacím stavu. Přijímaný jazyk: Jazyk L(M) přijímaný DTS M sestává ze všech slov přijímaných DTS M. Akceptor x Transducer Dosud popisovaný TS je tzv. akceptor. Pokud chceme, aby TS počítal funkci, tak z něj uděláme transducer přidáním výstupní pásky, která je pouze pro zápis, hlava se po ní pohybuje pouze vpravo a symbol pod hlavou neovlivňuje přechodovou funkci (nepatří do displeje). Transducer může v každém svém kroku zapsat na výstupní pásku 1 symbol. Definičním oborem vyčíslované funkce je přijímaný jazyk daného TS a funkční hodnotou přiřazenou přijímanému vstupnímu slovu je obsah výstupní pásky v okamžiku zastavení. Proč zrovna TS jako výpočetní model? Přesná definice časové i prostorové složitosti výpočtu + Church-Turingova teze. 32
TIN 062 Ondřej Čepek Prostorová složitost výpočtu DTS Nechť M je DTS takový, že w Σ* takové, že |w| = n, použije M při práci nad vstupním slovem w nejvýše S(n) buněk na pracovních páskách (prostor zabraný vstupním slovem na vstupní pásce se nepočítá). Potom říkáme, že M má prostorovou složitost S(n). Deterministická prostorová složitost jazyka Jazyk L má deterministickou prostorovou složitost S(n) pokud existuje DTS M s prostorovou složitostí S(n), který rozpoznává L, tj. takový že L(M) = L. Časová složitost výpočtu DTS Nechť M je DTS takový, že w Σ* takové, že |w| = n, udělá M při práci nad vstupním slovem w nejvýše T(n) kroků než zastaví. Potom říkáme, že M má časovou složitost T(n) Deterministická časová složitost jazyka Jazyk L má deterministickou časovou složitost T(n) pokud existuje DTS M s časovou složitostí T(n), který rozpoznává L, tj. takový že L(M) = L. Deterministické třídy časové a prostorové složitosti DSPACE(S(n)) = {L | L má deterministickou prostorovou složitost S(n)} DTIME(T(n)) = {L | L má deterministickou časovou složitost T(n)} PSPACE = i≥ 0 DSPACE(ni) P = i≥ 0 DTIME(ni) 33
TIN 062 Ondřej Čepek Nedeterministický Turingův Stroj (NTS) Všechny definice stejné jako pro DTS kromě přechodové funkce δ, která je nahrazena tabulkou δ, která přiřazuje každému displeji z množiny Q Σk množinu možných pokračování, tj. množinu z potenční množiny P(Q Σk-1 { , , }k). Definice: NTS M přijímá vstup x Σ* tehdy a jen tehdy když existuje přijímající výpočet NTS M na vstupu x (výpočet končící v qy). Jazyk L(M) přijímaný NTS M sestává ze všech vstupních slov přijímaných NTS M. Alternativní definice NTS: přidáme tzv. hádací pásku. Práce NTS pak sestává ze 2 fází: 1) Na hádací pásku je (nedeterministicky) zapsán řetězec y {1, … , k}*, kde k je maximální počet možných pokračování pro nějaký displej v tabulce δ. 2) Pomocí y je výpočet na vstupu x změněn z nedeterministického na deterministický. Vstup x je přijat pokud existuje (certifikát) y kódující přijímající výpočet. 34
Prostorová složitost výpočtu NTS TIN 062 Ondřej Čepek Nechť M je NTS takový, že w Σ* takové, že |w| = n, použije M při práci nad vstupním slovem w nejvýše S(n) buněk na pracovních páskách (při jakémkoli z možných výpočtů M nad vstupem w). Potom říkáme, že M má prostorovou složitost S(n). Nedeterministická prostorová složitost jazyka Jazyk L má nedeterministickou prostorovou složitost S(n) pokud existuje NTS M s prostorovou složitostí S(n), který rozpoznává L, tj. takový že L(M) = L. Časová složitost výpočtu NTS Nechť M je NTS takový, že w Σ* takové, že |w| = n, udělá M při práci nad vstupním slovem w nejvýše T(n) kroků než zastaví (při jakémkoli z možných výpočtů M nad vstupem w). Potom říkáme, že M má časovou složitost T(n). Nedeterministická časová složitost jazyka Jazyk L má nedeterministickou časovou složitost T(n) pokud existuje NTS M s časovou složitostí T(n), který rozpoznává L, tj. takový že L(M) = L. Nedeterministické třídy časové a prostorové složitosti NSPACE(S(n)) = {L | L má nedeterministickou prostorovou složitost S(n)} NTIME(T(n)) = {L | L má nedeterministickou časovou složitost T(n)} NPSPACE = i≥ 0 NSPACE(ni) NP = i≥ 0 NTIME(ni) 35
TIN 062 Ondřej Čepek Konstruovatelnost funkcí Definice: Funkce f : N N je rekurzivní tehdy a jen tehdy, když existuje DTS transducer s jednoprvkovou vstupní abecedou takový, že pro vstup 1 n (n znaků na vstupní pásce). dává výstup 1 f(n) (f(n) znaků na výstupní pásce). Definice: Funkce f : N N je vyčíslitelná v lineárním čase tehdy a jen tehdy, když je rekurzivní a existuje konstanta c a DTS transducer s jednoprvkovou vstupní abecedou takový, že na vstupu 1 n udělá nejvýše cf(n) kroků než vydá výstup 1 f(n). Definice: Funkce f : N N je časově konstruovatelná tehdy a jen tehdy, když existuje DTS takový, že pro každý vstup délky n zastaví po právě f(n) krocích. Platí: Předchozí dvě definice jsou ekvivalentní (u časové složitosti budeme vždy předpokládat f(n) ≥ n+1). Každá polynomiální funkce je časově konstruovatelná. Definice: Funkce f : N N je vyčíslitelná v lineárním prostoru tehdy a jen tehdy, když je rekurzivní a existuje konstanta c a DTS transducer s jednoprvkovou vstupní abecedou takový, že na vstupu 1 n použije nejvýše cf(n) buněk na pracovních páskách než vydá výstup 1 f(n). Definice: Funkce f : N N je prostorově konstruovatelná tehdy a jen tehdy, když existuje DTS takový, že pro každý vstup délky n použije (označí) právě f(n) buněk na pracovních páskách než zastaví. Platí: Předchozí dvě definice jsou ekvivalentní. Každá polynomiální funkce je prostorově 36 konstruovatelná.
NP-těžkost a NP-úplnost TIN 062 Ondřej Čepek Definice: Funkce f : {0, 1}* je polynomiálně vyčíslitelná tehdy a jen tehdy, když existuje polynom p a DTS transducer A takový, že pro každý vstup x {0, 1}* dává DTS transducer A výstup f(x) po vykonání nejvýše p(|x|) kroků. Definice: Jazyk L nad abecedou {0, 1} je polynomiálně převoditelný na jazyk L’ nad {0, 1} (značíme L L’) tehdy a jen tehdy, když existuje polynomiálně vyčíslitelná funkce f taková, že x {0, 1}*: (x L) (f(x) L’). Definice: Problém P je NP-těžký tehdy a jen tehdy, když Q NP : L(Q)Y L(P)Y. Problém P je NP-úplný tehdy a jen tehdy, když je P NP-těžký a navíc P NP. NP Definice: Problém P je co-NP-těžký tehdy a jen tehdy, když Q co-NP : L(Q)N L(P)N. Problém P je co-NP-úplný tehdy a jen tehdy, když je P co-NP-těžký a navíc P co-NP Důsledek: Pokud je Q NP-těžký a L(Q)Y L(P)Y, pak také P je NP-těžký. Obdobně, pokud je Q co-NP-těžký a L(Q)N L(P)N, pak také P je co-NP-těžký. Toto je standardní postup jak dokazovat NP-těžkost (resp. co-NP-těžkost), který ovšem vyžaduje existenci alespoň jednoho NP-těžkého (resp. co-NP-těžkého) problému. Věta (Cook-Levin 1971): Existuje NP-úplný problém. Poznámka: Původní důkaz je udělán problém splnitelnosti booleovských formulí zadaných v KNF, my použijeme jiný rozhodovací problém. 37
TIN 062 Ondřej Čepek Kachlíkování: Zadání: množina barev B, čtvercová síť S s obvodem obarveným barvami z B, množina K typů kachlíků, kde je každý typ definován svou horní, dolní, levou a pravou barvou. Otázka: Lze síť S vykachlíkovat pomocí kachlíků z množiny K (stejný typ lze použít libovolně krát, kachlíky ale nelze otáčet) tak, aby a) barvy kachlíků přilehlé k obvodu sítě souhlasily s barvami předepsanými tomto na obvodu sítě a b) každá dvojice barev na dotyku dvou kachlíků byla rovněž shodná? Věta: Kachlíkování je NP-úplné. Důkaz: 1) Kachlíkování je v NP – to je zřejmé 2) Kachlíkování je NP-těžké – dokážeme z definice třídy NP Nechť R NP libovolný a nechť M je NTS program rozpoznávající L(R)Y v čase shora omezeném polynomem p (tj. x L(R)Y skončí každý přijímající výpočet stroje M na vstupu x po nejvýše p(|x|) krocích). Navíc předpokládejme, že M přijímá „s prázdnou páskou“ (po přechodu do stavu q. Y neskončí práci, ale vše na pásce přepíše prázdným symbolem, hlavu „zaparkuje“ na začátku pásky a přejde do „nového“ koncového stavu). Nechť je M definován množinou stavů Q, vstupní abecedou Σ={0, 1}, pracovní abecedou Γ ={0, 1, *} (abecedy lze případně překódovat) a přechodovou tabulkou δ. Nechť zadání x {0, 1}* problému R, kde |x|=n, je vstupem programu M. Zkonstruujeme zadání f(x) problému Kachlíkování takové, že x L(R)Y tehdy a jen tehdy, když f(x) L(Kachlíkování)Y 38
TIN 062 Ondřej Čepek Splnitelnost (SAT): Zadání: KNF F na n Booleovských proměnných. Otázka: Existuje pravdivostní ohodnocení proměnných, které splňuje formuli F? Věta: SAT je NP-úplný. Důkaz: Transformace Kachlíkování SAT. 3 -SAT: Zadání: Kubická KNF F na n Booleovských proměnných. Otázka: Existuje pravdivostní ohodnocení proměnných, které splňuje formuli F? Věta: 3 -SAT je NP-úplný. Důkaz: Transformace SAT 3 -SAT. 3 -Barvení Grafu (3 -BG): Zadání: Neorientovaný graf G=(V, E). Otázka: Lze obarvit vrcholy ve V třemi barvami tak, aby žádná hrana v E nebyla monochromatická? Věta: 3 -BG je NP-úplný. Důkaz: Transformace 3 -SAT 3 -BG. Klika (KL): Zadání: Neorientovaný graf G=(V, E) a přirozené číslo k. Otázka: Existuje V’ V, |V’| = k, indukující úplný podgrafu G? Věta: KL je NP-úplný. Důkaz: Transformace SAT KL. 39
TIN 062 Ondřej Čepek Nezávislá Množina (NM): Zadání: Neorientovaný graf G=(V, E) a přirozené číslo q. Otázka: Existuje V’ V, |V’| = q, taková, že uvnitř V’ nejsou žádné hrany? Věta: NM je NP-úplný. Důkaz: Transformace KL NM. Vrcholové Pokrytí (VP): Zadání: Neorientovaný graf G=(V, E) a přirozené číslo r. Otázka: Existuje V’ V, |V’| = r, taková, že každá hrana má ve V’ alespoň jeden vrchol? Věta: VP je NP-úplný. Důkaz: Transformace NM VP. Hamiltonovská Kružnice (HK): Zadání: Neorientovaný graf G=(V, E). Otázka: Obsahuje G Hamiltonovskou kružnici, tj. jednoduchou kružnici, která prochází každým vrcholem právě jednou? Věta: HK je NP-úplný. Důkaz: Transformace VP HK. Obchodní Cestující (TSP): Zadání: Úplný neorientovaný graf G=(V, E), váhy w : E Z 0+ , a číslo k Z+. Otázka: Existuje v G Hamiltonovská kružnice s celkovou váhou nejvýše k? Věta: TSP je NP-úplný. Důkaz: Transformace HK TSP. 40
TIN 062 Ondřej Čepek Součet Podmnožiny (SP): Zadání: Čísla a 1, … , an, b Z+. Otázka: Existuje množina indexů S {1, … , n}, taková, že Σi Sai = b? Věta: SP je NP-úplný. Důkaz: Transformace VP SP. Algoritmus pro SP: předpokládejme, že platí a 1 ≥ … ≥ an , a že A je pole délky b. for j : = 1 to b do {A[j] : = 0; a 0 : = b+1}; for i : = 1 to n do A[ai] : = 1; for j : = b downto ai-1 do if (A[j] = 1) and (j+ai ≤ b) then A[j+ai] : = 1; SP : = (A[b] = 1). Platí: Po i-tém průchodu hlavním cyklem obsahuje pole A jedničky právě u těch indexů, které odpovídají součtům všech neprázdných podmnožiny {a 1, … , ai}, které jsou nejvýše rovny b. Časová složitost: O(nb), což je • exponenciální časová složitost vzhledem k binárně (ale také ternárně, dekadicky, …) kódovanému vstupu, ale • polynomiální časová složitost vzhledem k unárně kódovanému vstupu. Algoritmy s těmito vlastnostmi se nazývají pseudopolynomiální. 41
TIN 062 Ondřej Čepek Pseudopolynomiální algoritmy Nechť je dán rozhodovací problém Q a jeho instance X. Definujme: kód(X) = délka zápisu (počet bitů) instance X v binárním (či „vyšším“) kódovaním max(X) = největší číslo v X (velikost čísla, NE délka jeho binárního zápisu) Definice: Algoritmus řešící Q se nazývá pseudopolynomiální, pokud je jeho časová složitost při spuštění na vstupu X omezena polynomem v proměnných kód(X) a max(X). Poznámka: každý polynomiální algoritmus je samozřejmě také pseudopolynomiální. Pozorování: Pokud je Q takový, že pro každou jeho instanci X platí max(X) p(kód(X)) pro nějaký (pevný) polynom p, tak pro Q pojem polynomiálního a pseudopolynomiálního algoritmu splývá. Problémy, kde toto nenastává budeme nazývat číselné problémy. Definice: Rozhodovací problém Q se nazývá číselný, pokud neexistuje polynom p takový, že pro každou instanci X problému Q platí max(X) p(kód(X)). Věta: Nechť Q je NP-úplný problém, který není číselný. Potom pokud P NP, NP tak Q nemůže být řešen pseudopolynomiálním algoritmem. Otázka: Je každý číslený problém řešitelný nějakým pseudopolynomiálním algoritmem? Odpověď: NE (a typickým představitelům takových problémů se říká silně NP-těžké) 42
Silně NP- úplné problémy TIN 062 Ondřej Čepek Nechť je Q rozhodovací problém a p polynom. Symbolem Qp označíme množinu instancí problému Q (tj. podproblému Q), pro které platí max(X) p(kód(X)), tj. Qp = {X Q | max(X) p(kód(X))} Věta: Nechť je A pseudopolynomiální algoritmus řešící Q. Potom pro každý polynom p je A polynomiálním algoritmem řešícím Qp. Definice: Rozhodovací problém Q se nazývá silně NP-úplný, pokud Q NP a existuje polynom p takový, že podproblém Qp je NP-úplný. Věta: Nechť Q je silně NP-úplný problém. Potom pokud P NP, NP tak Q nemůže být řešen pseudopolynomiálním algoritmem. Příklady číselných silně NP-úplných problémů: Obchodní Cestující (TSP) : • je to číselný problém (váhy na hranách mohou být libovolně velké) • je silně NP-úplný neboť zůstává NP-úplný i když váhy omezíme (malou) konstantou 3 -partition (3 -P) – toto je „čistě“ číselný problém : Zadání: a 1, … , a 3 m, b N, taková že j : ¼ b < aj < ½ b a platí Σj=13 m aj = mb. Otázka: S 1, … , Sm disjunktní rozdělení množiny {1, … , 3 m} takové, že i : Σj Si aj = b? 43
TIN 062 Ondřej Čepek Vztah determinismu a nedeterminismu prostorovou složitost Věta (Savičova): Nechť S : N N je prostorově konstruovatelná funkce taková, že n platí S(n) ≥ log n. Potom existuje konstanta c, pro kterou NSPACE(S(n)) DSPACE(c S 2(n)). Důkaz: Nechť L NSPACE(S(n)) a M je NTS přijímající L v prostoru S(n). Ukážeme, že: • konst. d taková, že na vstupu w délky n má M nejvýše 2 d S(n) konfigurací (množina K) • pokud M přijímá vstup w délky n, tak existuje přijímající výpočet délky nejvýše 2 d S(n) Označme: (K 1, K 2, i) pokud lze z konfigurace K 1 K přejít do konfigurace K 2 K pomocí nejvýše 2 i kroků stroje M. Při hledání přijímacích výpočtů (z iniciální konfigurace do přijímajících konfigurací) se stačí omezit na i ≤ d S(n). Simulace práce NTS M na vstupu w délky n na DTS pro iniciální konfiguraci K 0 K a každou přijímající konfiguraci Kp K proveď : if TEST(K 0, Kp, d S(n)) then přijmi w, kde TEST je procedura implementovaná na DTS TEST(K 1, K 2, i) if (i=0) and ((K 1=K 2) or (z K 1 lze přejít jedním krokem do K 2)) then return TRUE; if (i>0) then for K K do if TEST(K 1, K, i -1) and TEST(K, K 2, i -1) then return TRUE; return FALSE Platí: simulace na DTS proběhne v prostoru c S 2(n). Důsledek: PSPACE = NPSPACE 44
TIN 062 Ondřej Čepek Aproximační algoritmy jsou typicky používány na řešení “velkých” instancí NP-těžkých optimalizačních problémů, pro které je nalezení optimálního řešení “beznadějné”, tj. časově příliš náročné (pro “malé” instance lze nalézt optimální řešení “hrubou silou” v exponenciálním čase). Aproximační algoritmus má následující tři vlastnosti: 1. Vrací (většinou) suboptimální řešení (někdy ale může vrátit i optimum). 2. Dává odhad kvality vráceného řešení vzhledem k optimu. 3. Běží v polynomiálním čase vzhledem k velikosti zadání. 4. Odhad kvality vráceného řešení 5. Značení: OPT = optimální řešení 6. APR = řešení vrácené aproximačním algoritmem 7. f(Z) = hodnota řešení Z (předpokládáme, že je vždy nezáporná) 8. Definice: Aproximační algoritmus A řeší optimalizační problém X s poměrovou chybou r(n), pokud pro všechna zadání problému X velikosti n platí 9. max { f(APR) / f(OPT) , f(OPT) / f(APR) } r(n). 10. Definice: Aproximační algoritmus A řeší optimalizační problém X s relativní chybou e(n), pokud pro všechna zadání problému X velikosti n platí 45 11. |f(APR) f(OPT)| / f(OPT) e(n).
TIN 062 Ondřej Čepek Příklad maximalizačního problému (optimalizační verze Kliky): Pro daný neorientovaný graf najít největší (měřeno počtem vrcholů) kliku v daném grafu. Aproximační algoritmus by musel poskytovat odhad (záruku kvality) tohoto typu f(APR) ¾ f(OPT), kde f(X) je v tomto případě počet vrcholů (tj. velikost kliky) v řešení X. Příklad minimalizačního problému (optimalizační verze Obchodního cestujícího): Pro daný úplný vážený neorientovaný graf najít nejkratší Hamiltonovskou kružnici (měřeno součtem délek hran) v daném grafu. Aproximační algoritmus by musel poskytovat odhad (záruku kvality) tohoto typu f(APR) ≤ 2 f(OPT), kde f(X) je v tomto případě délka Hamiltonovské kružnice v řešení X. Příklady aproximačních algoritmů Úloha vrcholového pokrytí (optimalizační verze): Vstup: Neorientovaný graf G = (V, E). Úloha: Najít vrcholové pokrytí minimální velikosti, tj. najít V’ V takové, že pro každé (u, v) E platí u V’ nebo v V’ (nebo oboje), a navíc V’ má minimální možnou 46 kardinalitu.
TIN 062 Ondřej Čepek Algoritmus A: opakovaně vyber v grafu vrchol nejvyššího stupně, přidej ho do postupně konstruovaného vrcholového pokrytí a odstraň ho z grafu spolu se všemi incidentními (a tedy pokrytými) hranami dokud nezbývá v grafu žádná hrana. Má Algoritmus A konstantní relativní (poměrovou) chybu? Algoritmus B: opakovaně vyber v grafu libovolnou hranu (u, v) dej jak u tak v do postupně konstruovaného vrcholového pokrytí a odstraň jak u tak v z grafu spolu se všemi incidentními (a tedy pokrytými) hranami dokud nezbývá v grafu žádná hrana. Má Algoritmus B konstantní poměrovou chybu? Úloha obchodního cestujícího (optimalizační verze): Vstup: Úplný vážený neorientovaný graf G = (V, E) a váhová funkce c : E Z+ {0} Úloha: Najít v G Hamiltonovskou kružnici nejmenší celkové váhy (délky). 1. Obchodní cestující s trojúhelníkovou nerovností Platí: u, v, w V : c(u, w) ≤ c(u, v) + c(v, w) Napřed nutno zjistit: Je tento podproblém vůbec NP-těžký (a má tedy vůbec cenu uvažovat o aproximačních algoritmech)? ? 47
TIN 062 Ondřej Čepek Algoritmus C: a) Najdi minimální kostru grafu G. b) Vyber libovolný vrchol grafu G a spusť z něj na nalezené kostře DFS, které očísluje vrcholy v preorder pořadí c) Výsledná Hamiltonovská kružnice je dána pořadím (permutací) z bodu b) Poznámka: Pokud je v bodě a) použit Primův (Jarníkův) algoritmus, tak celý algoritmus běží v čase O(|E|) = O(|V|2). Věta: Algoritmus C má konstantní poměrovou chybu r(n) ≤ 2. Obchodní cestující bez trojúhelníkové nerovností Věta: Nechť R 1 je libovolná konstanta. Potom pokud P NP, NP tak neexistuje polynomiální aproximační algoritmus řešící obecný případ obchodního cestujícího poměrovou chybou nejvýše R. s Důsledek (o existenci neaproximovatelných úloh): Existují NP-těžké optimalizační úlohy, pro které neexistují polynomiální aproximační algoritmy s konstantní poměrovou chybou (pokud P NP). NP Opačný případ: Existují NP-těžké optimalizační úkoly, které lze aproximovat s libovolně malou relativní chybou (poměrovou chybou libovolně blízko 1) s tím, že čím menší je požadovaná chyba tím vyšší je časová složitost aproximačního algoritmu. 48
TIN 062 Ondřej Čepek Aproximační schémata Definice: Aproximační schéma (AS) pro optimalizační úlohu X je algoritmus, jehož vstupem je zadání Y úlohy X a (racionální) číslo e>0, který pro libovolné pevné e pracuje jako aproximační algoritmus pro úlohu X s relativní chybou e. Poznámka: Doba běhu může být exponenciální jak ve velikosti zadání Y tak v 1/e. Definice: Polynomiální aproximační schéma (PAS) pro optimalizační úlohu X je AS, jehož časová složitost je polynomiální vzhledem k velikosti zadání Y úlohy X. Poznámka: Doba běhu může být stále ještě exponenciální vzhledem k 1/e. Definice: Úplně polynomiální aproximační schéma (ÚPAS) pro optimalizační úlohu X je PAS, jehož časová složitost je polynomiální také vzhledem k k 1/e. Úloha součtu podmnožiny (optimalizační verze): Vstup: Množina přirozených čísel A = {x 1, … , xn} a přirozené číslo t. Úloha: Najít množinu indexů S {1, … , n} takovou, že sum = i S xi je co největší při platnosti podmínky sum ≤ t. 1. Pseudopolynomiální algoritmus pro SP 2. Značení: Nechť L je uspořádaný seznam přirozených čísel a 1, … , an. Pak L+x, kde x je přirozené číslo je uspořádaný seznam přirozených čísel a 1+x, … , an+x. 49
TIN 062 Ondřej Čepek SOUČET(A, t) begin L 0 : = (0); { seznam délky 1 obsahující číslo 0 } for i : = 1 to n do Li : = MERGE(Li-1, Li-1 + xi); { MERGE slije oba seznamy, čísla větší než t zahodí } řešení : = největší prvek v Ln end. Věta: Seznam Li pro 1 ≤ i ≤ n je uspořádaný seznam obsahující součty všech podmnožiny A = {x 1, … , xn}, které jsou menší nebo rovny číslu t. Důkaz: indukcí podle i Časová složitost: • v každém případě O(|L 1| + … + |Ln|) • pokud jsou v seznamech drženy duplicitní hodnoty tak (v nejhorším případě) Ω(2 n) • ale pokud jsou duplicity v MERGE vyházeny, tak O(n t) • algoritmus je polynomiální pokud t ≤ p(n) nebo i: xi ≤ p(n) pro nějaký polynom p 2. Prořezávání seznamů Nechť je dáno 0 < d < 1. Prořezat seznam L parametrem d znamená odebrat z L co nejvíce prvků tak, že pro každý odstraněný prvek y existuje v prořezaném seznamu L’ 50 prvek z takový, že (1 - d) y ≤ z ≤ y.
PROŘEŽ(L, d) begin L’ : = (y 1); poslední : = y 1; for i : = 2 to |L| do if poslední < (1 -d)yi then begin L’ : = L’ { yi }; poslední : = yi end; return L’ end. Časová složitost: (|L|) TIN 062 Ondřej Čepek 3. ÚPAS pro SP Vstup: Množina přiroz. čísel A = {x 1, … , xn}, přirozené číslo t a aproximační parametr e. APPROX-SP(A, t, e) begin L 0 : = (0); { seznam délky 1 obsahující číslo 0 } for i : = 1 to n do begin. Li : = MERGE(Li-1, Li-1 + xi); { MERGE slije oba seznamy, čísla větší než t zahodí } Li : = PROŘEŽ (Li, e/n); end; řešení : = největší prvek v Ln end. 51 Časová složitost: (|L 1| + … + |Ln|)
TIN 062 Ondřej Čepek Myšlenka: Opakovaným prořezáváním se chyba může postupně zvětšovat, ale e/n je dostatečně malý „prořezávací parametr“, aby celková relativní chyba „nasčítaná“ přes n iterací byla nejvýše e. Věta: Algoritmus APPROX-SP je ÚPAS pro optimalizační úlohu SP. Značení: y* = optimální hodnota z = hodnota vrácená algoritmem APPROX-SP Cíl 1: Chceme ukázat, že (1 – e ) y* ≤ z ≤ y*. Lemma: Nechť y ≤ t je součet nějaké podmnožiny {x 1, … , xi}. Pak na konci i-té iterace algoritmu APPROX-SP existuje w Li (tj. w je v prořezaném seznamu Li) takové, že platí (1 – e/n)i y ≤ w ≤ y. Důsledek: Existuje w Ln takové, že (1 – e/n)n y* ≤ w ≤ y* a číslo z vrácené algoritmem APPROX-SP je největší takové w. Lemma: n > 1 platí (1 – e) < (1 – e/n)n a tudíž (1 – e ) y* ≤ z ≤ y* (Cíl 1 splněn). Cíl 2: Víme, že časová složitost APPROX-SP je (|L 1| + … + |Ln|) a chceme ukázat, že je také O(p(n, log t, 1/e)) pro nějaký polynom p ve třech proměnných. Lemma: i : |Li| ≤ (n ln t) / e Důsledek: Algoritmus APPROX-SP má časovou složitost O((n 2 log t) / e) (Cíl 2 splněn). 52
Početní úlohy TIN 062 Ondřej Čepek Rozhodovací problémy: ptáme se na existenci řešení (certifikátů) Početní úlohy: ptáme se na počet řešení (certifikátů) Nechť: Σ je abeceda na kódování zadání úlohy a Γ je abeceda na kódování certifikátů Definice: Funkce w : Σ* P(Γ*), kde P(Γ*) je potenční množina množiny Γ*, se nazývá certifikační funkce pro Σ a Γ. Každý prvek množiny y w(x) Γ* se nazývá certifikát pro zadání x Σ*. Rozhodovací problém Aw asociovaný s certifikační funkcí w je definován předpisem Aw = {x Σ* | w(x) ≠ }. Poznámka: V Aw jsou právě ta zadání, pro která existuje alespoň jeden certifikát, tj. pro která je odpověď na rozhodovací verzi daného problému ANO. Definice: Třída #P je množina certifikačních funkcí w takových, že 1) Existuje deterministický algoritmus, který pro každé x Σ* a y Γ* ověří v polynomiálním čase (vzhledem k |x| + |y|) jestli y w(x). 2) Existuje polynom p takový, že y w(x) : |y| ≤ p(|x|) (pro různá w různá p). 3) Věta (o vztahu #P a NP): NP a) Pokud w #P tak potom Aw NP. b) Pokud A NP tak potom w #P : A = Aw. 53
TIN 062 Ondřej Čepek Pozorování: Pokud w #P je taková, že x Σ* lze v polynomiálním čase spočítat |w(x)|, tak lze x Σ* v polynomiálním čase rozhodnout zda x Aw (tj. vyřešit asociovaný problém ze třídy NP) i zda x (P(Σ*) Aw) (tj. vyřešit doplňkový problém ze třídy co-NP). Důsledek: Početní úlohy (#SAT, #Klika, #SP …) odpovídající NPÚ rozhodovacím problémům (SAT, Klika, SP …) jsou alespoň tak těžké jako dané rozhodovací problémy. Otázka: Lze pro třídu #P zavést analogii polynomiálních transformací a úplnosti úloh ? ? Definice: Nechť w : Σ* P(Γ*) a v : Π* P(Δ*), jsou certifikační funkce z třídy #P. #P Polynomiální redukce z w na v je dvojice funkcí vyčíslitelných v polynomiálním čase : Σ* Π* a φ : N N takových, že x Σ* : |w(x)| = φ|v(σ(x))|. σ Terminologie: Pokud je funkce φ identita (tj. n N : φ(n) = n), tak se příslušná redukce nazývá šetrná. Definice: Certifikační funkce v je #P-úplná pokud (i) v #P a (ii) w #P existuje polynomiální redukce z w na v. Věta: #Kachlíkování je #P-úplná úloha. Důkaz: Vyplývá z důkazu Cook-Levinovy věty (ne zcela triviálně, trocha práce je nutná). Věta: #SAT je #P-úplná úloha. Důkaz: Vyplývá z transformace Kachlíkování SAT, která definuje šetrnou redukci. Věta: #3 -SAT, #Klika, #SP jsou #P-úplné úlohy. 54 Důkaz: Mírnými úpravami transformací dokazujících NP-úplnost získáme šetrné redukce.
TIN 062 Ondřej Čepek Víme: Pro w #P a x Σ* spočítat |w(x)| je alespoň tak těžké jako rozhodnout zda x Aw. Otázka: Existuje w #P, kde rozhodnout zda x Aw je lehké (řešitelné v polynomiálním čase x Σ*), ale spočítat |w(x)| je těžké (w je #P-úplná)? Nechť G = (U, V, E) je bipartitní graf kódovaný řetězcem x a nechť y w(x) pokud y kóduje perfektní párování v G. Potom Aw = { x | v x existuje perfektní párování } a platí: (i) Rozhodnout zda x Aw lze v polynomiálním čase ( x Σ*). (snadno lze ukázat) (ii) Spočítat |w(x)| je #P-úplná úloha. (o dost těžší, z časových důvodů bez důkazu) Definice: Permanent čtvercové matice A = (aij) velikosti n n je definován předpisem Perm(A) = σ Sn 1≤i≤n aiσ(i), kde Sn je cyklická grupa všech permutací řádu n. Pozorování: Permanent incidenční matice bipartitního grafu G = (U, V, E) (kde |U| = |V|) je přesně roven počtu perfektních párování v grafu G. Důsledek: Úloha spočítat permanent matice je #P-úplná i pro matice, které obsahují jako své prvky pouze čísla 0 a 1. 55
- Beskap iku asale saka tembung beschaafd kang tegese
- Jotp-062
- Ondej
- Introductioning
- Ondej
- Ondej
- Power interest grid examples
- Ondej
- Ondej
- Ondej
- Ondej
- Empirical formula mgo
- It's not paranoia if they're really out to get you
- Tin eye
- Chớ mang ách chung với kẻ chẳng tin
- Bài việt hang sơn đoòng tin học lớp 5
- Naturalia of partnership
- Kinh bởi trời tổng giáo phần hạ nơi
- Tin spreadbetting
- Yan oi tong tin ka ping primary school
- Tinthac net
- At tin
- Bàn tay tin cậy
- Tin eye
- Tin element electron configuration
- Từ muôn phương ta về đây sánh vai lên đường
- Properties of tin
- Tôi tin kính một thiên chúa là cha toàn năng
- Tôi tin kính một thiên chúa ba ngôi
- Does mercury have more protons and electrons than tin
- Kandungan surat at-tin
- Electron configuration house
- How many valence electrons are in tin
- Lạy chúa gie6su con tin tưởng nơi chúa
- Tin thac..net
- Tin thac.net
- Tin data model
- Tin 2 fluoride formula
- In my understanding
- Tin thac net
- Force and motion jeopardy
- Satuan tin
- Kinh tin kinh
- Income means
- Cations and anions list
- Biến đổi z
- Tin can monster exercise act
- If you whirl a tin can on the end of a string
- Libhcmussh
- Khi tình yêu con còn mơ tin yêu con dệt thơ
- Twinkle twinkle little star tin whistle
- I tin
- Các đơn vị đo thông tin
- Francium lewis dot structure
- Reverse image search
- Tin vs dem