Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
KAPITOLA 7. SLOŽITOST 160<br />
7.5.1 Polynomiální redukce<br />
Definice 7.5.1 Polynomiální redukce jazyka L 1 nad abecedou Σ 1 na jazyk L 2<br />
nad abecedou Σ 2 je funkce f : Σ ∗ 1 → Σ ∗ 2, pro kterou platí:<br />
1. ∀w ∈ Σ ∗ 1 : w ∈ L 1 ⇔ f(w) ∈ L 2<br />
2. f je Turingovsky vyčíslitelná v polynomiálním čase<br />
Existuje-li polynomiální redukce jazyka L 1 na L 2 , říkáme, že L 1 se redukuje<br />
na L 2 a píšeme L 1 ≤ m P L 2.<br />
Věta 7.5.1 Je-li L 1 ≤ m P L 2 a L 2 je ve třídě P , pak L 1 je ve třídě P .<br />
Důkaz. Nechť M f je Turingův stroj, který provádí redukci f jazyka L 1 na L 2 a<br />
nechť p(x) je jeho časová složitost. Pro libovolné w ∈ L 1 výpočet f(w) vyžaduje<br />
nanejvýš p(|w|) kroků a produkuje výstup maximální délky p(|w|) + |w|. Nechť<br />
M 2 přijímá jazyk L 2 v polynomiálním čase daném polynomem q(x). Uvažujme<br />
Turingův stroj, který vznikne kompozicí → M f M 2 . Tento stroj přijímá jazyk L 1<br />
tak, že pro každé w ∈ L 1 udělá stroj → M f M 2 maximálně p(|w|) + q(p(|w|) + |w|)<br />
kroků, což je polynomem ve |w| a tedy L 1 leží ve třídě P .<br />
✷<br />
Příklad 7.5.1 Funkce f : {x, y} ∗ → {x, y, z} ∗ definována jako f(v) = vzv je<br />
polynomiální redukcí jazyka L 1 = {w|w je palindrom nad {x, y}} na jazyk L 2 =<br />
{wzw R |w ∈ {x, y} ∗ }.<br />
Předchozí věta nám dává praktickou možnost jak ukázat, že určitý jazyk je ve<br />
třídě P. Navíc, přeformulujeme-li tuto větu takto: „Jestliže platí L 1 ≤ m P L 2 a L 1<br />
neleží v P , pak L 2 také neleží v P “, můžeme dokazovat, že určitý jazyk neleží v<br />
P .<br />
7.5.2 Problém splnitelnosti - SAT problém<br />
Nechť V = {v 1 , v 2 , . . . , v n } je konečná množina Booleovských proměnných (prvotních<br />
formulí výrokového počtu). Literálem nazveme každou proměnnou v i nebo<br />
její negaci v i . Klauzulí nazveme výrokovou formuli obsahující pouze literály spojené<br />
výrokovou spojkou ∨ (nebo).<br />
Příklady klauzulí: v 1 ∨ v 2 , v 2 ∨ v 3 , v 1 ∨ v 3 ∨ v 2 .<br />
SAT-problém lze formulovat takto: Je dána množina proměnných V a množina<br />
klauzulí nad V . Je tato množina klauzulí splnitelná?<br />
Každý konkrétní SAT-problém můžeme zakódovat jediným řetězcem takto:<br />
Nechť V = {v 1 , v 2 , . . . , v n }, každý literál v i zakódujeme řetězcem délky m, který<br />
obsahuje samé 0 s výjimkou i-té pozice, která obsahuje symbol p, jde-li o literál<br />
v i , nebo n, jde-li o literál v i . Klauzuli reprezentujeme seznamem zakódovaných<br />
literálů oddělených symbolem /. SAT-problém bude seznam klauzulí uzavřených<br />
v aritmetických závorkách.<br />
Příklad 7.5.2 SAT-problém obsahuje proměnné v 1 , v 2 , v 3 a klauzule v 1 ∨ v 2 , v 2 ∨<br />
v 3 , v 1 ∨ v 3 ∨ v 2 bude reprezentována řetězcem: (p00/0n0)(0p0/00p)(n00/00n/0p0)<br />
Označme L SAT jazyk obsahující řetězce tohoto typu, které reprezentují splnitelné<br />
množiny klauzulí. Řetězec (p00/0n0)(0p0/00p)(n00/00n/0p0) je prvkem L SAT<br />
(v 1 = F, v 2 = F, v 3 = T ), na rozdíl od řetězce (p00/0p0)(n00/0p0)(p00/0n0)