===== Zadání =====
2. Třídy výpočtové složitosti a vztahy mezi nimi
===== Vypracování =====
==== Základní pojmy ====
=== Časová složitost ===
T: N->N
NTS M má časovou složitost T(n) výpočet pro každý vstup x se zastaví pro nanejvýš max T(|x|) výpočetních kroků (nerozlišujeme akceptující a zamítající stavy).
=== Prostorová složitost ===
S: N->N
NTS M má prostorovou složitost S(n) v každém výpočtu v každém vstupu x je stroj operací max S(|x|) políček (zajímají nás políčka na pracovní pásce, ne samotný vstupní řetězec).
* regulární jazyk má nulovou prostorovou složitost
=== Prostorově konstruovatelná funkce ===
S(n) je prostorově konstruovatelná TS se vstupní a 1 pracovní páskou takový, že pro vstup délky n, označí na pracovní pásce přesně S(n) políček.
* např. c, n, log(n), f + g, f*g, n!,...
=== Komplement ===
Mějme jazyk L nad abecedou .
Mějme složitostní třídu C (množina jazyků).
co-DTIME(T(n))=DTIME(T(n)) *
co-DSPACE(S(n))=DSPACE(S(n)) *
* změníme akceptující a zamítající stavy
co-NTIME(T(n)) = ? ... jestli není uzavřeno na komplement P NP
co-NSPACE(S(n)) = NSPACE(S(n))
=== Uzavřenost ===
Deterministické složitostní třídy jsou uzavřené na
U nedeterministických je otevřenost na komplement otevřeným problémem.
==== Složitostní třídy ====
= množiny jazyků, které jsou rozhodované se složitostí ohraničenou danou funkcí
* DTIME(T(n)) = {L(M)| M je DTS s časovou složitostí T(n)}
* NTIME(T(n)) = {L(M)| M je NTS s časovou složitostí T(n)}
* DSPACE(S(n)) = {L(M)| M je DTS s prostorovou složitostí T(n)}
* NSPACE(S(n)) = {L(M)| M je NTS s prostorovou složitostí T(n)}
==== Vztahy mezi složitostními třídami ====
Je možno dosáhnout konstantního zrychlení za cenu nárustu potřebné paměti.
=== Determinismus je speciálním případem nedeterminismu: ===
důsledek:
=== Vztahy mezi časem a prostorem: ===
- prostor je vždy omezen potřebným časem
- nechť S(n) >= log(n)
-
-
-
-
Idea důkazu pro 3. a 4.((viz. Vyčíslitelnost a složitost slidy č.9. str.5)):
DTS pracující v prostoru S(n) může být upraven tak, aby skončil po krocích a přitom akceptoval stejný jazyk.
=== pro S(n) ≥ log(n) platí: ===
* Idea důkazu: převod NTS na DTS prostřednictvím simulace každé konfigurace a následné procházení grafem, jehož velikost odpovídá počtu konfigurací. Akceptujeme, jakmile narazíme na akceptující konfiguraci.
* Konstrukce grafu dosažitelných konfigurací: vrcholy stromu představují konfigurace (stavy) a hrana představuje přechod jedním krokem.
=== Sawitchova věta ===
- nechť
* Konstrukce používá pro simulaci rekurzivní proceduru pro hledání cesty (výpočtu) mezi dvěma konfiguracemi simulovaného stoje.
* Důsledek: PSPACE = NSPACE
=== Immerman - Szelepcsénejiho věta ===
Idea důkazu:
* Předpokládáme, že S je prostorově konstruovatelná
* Předpokládáme, že máme konečnou množinu řetězců A, nedeterministický test příslušnosti do množiny A, známe mohutnost |A| a můžeme si pamatovat maximální délku => z tohoto je možno vytvořit nedet. test pro NEpříslušnost do A ( akceptující výpočet -- akceptuje, když tam nepatří ):
- Nedeterministicky uhádneme |A| řetězců
- Pro každý zvolený řetězec nedeterministicky ověříme, zda .
- Pokud všechny zvolené řetězce patří do A a x není mezi nimi, platí .
==== Seperace složitostních tříd ====
Je hirearchie nekonečná? Existuje dolní mez složitosti?
=== DSPACE ===
* pro deterministické složitostní třídy
* **Metoda diagonalizace**
* Věta: Nechť S(n) je prostorově konstruovatelná funkce, pak jazyk takový, že pro žádno funkci S'(n) = o(S(n)) (těsná hirearchie - f-ce rostoucí asymptoticky pomaleji než S(n)).
=== DTIME ===
* Věta: Nechť T(n) je časově konstruovatelná funkce, pak jazyk takový, že pro žádno funkci T'(n) takové, že .
=== NSPACE ===
* pro nedeterministické složitostní třídy
* **Metoda padding **
* Věta:
==== P-úplné problémy ====
=== CVP (Circuit Value Problem)===
Problém hodnoty logického obvodu
=== Náležitost řetězce do jazyka bezkontextové gramatiky ===
=== RELPRIME ===
{ | x a y jsou relativní prvočísla} (2 čísla jsou relativní prvočísla -- také nesoudělná čísla -- když jejich NSD je roven 1), v P vypočítáme například pomocí Euklidova algoritmu
==== Polynomiální redukce ====
Jazyk **A** se **polynomicky redukuje** na jazyk **B**, existuje zobrazení takové, že pro každý řetězec a R je polynomiálně vyčíslitelná.
* Funkce je **polynomiálně vypočitatelná ** polynomiálně časově ohraničený TS, který pro vstup w délky n ukončí výpočet v konfiguraci, ve které na pracovní pásce bude zaúsaný řetězec f(w). (dá se vypočítat v polynomiálním čase)
*3SAT: Obdoba SAT, ale každá formule má právě 3 členy
* Jestli , tak i . (Problém A je právě tak složitý jako problém B, pokud B se dá redukovat na A)
* Relace je reflexivní a transitivní (kvaziuspořádání).
- reflexivita - libovolný problém dokážeme převést na ten stejný problém v polynomickém čase
- transitivita - pokud máme alg. //**f**// který redukuje problém //**A**// na problém //**B**// a algoritmus //**g**// který redukuje problém //**B**// na problém //**C**//, pak máme i algoritmus, který převede //**A**// na //**C**// (tím že na problém použijeme nejprve algoritmus //**f**// a následně //**g**//, pokud jejich složitost byla polynomická, bude i výsledná složitost součtem dvou polynomických složitostí, t.j. také polynomická
Jazyk L nazveme **C-těžký** vzhledem k polynomiální redukci pr složitostní třídu C jazyky platí: (každý jazyk A z L se dá redukovat na C). Jestli navíc , tak L nazýváme **C-úplný**(C těžký jazyk nemusí patřit do třídy C).
* Jestli nějaký NP-úplný problém patří do P, tak P=NP
* Jestli , pak žádný NP-ťažký problém není řešitelný v polynomiálním čase
==== NP-úplné problémy ====
=== SAT (Cook-Levinova věta) ===
VSTUP: výroková formule **F** v CNF.
Formule **F** je splnitelná, jestliže existuje přiřazení hodnot 0,1 proměnným ve výrokové formuli tak, že je formule pravdivá (1).
OTÁZKA: Je **F** splnitelná?
* Idea důkazu NP-úplnosti SAT: Nechť //**M**// je nedeterministický TS takový, že //**L(M) = A**//. Nechť //**w**// je vstupní slovo pro //**M**//. Sestrojíme výrokovou formuli //**X**// takovou, že //**M**// akceptuje //**w**// právě, když //**X**// je splnitelná. Konstrukce formule //**X**// bude polynomická.
=== k-CLIQUE ===
VSTUP: neorientovaný graf
OTÁZKA: obsahuje G kliku o k vrcholech?
* SAT k-CLIQUE
Klika v neorientovaném grafu je podgraf takový, že existuje hrana mezi každými dvěma uzly. k-klika je klika, která má k vrcholů
=== HAM-PATH ===
VSTUP: neorientovaný graf
OTÁZKA: najít Hemiltovskou cestu
* SAT HAM-PATH
=== TSP ===
Problém obchodního cestujícího.
=== SUBSET-SUM ===
* 3-SAT SUBSET-SUM
=== k-ZABARVENÍ GRAFU ===
- pro
- k=2 - zabarvitelný 2 barvami => je bipartitní (nemá cyklus liché délky) -- v čase polynomiálním prohledáváním do hloubky (šířky)
=== Vrcholové/Množinové pokrytí ===
=== Nezávislá množina ===
=== Celočíselné lineární programování ===
=== Problém rozvrhu ===
==== Logaritmická redukce ====
Jazyk **A** se **logaritmicky redukuje** na jazyk **B**, existuje zobrazení takové, že pro každý řetězec a R je konstruovatelná v logaritmickém prostoru.
* Zobrazení je **log-space konstruovatelné** DTS se 3 páskami (vstupní, pracovní, výstupní) takový, že pro vstup w vypočítá hodnotu R(w) v prostoru log(|w|).
* Jestli , tak i .
* jestli NLOG-úplný problém patří do DLOG, tak DLOG=NLOG.
==== LOG-úplné problémy====
=== PATH ===
- problém cesty (existuje cesta mezi dvěma vrcholy v neorientovaném grafu?)
* existence cesty mezi dvěma vrcholy v orientovaném grafu patří do NLOG-úplných problémů. (stejně jako 2-SAT)
==== PSPACE-úplné problémy ====
=== QFB ===
Quantified Boolean Formula - formule predikátové logiky
=== Hra dvou hráčů ===
Jeden hráč se snaží zvítězit tak, že vybírá univerzálně kvantifikované proměnné tak, aby druhý hráč nemohl zvolit žádný existenčně kvantifikovaný prvek.
===== Předměty =====
* [[https://is.muni.cz/auth/predmet/fi/IB107|IB107 Vyčíslitelnost a složitost]]
* [[https://is.muni.cz/auth/predmet/fi/IA012|IA012 Složitost]]
===== Zdroje =====
* [[https://complexityzoo.uwaterloo.ca/Complexity_Zoo|Complexity ZOO]] (especially [[https://complexityzoo.uwaterloo.ca/Petting_Zoo|Petting ZOO]])
~~DISCUSSION~~