Algoritmy lze rozdělit do několika tříd složitosti na základě času a paměti, jež potřebují ke svému vykonání na různých typech Turingových strojů. Tříd složitosti existují stovky, tento článek představuje ty základní.
Turingův stroj
Turingův stroj je teoretický model počítače, který se skládá z nekonečné pásky rozdělené do buněk, řídící jednotky, která se může nacházet v konečně mnoha stavech a hlavy, která čte a přepisuje jednotlivé záznamy.
Formální popis
Formálně lze popsat Turingův stroj jako sedmici , kde je konečná množina stavů, je konečná množina vstupních symbolů, je konečná množina páskových symbolu (), je přechodová funkce, je počáteční stav, je blank a je konečná množina koncových stavů.
Počáteční situace a krok Turingova stroje
V počáteční situaci (před započnutím algoritmu) je na pásce umístěn v prvních n buňkách vstup algoritmu, zbytek pásky je vyplněn prázným symbolem B (blank). Hlava ukazuje na první buňku vstupu a řídící jednotka je v počátečním stavu.
Nyní Turingův stroj přečte první buňku, řekněme symbol X a na základě přechodové funkce přejde do následujícího stavu (p), přepíše tuto buňku symbolem daným touto funkcí (Y) a posune se o jedno místo na pásce (vlevo (L) nebo vpravo (R) dle přechodové funkce). Tato akce se zapisuje jako:
Řídící jednotka může zůstat ve svém původním stavu, což v automatu odpovídá smyčce. Pokud to povolíme, tak také hlava může zůstat na stejné pozici. Za předpokladu, že pro daný stav automatu neexistuje přechod, tak Turingův stroj havaruje (skončí neúspěchem). Výpočet končí úspěšně, když řídící jednotka přejde do konečného stavu. Symboly na pásce jsou výstupem algoritmu.
Příklad
Zkonstruujte Turingův stroj, který přijme slovo a na výstupu bude mít slovo .
Interpretace
Turingův stroj začíná ve stavu , jeho hlava čte první symbol. Pokud je tímto symbolem , tak jej přepíše na a přejde do stavu , pokud je čteným symbolem , tak jej přepíše na a přejde do stavu . Jednotlivé větve slouží jako pamět, do které stroj "ukládá" symbol, který má zapsat.
Ve stavech stroj přeiteruje všechny zbylé vstupní symboly. V okamžiku, kdy narazí na blank, tak jej přepíše oddělovacím symbolem a přejde do jednoho ze stavů . Dále podle toho, ve které je větvi, zapíše na konec pásky odpovídající "uložený" symbol, posune se doleva a přejde do stavu .
Nyní se stroj znovu přesune doleva přes uložený oddělovač a přejde do stavu , ve kterém přeiteruje na poslední zpracovaný znak vstupního slova (ten je nyní nebo ). Až tento znak nalezne, tak se pohne doprava, kde vybere první nepracovaný znak, přepíše jej na nebo (stav ) a analogicky s první částí stroje jej zapíše na první volnou pozici vpravo (první blank) - stavy , . Poté se stroj vrátí na první nepřenesený znak prvního slova (smyčka ve stavu , přechod do ).
V okamžiku, kdy jsou již všechny znaky přeneseny, zbývá pouze projít vstupní slovo (nyní složené ze symbolů a ) a převést jej zpět na posloupnost znaků a . Až stroj narazí na první blank vlevo, bude páska obsahovat zduplikované vstupní slovo oddělené symbolem .
Vícepáskový Turingův stroj
Turingův stroj může mít více než jednu pásku. V tomto případě má také více hlav, z nichž každá snímá odpovídající pásku. Přechodová funkce reaguje na stav Turingova stroje a na k symbolů na jednotlivých páskách. V počátečním stavu jsou všechny hlavy nastaveny na první pole odpovídajících pásek, první páska obsahuje vstupní slovo a blanky, zbylé pásky obsahují pouze blanky. Vícepáskový Turingův stroj je převoditelný na jednopáskový tak, že pokud vícepáskový stroj potřeboval je zpracování vstupu kroků, tak jednopáskový potřebuje kroků.
Třída P
Rozhodovací úloha U leží ve třídě P právě tehdy, když existuje Turingův stroj, který rozhodne jazyk v polynomiálním čase.
Příklady úloh z třídy P
- Nejkratší cesty: Existuje v acyklickém grafu mezi uzly a a b cesta, jejíž délka je nejvýše k?
- Minimální kostra: Existuje v grafu kostra, jejíž cena je maximálně rovna k?
Třída NP
Rozhodovací úloha U leží ve třídě NP právě tehdy, když existuje nedeterministický Turingův stroj (tj. Turingův stroj, jehož přechodová funkce umožňuje přejít z jednoho stavu pro daný vstup do více různých stavů), který rozhodne jazyk v polynomiálním čase.
Jednodušeji lze říct, že je algoritmus pro RAM v třídě NP, pokud lze jeho výsledek ověřit v polynomiálním čase.
Příklady úloh z třídy NP
- K-barevnost: Lze daný graf obarvit maximálně k barvami?
- Klikovost grafu: Existuje v grafu klika alespoň o k vrcholech?
Třída co-NP
Jazyk je ve třídě co-NP právě tehdy, když je doplněk tohoto jazyka v třídě NP. Zatímco u NP problémů existuje certifikát pro ANO-instanci, u úloh lze polynomiálně ověřit pouze NE-instanci.
Příklad úlohy z třídy co-NP
- Klikovost grafu (doplněk): Mají všechny kliky v grafu méně než k vrcholů?
- Jazyk obsahuje také všechna slova, která neodpovídají žádnému grafu.
Třída NPC
Úloha U je NP-úplná (NPC, NP-complete), pokud je je ve třídě NP a zárověn platí, že se na ní polynomiálně redukuje každá úloha z třídy NP. NP-úplné úlohy jsou ty „nejobtížnější“ ze všech NP úloh.
Polynomiální redukce
Polynomiální redukce úloh je převod instance úlohy na instanci úlohy takový, že platí:
- je ANO-instance právě tehdy, když je ANO-instance .
- Převod má polynomiální složitost.
Fakt, že se polynomiálně redukuje na značíme . Pokud pro dvě NP úlohy V a W platí, že, pak také platí:
- Pokud je V NP-úplná úloha, pak je také W NP-úplná úloha.
- Pokud je W v třídě P, pak je také V v třídě P.
Pokud se dala libovolná NP-úplná úloha řešit v polynomiálním čase, pak by platilo .
Příklady úloh z třídy NP
- Subset-sum problém
Třída co-NPC
Jazyk je ve třídě co-NPC právě tehdy, když je doplněk tohoto jazyka ve třídě NPC.
Příklad úlohy z třídy co-NPC
- CNF USAT (doplněk CNF SAT): Je daná CNF formule (v konjunktivním normálním tvaru) nesplnitelná?
- Jazyk kromě nesplnitelých formulí obsahuje také všechna slova, která nejsou formulemi.
Třída NP-hard
O úloze U řekneme, že je NP-obtížná (NP-hard, NP-těžká), pokud se na ní redukuje NP-úplná úloha, ale zároveň nevíme, jestli je v NP. Takováto úloha je minimálně stejně težká jako všechny NP-úplné úlohy.
Třídy PSPACE a NPSPACE
Jazyk L je ve třídě právě tehdy, když existuje deterministický Turingův stroj, který pracuje s polynomiální paměťovou složitostí (tj. nepoužije žádnou paměťovou buňku na indexu vyšším než ) a přijímá jazyk L.
Jazyk L je ve třídě právě tehdy, když existuje nedeterministický Turingův stroj, který pracuje s polynomiální paměťovou složitostí a přijímá jazyk L.
Bylo dokázáno, že a dále dle Savitchovy věty platí, že .
Randomizovaný Turingův stroj
Randomizovaný Turingův stroj obsahuje alespoň dvě pásky. První páska je totožná s běžným Turingovým strojem (v počátečním stavu obsahuje vstup a blanky). Druhá páska obsahuje náhodně rozmístěné nuly a jedničky (0 s pravděpodobností 50%, 1 s pravděpodobností 50%). Na tuto pásku nelze zapisovat.
Třída RP
Jazyk L patří do třídy RP (randomizovaně polynomiální) právě tehdy, když existuje randomizovaný Turingův stroj M takový, že:
- Pokud , tak M skončí v koncovém stavu s pravděpodobností .
- Pokud , tak M skončí v koncovém stavu s pravděpodobností .
- Pro každé w () potřebuje nejvýše kroků.
Algoritmy randomizovaného Turingova stroje, které splňují první dvě podmínky, se nazývají Monte Carlo.
Příklad třídy RP
Rabin-Millerův test přijímá složená čísla s pravděpodobností 75% a pro žádné prvočíslo neprohlásí, že je složené.
Třída ZPP
Jazyk L patří do třídy ZPP (Zero-error probabilistic polynomial time) právě tehdy, když existuje randomizovaný Turingův stroj M takový, že:
- Pokud , tak skončí neúspěšně.
- Pokud , tak skončí úspěšně.
- Střední doba počtu kroků M pro vstup délky n je .
Randomizovaný Turingův stroj splňující první dvě podmínky se nazývá Las Vegas.
Platí, že .
Literatura
- DEMLOVÁ, Marie. Teorie algoritmů : Text k přednášce.