Turingův stroj (MT) je abstraktní exekutor (abstraktní počítač). To bylo navrženo Alanem Turingem v roce 1936 formalizovat koncept algoritmu .
Turingův stroj je rozšířením konečného automatu a podle Church-Turingovy teze je schopen simulovat všechny vykonavatele (nastavením přechodových pravidel), které nějakým způsobem implementují proces výpočtu krok za krokem, ve kterém je každý krok výpočtu docela základní.
To znamená, že pomocí nějakého Turingova stroje lze implementovat jakýkoli intuitivní algoritmus [1] .
Složení Turingova stroje zahrnuje pásku neomezenou v obou směrech (jsou možné Turingovy stroje, které mají několik nekonečných pásek), rozdělenou do buněk [2] [3] , a ovládací zařízení (také nazývané zapisovací-čtecí hlava ( GZCH ) ), schopný být v jednom z mnoha stavů . Počet možných stavů řídicího zařízení je konečný a přesně daný.
Ovládací zařízení se může pohybovat po pásce doleva a doprava, číst a zapisovat do buněk znaky nějaké konečné abecedy. Je přidělen speciální prázdný symbol, který vyplní všechny buňky na pásce, kromě těch z nich (konečné číslo), na které se zapisují vstupní data.
Řídicí zařízení pracuje podle přechodových pravidel , která představují algoritmus implementovaný daným Turingovým strojem. Každé přechodové pravidlo dává stroji pokyn, v závislosti na aktuálním stavu a symbolu pozorovaném v aktuální buňce, zapsat nový symbol do této buňky, přejít do nového stavu a přesunout jednu buňku doleva nebo doprava. Některé stavy Turingova stroje lze označit jako terminální a přechod na kterýkoli z nich znamená konec práce, zastavení algoritmu.
Turingův stroj je považován za deterministický , pokud každá kombinace symbolu státu a stuhy v tabulce odpovídá nejvýše jednomu pravidlu. Pokud existuje pár „symbol páska-stav“, pro který existují 2 nebo více instrukcí, nazývá se takový Turingův stroj nedeterministický .
Konkrétní Turingův stroj je specifikován výčtem prvků množiny písmen abecedy A, množiny stavů Q a množiny pravidel, podle kterých stroj funguje. Mají tvar: q i a j →q i1 a j1 d k (pokud je hlava ve stavu q i , a ve sledované buňce je napsáno písmeno a j , pak hlava přejde do stavu q i1 , a Do buňky se zapíše j1 místo a j , hlava udělá pohyb d k , který má tři možnosti: buňka doleva (L), buňka doprava (R), zůstat na místě (N)). Pro každou možnou konfiguraci <q i , a j > existuje právě jedno pravidlo (pro nedeterministický Turingův stroj může být pravidel více). Neexistují žádná pravidla pouze pro konečný stav, ve kterém se stroj jednou zastaví. Kromě toho musíte určit počáteční a koncový stav, počáteční konfiguraci na pásce a umístění hlavy stroje.
Příklad Turingova stroje pro násobení čísel v unární číselné soustavě . Záznam pravidla „q i a j →q i1 a j1 R/L/N“ je třeba chápat takto: q i je stav, ve kterém se toto pravidlo provádí, a j je údaj v buňce, ve které je hlavička nachází, q i1 je stav, do kterého chcete přejít, a j1 - to, co potřebujete zapsat do buňky, R / L / N - příkaz k přesunu.
Stroj funguje podle následujících pravidel:
q0 _ | q 1 | q2 _ | q 3 | q 4 | q 5 | q 6 | q 7 | q 8 | |
---|---|---|---|---|---|---|---|---|---|
jeden | q 0 1→q 0 1R | q11 → q2aR _ _ | q 2 1→q 2 1L | q 3 1 → q 4 aR | q 4 1→q 4 1R | q 7 1 -> q 2 aR | |||
× | q 0 ×→q 1 × R | q2 ×→ q3 × L | q4 ×→ q4 × R | q6 ×→ q7 × R | q8 ×→ q9 × N | ||||
= | q 2 \u003d→q 2 \u003d L | q 4 \u003d→ q 4 \u003d R | q 7 \u003d→ q 8 \u003d L | ||||||
A | q 2 a→q 2 aL | q 3 a→q 3 aL | q4a → q4aR _ _ | q 6 a→q 6 1R | q7a → q7aR _ _ | q 8 a→q 8 1L | |||
* | q 0 *→q 0 *R | q3 *→ q6 * R | q 4 *→q 5 1R | ||||||
q 5 →q 2 *L |
Popis stavů:
Start | |
q0 _ | výchozí stav. Hledáme "x" vpravo. Po nalezení přejděte do stavu q1 |
---|---|
q 1 | nahraďte "1" za "a" a přejděte do stavu q2 |
Přeneste všechny "1" z prvního čísla do výsledku | |
q2 _ | hledat "x" vlevo. Po nalezení přejděte do stavu q3 |
q 3 | hledejte "1" vlevo, nahraďte jej "a" a přejděte do stavu q4.
Pokud "1" skončí, najděte "*" a přejděte do stavu q6 |
q 4 | přejděte na konec (hledejte "*" vpravo), nahraďte "*" za "1" a přejděte do stavu q5 |
q 5 | přidejte "*" na konec a přejděte do stavu q2 |
Zpracujeme každou číslici druhého čísla | |
q 6 | hledáme "x" vpravo a přejdeme do stavu q7. Při hledání nahraďte „a“ „1“ |
q 7 | hledáte "1" nebo "=" vpravo,
když je nalezena "1", nahradíme ji "a" a přejdeme do stavu q2 při nalezení "=" přejděte do stavu q8 |
Konec | |
q 8 | hledat "x" vlevo. Po nalezení přejděte do stavu q9. Při hledání nahraďte „a“ „1“ |
q9 _ | koncový stav (zastavení algoritmu) |
Vynásobte pomocí MT 3 x 2 v systému jednotek. Protokol uvádí počáteční a konečný stav MT, počáteční konfiguraci na pásce a umístění hlavy stroje (podtržený symbol).
Start. Jsme ve stavu q 0 , do stroje jsme zadali údaje: *111x11=*, hlava stroje je umístěna na prvním znaku *.
1. krok. Podíváme se na tabulku pravidel, co bude stroj dělat, když je ve stavu q 0 a nad symbolem „*“. Toto pravidlo je z 1. sloupce 5. řádku - q 0 *→q 0 *R. To znamená, že přejdeme do stavu q 0 (tedy neměníme), symbol se změní na „*“ (tedy se nemění) a posuneme se po zadaném textu „*111x11=*“. vpravo o jednu pozici (R), pak je pro 1. znak 1. Stav q 0 1 (1. sloupec 1. řádek) je zase zpracováván pravidlem q 0 1→q 0 1R. To znamená, že je zde opět jen přechod doprava o 1 pozici. To se děje, dokud se nepostavíme na symbol „x“. A tak dále: vezmeme stav (index u q), vezmeme symbol, na kterém stojíme (podtržený symbol), spojíme je a podíváme se na zpracování výsledné kombinace podle tabulky pravidel.
Jednoduše řečeno, algoritmus násobení je následující: označíme 1. jednotku 2. faktoru, nahradíme ji písmenem „a“ a přeneseme celý 1. faktor za rovnítko. Převod se provádí střídavým nahrazením jednotek 1. násobitele za "a" a přidáním stejného počtu jednotek na konec řádku (vlevo od "*" úplně vpravo). Poté změníme všechna „a“ až po znaménko násobení „x“ zpět na jednotky. A cyklus se opakuje. Koneckonců, A vynásobené B může být reprezentováno jako A + A + A B krát. Nyní označíme 2. jednotku 2. násobitele písmenem „a“ a opět jednotky převedeme. Pokud před znaménkem „=“ nejsou žádné jednotky, je násobení dokončeno.
Dá se říci, že Turingův stroj je nejjednodušší počítač s lineární pamětí, který podle formálních pravidel transformuje vstupní data pomocí sekvence elementárních akcí .
Elementarita akcí spočívá v tom, že akce změní pouze malý kus dat v paměti (v případě Turingova stroje pouze jednu buňku) a počet možných akcí je konečný. Navzdory jednoduchosti Turingova stroje lze na něm spočítat vše, co lze spočítat na jakémkoli jiném stroji, který provádí výpočty pomocí sekvence elementárních operací. Tato vlastnost se nazývá úplnost .
Jedním z přirozených způsobů, jak dokázat, že výpočetní algoritmy, které lze implementovat na jednom počítači, lze implementovat na jiném, je simulovat první stroj na druhém.
Imitace je následující. Na vstup druhého stroje se přivádí popis programu (pravidel provozu) prvního stroje a vstupní data , která měla být přijata na vstupu prvního stroje. Takový program (pravidla fungování druhého stroje) je nutné popsat tak, aby v důsledku výpočtů byl výstup stejný, jaký by vrátil první stroj, kdyby přijal data .
Jak bylo řečeno, na Turingově stroji je možné napodobit (nastavením přechodových pravidel) všechny ostatní vykonavatele, kteří nějakým způsobem implementují proces výpočtu krok za krokem, ve kterém je každý krok výpočtu zcela elementární.
Na Turingově stroji můžete simulovat Postův stroj , normální Markovovy algoritmy a jakýkoli program pro běžné počítače, který převádí vstupní data na výstup podle nějakého algoritmu. Na různých abstraktních exekutorech je zase možné Turingův stroj napodobit. Exekutoři, u kterých je to možné, se nazývají Turing kompletní.
Existují programy pro konvenční počítače, které napodobují činnost Turingova stroje. Ale tato simulace je neúplná, protože Turingův stroj má abstraktní nekonečnou pásku. Nekonečnou datovou pásku nelze plně simulovat na počítači s konečnou pamětí: celková paměť počítače - RAM, pevné disky, různá externí paměťová média, registry procesoru a mezipaměť atd. - může být velmi velká, ale přesto je vždy konečná. . Teoretický limit množství informací, které mohou být uvnitř daného povrchu, je až do faktoru roven entropii černé díry se stejným povrchem.
Model Turingova stroje umožňuje rozšíření. Lze uvažovat Turingovy stroje s libovolným počtem pásek a vícerozměrné pásky s různými omezeními. Všechny tyto stroje jsou však Turingovy kompletní a jsou modelovány běžným Turingovým strojem.
Jako příklad takové redukce uvažujme následující větu: Pro jakýkoli Turingův stroj existuje ekvivalentní Turingův stroj běžící na polonekonečné pásce (tj. pásce, která je nekonečná v jednom směru).
Zvažte důkaz, který podal Yu.G. Karpov v knize Theory of Automata. Důkaz této věty je konstruktivní, to znamená, že uvedeme algoritmus, pomocí kterého lze pro jakýkoli Turingův stroj sestrojit ekvivalentní Turingův stroj s deklarovanou vlastností. Nejprve libovolně očíslujeme buňky pracovní pásky MT, to znamená, že určíme nové umístění informací na pásce:
Poté buňky přečíslujeme a budeme předpokládat, že symbol "*" není obsažen ve slovníku MT:
Nakonec Turingův stroj změníme tak, že zdvojnásobíme jeho počet stavů a změníme posun čtecí a zapisovací hlavy tak, aby v jedné skupině stavů byla činnost stroje ekvivalentní jeho provozu ve stínované zóně a ve druhé skupině stavů stroj funguje jako původní stroj v nezastíněné oblasti. Pokud se během provozu MT objeví symbol '*', pak čtecí a zapisovací hlava dosáhla hranice zóny:
Počáteční stav nového Turingova stroje je nastaven v té či oné zóně, podle toho, kde v původní pásce byla v původní konfiguraci umístěna čtecí a zapisovací hlava. Je zřejmé, že nalevo od omezujících značek "*" není páska použita v ekvivalentním Turingově stroji.
Formální jazyky a formální gramatiky | |
---|---|
Obecné pojmy | |
Typ 0 | |
Typ 1 |
|
Typ 2 | |
Typ 3 | |
rozebrat |
Slovníky a encyklopedie | ||||
---|---|---|---|---|
|