Definice: Rozhodovací problém je funkce z množiny všech řetězců nad binární abecedou do množiny . Definice: Máme-li rozhodovací problémy tak lze převést na , když existuje funkce taková, že platí , navíc musí být spočitatelná v polynomiálním čase vzhledem ke vstupu . zveme převod nebo redukce.
vs
Definice: je třída rozhodovacích problémů, které jsou řešitelné v polynomiálním čase. leží v právě tehdy když existuje algoritmus a polynom , kde každý vstup algoritmu doběhne nejpozději v čase a vydá výsledek .
Definice: je třída problémů , které ji náleží právě, když existuje a polynom přičemž pro každý vstup je právě tehdy, pokud pro nějaké ne delší než , je
Jedná se tedy o třídu problémů, kde pro dosažení polynomiálního času řešení můžeme použít jakousi nápovědu maximálně polynomiálně dlouhou.
Příklad: Splnitelnost logických formulí (SAT) je v protože jako nápověda nám může posloužit ohodnocení proměnných.
Těžkost a úplnost
Definice: Problém je -těžký pokud je na něj převoditelný každý problém v . Pokud je takový problém navíc v , tak ho zveme -úplný.
Věta: SAT je -úplný
Převoditelnost
Seznam zajímavých -úplných problémů
- Logické problémy:
- SAT: splnitelnost logických formulí v CNF
- 3-SAT: každá klauzule obsahuje max. 3 literály
- 3,3-SAT: navíc se každá proměnná vyskytuje nejvýše třikrát
- SAT pro obecné formule: nejen v CNF (viz oddíl 19.4)
- Obvodový SAT: splnitelnost booleovského obvodu (viz oddíl 19.4)
- Grafové problémy:
- Nezávislá množina: existuje množina alespoň k vrcholů, mezi nimiž nevede žádná hrana?
- Klika: existuje úplný podgraf na k vrcholech?
- Barvení grafu: lze obarvit vrcholy k barvami (přidělit každému vrcholu číslo od 1 do k) tak, aby vrcholy stejné barvy nebyly nikdy spojeny hranou)? To je NP-úplné už pro k = 3.
- Hamiltonovská cesta: existuje cesta obsahující všechny vrcholy?
- Hamiltonovská kružnice: existuje kružnice obsahující všechny vrcholy?
- 3D-párování: máme tři množiny se zadanými trojicemi; zjistěte, zda existuje taková množina disjunktních trojic, ve které jsou všechny prvky právě jednou? (Striktně vzato, není to grafový problém, ale hypergrafový – hrany nejsou páry, ale trojice.)
- Číselné problémy:
- Součet podmnožiny: má daná množina přirozených čísel podmnožinu s daným součtem?
- Batoh: jsou dány předměty s váhami a cenami a kapacita batohu, chceme najít co nejdražší podmnožinu předmětů, jejíž váha nepřesáhne kapacitu batohu. Aby se jednalo o rozhodovací problém, ptáme se, zda existuje podmnožina s cenou větší nebo rovnou zadanému číslu.
- Dva loupežníci: lze rozdělit danou množinu čísel na dvě podmnožiny se stejným součtem?
- Ax = 1 (soustava nula-jedničkových lineárních rovnic): je dána matice . Existuje vektor takový, že Ax je rovno vektoru samých jedniček?
-
SAT 3‑SAT
- Každou klauzuli delší než 3 literály rozdělíme pomocí pomocných proměnných. Vzniknou klauzule velikosti 3. Převod v polynomiálním čase.
-
Nezávislá množina SAT
- Problém nezávislé množiny lze převést na SAT tím, že pro každý vrchol vytvoříme proměnnou a pro každou hranu klauzuli „ne oba konce současně vybrané“.
Převod Circuit‑SAT → SAT
1. Proměnné
- Pro každý vstup i vnitřní uzel (výstup hradla) zavedeme booleovskou proměnnou.
- Tj. každému vodiči v obvodu odpovídá proměnná.
2. Klauzule pro hradla
Každé hradlo nahradíme množinou klauzulí v CNF, které zachytí logický vztah mezi vstupy a výstupem hradla.
a) NOT
Brána: z = NOT x
Přidáme ekvivalentní CNF klauzule:
b) AND
Brána: z = x AND y
CNF klauzule:
c) OR
Brána: z = x OR y
CNF klauzule:
3. Fixace hodnot
- Pokud je některý vstupní vodič fixován (např. vstup má být 0), přidáme jednotkovou klauzuli:
- vstup = 0 → klauzule:
¬x
- vstup = 1 → klauzule:
x
- vstup = 0 → klauzule:
- Výstup obvodu (kořen) musí být 1 → klauzule:
z
, kdez
je výstupní proměnná.
4. Korektnost převodu
Každé hradlo je přeloženo do pevného počtu CNF klauzulí (nejvýše 3). Celkový počet proměnných a klauzulí je:
- lineární v počtu bran
- převod probíhá v polynomiálním čase Formule je splnitelná právě tehdy, když existuje vstup, pro který obvod vrací hodnotu 1.
Převod z 3‑SAT na 3‑COLORING
Konstrukce:
- Založíme výchozí trojici barev: TRUE, FALSE a BASE (spojovací).
- Pro každou proměnnou vytvoříme vrchol , propojený s vrcholy BASE a s jeho negací.
- Pro každou klauzuli vytvoříme klauzulový vrchol , který se připojí k vrcholům odpovídajícím literálům a k BASE.
- Dodáme hrany tak, že:
- musí mít barvu TRUE právě tehdy, když alespoň jeden literál je TRUE.
- Hrany mezi literály zajistí, že nesprávná kombinace barvitelných stavů neumožňuje obarvit graf 3 barvami, pokud klauzule není splněná.
Graf je 3‑obarvitelný existuje přiřazení proměnných, které formuli splňuje.
Převod z Ax = 1 (0‑1 matice) na Hamiltonovskou kružnici
Konstrukce:
- Pro každou proměnnou vytvoříme výběrový podgraf s možností 0 nebo 1.
- Pro každý řádek (rovnici) indexovanou vytvoříme uzel , který musí být dosažen právě jednou.
- Hrany mezi volbami v podgrafech a uzly vytvoříme tam, kde .
- Hamiltonovská kružnice může obejít právě ty segmenty, které odpovídají výběru , splňující všechny .
Graf má Hamiltonovskou kružnici právě když existuje řešení .