+ All Categories
Home > Documents > Složitost I

Složitost I

Date post: 24-Feb-2016
Category:
Upload: gustav
View: 44 times
Download: 0 times
Share this document with a friend
Description:
Složitost I. TIN062 Ondřej Čepek. Sylabus. 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 - PowerPoint PPT Presentation
55
TIN062 Ondřej Čepek Složitost I TIN062 Ondřej Čepek
Transcript
Page 1: Složitost I

TIN062 Ondřej Čepek

Složitost I

TIN062

Ondřej Čepek

Page 2: Složitost I

2

TIN062 Ondřej Čepek

Sylabus1. Prostředky pro popis složitosti algoritmů2. Hladové algoritmy a souvislost s matroidy3. Grafové algoritmy – pokročilejší aplikace DFS a BFS4. DTS, NTS, prostorová a časová složitost jazyků5. Třídy P a NP, polynomiální transformace6. NP-úplnost, příklady NPÚ problémů a transformací

mezi nimi7. Pseudopolynomiální algoritmy, silná NP-úplnost8. PSPACE versus NPSPACE, Savičova věta9. Aproximační algoritmy a aproximační schémata pro

NP-těžké optimalizační úlohy10. Třída #P, #P-úplné úlohy11. (Pravděpodobnostní algoritmy – bude-li čas)

Page 3: Složitost I

3

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

Page 4: Složitost I

4

TIN062 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 a1, a2, … , an která je třeba setřídit

velikost dat D v binárním zápisu je |D| = log2 a1 + … + log2 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í, …)

Page 5: Složitost I

5

TIN062 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 a1, a2, … , 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č …

Page 6: Složitost I

6

TIN062 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.1ms 0.5ms 1ms

n log n 86μs 0.2ms 0.35ms 0.5ms 0.7ms 4.5ms 10ms

n2 0.4ms 1.6ms 3.6ms 6.4ms 10ms 0.25s 1s

n3 8ms 64ms 0.22s 0.5s 1s 125s 17min

2n 1s 11.7dní 36tis.let

n! 77tis.let

Page 7: Složitost I

7

TIN062 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 100 krát 1000 krát

n x 10x 100x 1000x

n log n x 7.02x 53.56x 431.5x

n2 x 3.16x 10x 31.62x

n3 x 2.15x 4.64x 10x

2n x x+3 x+6 x+9

Page 8: Složitost I

8

TIN062 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)), pokudc>0 n0>0 n≥n0 : 0 ≤ f(n) ≤ c g(n)

f(n) je asymptoticky větší nebo rovno g(n), značíme f(n) Ω(g(n)), pokudc>0 n0>0 n≥n0 : 0 ≤ c g(n) ≤ f(n)

f(n) je asymptoticky stejné jako g(n), značíme f(n) (g(n)), pokudc>0 d>0 n0>0 n≥n0 : 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)), pokudc>0 n0>0 n≥n0 : 0 ≤ f(n) ≤ c g(n)

f(n) je asymptoticky ostře větší než g(n), značíme f(n) ω(g(n)), pokudc>0 n0>0 n≥n0 : 0 ≤ c g(n) ≤ f(n)

Page 9: Složitost I

9

TIN062 Ondřej ČepekHladové Algoritmy

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ý podgraf grafu 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.

Page 10: Složitost I

10

TIN062 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žin množiny S (nezávislých podmnožin množ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).

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.

Page 11: Složitost I

11

TIN062 Ondřej Čepek

Definice: Matroid M=(S,I) je vážený pokud je dána váhová funkce w : S R+ a její přirozené rozšíření na podmnožiny S je dáno předpisem A S: w(A) = xAw(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é eSG 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 podle neklesajících lhůt dokončení (při shodě rozhoduje například číslo úkolu).

Page 12: Složitost I

12

TIN062 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žin množ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.

Page 13: Složitost I

13

TIN062 Ondřej ČepekHladový algoritmus pro MP

Nechť je dán matroid M=(S,I), kde S={x1, … ,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(x1)=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ť xS takový, že {x} I. Potom neexistuje AI taková, že xA.

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 AI taková, že xA.

Page 14: Složitost I

14

TIN062 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

Page 15: Složitost I

15

TIN062 Ondřej ČepekHladový algoritmus pro Problém 3

Nechť S={1,2, … ,n} je množina úkolů, s1, … ,sn N+ jsou časy zahájení a f1, … ,fn N+ jsou časy dokončení (kde si ≤ fi).

GREEDY-SELECT(s,f);A := ; f0 := 0; j := 0;setřiď a přeznač pole s a f vzestupně podle časů dokončení fi {tj. f1=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 | f1 ≤ 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.

Page 16: Složitost I

16

TIN062 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 uV 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á thenbegin 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 ADS1):

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)

Page 17: Složitost I

17

TIN062 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ímDFS(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)

endelse 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 zůstane lineární ((n+m)), ale algoritmus bude „plnit“ podstatně složitější úkol.

Page 18: Složitost I

18

TIN062 Ondřej Čepek

Testování 2-souvislosti neorientovaného grafu

Definice: Nechť G=(V,E) je souvislý neorientovaný graf. Pak

1. Vrchol vV 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ů)

Důsledek 1: vV je artikulace grafu G x,y V, x y takové, že každá cesta v G mezi x a y prochází vrcholem v

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)

Algoritmy na testování 2-souvislosti:

1. 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í DFSv čase (n+m) = (m) rozhodne o 2-souvislosti a zároveň označí všechny artikulace a 2-souvislé komponenty pomocí jediného spuštění „obohaceného“ DFS

Page 19: Složitost I

19

TIN062 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á }

Page 20: Složitost I

20

TIN062 Ondřej ČepekJak spočítat low[i] ?

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)

Page 21: Složitost I

21

TIN062 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) endend;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;barva[i]:=černá;

end;

Page 22: Složitost I

22

TIN062 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

endelse if barva[j]=šedá

then begin ohlas nalezení cyklu;označ (i,j) jako zpětnou

endelse if d[i] < d[j]

then označ (i,j) jako dopřednouelse označ (i,j) jako příčnou

barva[i]:=černá; čas:=čas+1; f[i]:=časend;

Page 23: Složitost I

23

TIN062 Ondřej ČepekRovinné grafy - terminologie:

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

Page 24: Složitost I

24

TIN062 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| 4n

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

Page 25: Složitost I

25

TIN062 Ondřej Čepek

Preprocessing

Zkonstruujeme rovinné vnoření grafu G (lze v linearním čase), vybereme libovolné s Va provedeme BFS(G) z vrcholu s. Toto BFS rozdělí V do vrstev L0, … ,Lq, kde L0 = {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 Li1. Z toho plyne, že i: Li je separátor oddělující A = L0 … 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 4n tak jsme hotovi. Proto předpokládejme zt > 4n.

Lemma 3: Existují indexy v < t a w > t takové, že zv n, zw n a (w – v) n.

Značení: C = L0… Lv-1, D = Lv+1… Lw-1, E = Lw+1… Lq (víme |C|<n/2, |E| <n/2)

Pozorování: Pokud platí |D| 2n/3 tak jsme hotovi. Proto předpokládejme |D| > 2n/3.

Plán pro jádro důkazu:

Nalezneme separátor S’ velikosti 2n 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.

Page 26: Složitost I

26

TIN062 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 2n (T má průměr 2n).

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

Page 27: Složitost I

27

TIN062 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říčkamia) 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 2n’/3 a n’– (Ue + De) 2n’/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.

Page 28: Složitost I

28

TIN062 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 L0, … ,Lq+1

3. Najdi „prostřední“ vrstvu Lt a pokud zt 4n tak KONEC (S = Lt, A = L0… 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 = L0… Lv-1, D = Lv+1… Lw-1, E = Lw+1… Lq . Pokud |D| 2n/3 tak KONEC (S = LvLw, 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 2n.

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 eT* spočti Ue, De, Ce.

9. Najdi příčku pro kterou platí Ue 2n’/3 a n’– (Ue + De) 2n’/3 . KONEC Nechť S’ = Ce \ {s}, X = Ue, Y = V’’ \ {Ue Ce}, kde Ue představuje množinu vrcholů. (S= LvLwS’, A= větší z {X,Y} menší z {C,E}, B= menší z {X,Y} větší z {C,E})

Každý krok trvá O(n+m) a tedy celkově algoritmus trvá (n+m).

Page 29: Složitost I

29

TIN062 Ondřej ČepekÚlohy, optimalizační úlohy, rozhodovací problémy

Ú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 a1, … ,an a dále přirozené číslo b. Existuje S {1, … ,n} takové, že ΣiSai = b?

Page 30: Složitost I

30

TIN062 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 vzhledem k |x| (tento test lze považovat za jakýsi „preprocessing“)

Page 31: Složitost I

31

TIN062 Ondřej ČepekDeterministický Turingův Stroj (DTS)

DTS je abstraktní stroj definovaný pěticí (Q, Σ, δ,q0,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 q0 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 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 q0 + 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 hlav (lze i zůstat na místě)

Page 32: Složitost I

32

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

Page 33: Složitost I

33

TIN062 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)}

PSPACEPSPACE = i≥0 DSPACE(ni) PP = i≥0 DTIME(ni)

Page 34: Složitost I

34

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

Page 35: Složitost I

35

TIN062 Ondřej ČepekProstorová složitost výpočtu NTS

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

NPSPACENPSPACE = i≥0 NSPACE(ni) NPNP = i≥0 NTIME(ni)

Page 36: Složitost I

36

TIN062 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 1n (n znaků na vstupní pásce). dává výstup 1f(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 1n udělá nejvýše cf(n) kroků než vydá výstup 1f(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 1n použije nejvýše cf(n) buněk na pracovních páskách než vydá výstup 1f(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ě konstruovatelná.

Page 37: Složitost I

37

TIN062 Ondřej ČepekNP-těžkost a NP-úplnost

Definice: Funkce f : {0,1}* {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 NPNP : 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 NPNP.

Definice: Problém P je co-NP-těžký tehdy a jen tehdy, když Q co-NPco-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-NPco-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 pro problém splnitelnosti booleovských formulí zadaných v KNF, my použijeme jiný rozhodovací problém.

Page 38: Složitost I

38

TIN062 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 NP – to je zřejmé

2) Kachlíkování je NP-těžké – dokážeme z definice třídy NPNP

Nechť RNPNP libovolný a nechť M je NTS program rozpoznávající L(R)Y v čase shora omezeném polynomem p (tj. xL(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 qY 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

Page 39: Složitost I

39

TIN062 Ondřej ČepekSplnitelnost (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ý podgraf grafu G?Věta: KL je NP-úplný.Důkaz: Transformace SAT KL.

Page 40: Složitost I

40

TIN062 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 Z0

+ , 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.

Page 41: Složitost I

41

TIN062 Ondřej Čepek

Součet Podmnožiny (SP):Zadání: Čísla a1, … ,an, b Z+.Otázka: Existuje množina indexů S {1, … ,n}, taková, že ΣiSai = b?Věta: SP je NP-úplný.Důkaz: Transformace VP SP.

Algoritmus pro SP: předpokládejme, že platí a1 ≥ … ≥ an , a že A je pole délky b.

for j := 1 to b do {A[j] := 0; a0 := 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žin množiny {a1, … ,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í.

Page 42: Složitost I

42

TIN062 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 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é)

Page 43: Složitost I

43

TIN062 Ondřej ČepekSilně NP- úplné problémy

Nechť je Q rozhodovací problém a p polynom. Symbolem Qp označíme množinu instancí problému Q (tj. podproblém problému Q), pro které platí max(X) p(kód(X)), tj.

Qp = {XQ | 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 NPNP 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 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í: a1, … , a3m, b N, taková že j : ¼ b < aj < ½ b a platí Σj=13m aj = mb.

Otázka: S1, … ,Sm disjunktní rozdělení množiny {1, … ,3m} takové, že i : Σj Si aj = b?

Page 44: Složitost I

44

TIN062 Ondřej Čepek

Vztah determinismu a nedeterminismu pro 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(cS2(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 2dS(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 2dS(n)

Označme: (K1,K2,i) pokud lze z konfigurace K1 K přejít do konfigurace K2 K pomocí nejvýše 2i 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 ≤ dS(n).

Simulace práce NTS M na vstupu w délky n na DTS pro iniciální konfiguraci K0 K a každou přijímající konfiguraci Kp K proveď : if TEST(K0,Kp,dS(n)) then přijmi w, kde TEST je procedura implementovaná na DTS

TEST(K1,K2,i)if (i=0) and ((K1=K2) or (z K1 lze přejít jedním krokem do K2)) then return TRUE;if (i>0) then for K K do if TEST(K1,K,i -1) and TEST(K,K2,i -1) then return TRUE;return FALSE

Platí: simulace na DTS proběhne v prostoru cS2(n).

Důsledek: PSPACE = NPSPACEPSPACE = NPSPACE

Page 45: Složitost I

45

TIN062 Ondřej Čepek

Aproximační algoritmy

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

Odhad kvality vráceného řešení

Značení: OPT = optimální řešení

APR = řešení vrácené aproximačním algoritmem

f(Z) = hodnota řešení Z (předpokládáme, že je vždy nezáporná)

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í

max { f(APR) / f(OPT) , f(OPT) / f(APR) } r(n).

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í

|f(APR) f(OPT)| / f(OPT) e(n).

Page 46: Složitost I

46

TIN062 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 kardinalitu.

Page 47: Složitost I

47

TIN062 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)??

Page 48: Složitost I

48

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

2. Obchodní cestující bez trojúhelníkové nerovností

Věta: Nechť R 1 je libovolná konstanta. Potom pokud P P NP NP, tak neexistuje polynomiální aproximační algoritmus řešící obecný případ obchodního cestujícího s poměrovou chybou nejvýše R.

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

Page 49: Složitost I

49

TIN062 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 = {x1, … ,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

Značení: Nechť L je uspořádaný seznam přirozených čísel a1, … ,an. Pak L+x, kde x je přirozené číslo je uspořádaný seznam přirozených čísel a1+x, … ,an+x.

Page 50: Složitost I

50

TIN062 Ondřej Čepek

SOUČET(A,t)begin L0 := (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žin množiny A = {x1, … ,xn}, které jsou menší nebo rovny číslu t.

Důkaz: indukcí podle i

Časová složitost:

• v každém případě O(|L1| + … + |Ln|)

• pokud jsou v seznamech drženy duplicitní hodnoty tak (v nejhorším případě) Ω(2n)

• ale pokud jsou duplicity v MERGE vyházeny, tak O(nt)

• 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’ prvek z takový, že (1 - d) y ≤ z ≤ y.

Page 51: Složitost I

51

TIN062 Ondřej ČepekPROŘEŽ(L,d)begin L’ := (y1);

poslední := y1;for i := 2 to |L| do if poslední < (1-d)yi thenbegin L’ := L’ { yi };

poslední := yi

end;return L’

end.Časová složitost: (|L|)

3. ÚPAS pro SPVstup: Množina přiroz. čísel A = {x1, … ,xn}, přirozené číslo t a aproximační parametr e.APPROX-SP(A,t,e)begin L0 := (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.Časová složitost: (|L1| + … + |Ln|)

Page 52: Složitost I

52

TIN062 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 množiny {x1, … ,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 (|L1| + … + |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((n2 log t) / e) (Cíl 2 splněn).

Page 53: Složitost I

53

TIN062 Ondřej ČepekPočetní úlohy

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

Věta (o vztahu #P#P a NPNP):

a) Pokud w #P#P tak potom Aw NNPP..

b) Pokud A NNPP tak potom w #P#P : A = Aw..

Page 54: Složitost I

54

TIN062 Ondřej Čepek

Pozorování: Pokud w#P#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 xAw (tj. vyřešit asociovaný problém ze třídy NNPP) i zda x(P(Σ*) \ \ Aw) (tj. vyřešit doplňkový problém ze třídy co-Nco-NPP).

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#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 a φ : N N takových, že xΣ* : |w(x)| = φ|v(σ(x))|..

Terminologie: Pokud je funkce φ identita (tj. nN : φ(n) = n), tak se příslušná redukce nazývá šetrná.

Definice: Certifikační funkce v je #P--úplná pokud (i) v#P#P a (ii) w#P#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.Důkaz: Mírnými úpravami transformací dokazujících NP-úplnost získáme šetrné redukce.

Page 55: Složitost I

55

TIN062 Ondřej Čepek

Víme: Pro w#P a xΣ* spočítat |w(x)| je alespoň tak těžké jako rozhodnout zda xAw.

Otázka: Existuje w#P, kde rozhodnout zda xAw 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ť yw(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 xAw 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 nn 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.


Recommended