Im College haben wir etwas über die Theorie der Berechnung im Allgemeinen und Turing-Maschinen im Besonderen gelernt. Eines der großartigen theoretischen Ergebnisse ist, dass Sie auf Kosten eines potenziell großen Alphabets (Symbole) die Anzahl der Zustände auf nur 2 reduzieren können.
Ich habe nach Beispielen für verschiedene Turingmaschinen gesucht und ein allgemeines Beispiel ist der Parenthesis Matcher / Checker. Im Wesentlichen wird geprüft, ob eine Folge von Klammern, z. B. (()()()))()()()
ausgeglichen ist (das vorherige Beispiel würde 0 für unsymmetrisch zurückgeben).
Versuchen Sie, wie ich kann, ich kann nur erreichen, dass dies eine Drei-Zustands-Maschine ist. Ich würde gerne wissen, ob jemand dies auf das theoretische Minimum von 2 reduzieren kann und wie ihre Herangehensweise / Zustände / Symbole waren!
Zur Verdeutlichung sind die Klammern zwischen leerem Band "eingeklemmt", so dass im obigen Beispiel
- - - - - - - (()()()))()()() - - - - - - -
die Eingabe auf dem Band wäre. Das Alphabet würde (
, )
, 1
, 0
, -
, und der *halt*
Staat zählt nicht als Staat.
Als Referenz ist der Drei-Zustands-Ansatz, den ich habe, wie folgt: Beschreibung der Zustände:
State s1: Looks for Closing parenthesis
State s2: Looks for Open parenthesis
State s3: Checks the tape to ensure everything is matched
Symbols: ),(,X
Übergänge Aufgeführt als:
Action: State Symbol NewState WriteSymbol Motion
// Termination behavior
Action: s2 - *halt* 0 -
Action: s1 - s3 - r
//Transitions of TM
Action: s1 ( s1 ( l
Action: s1 ) s2 X r
Action: s1 X s1 X l
Action: s2 ( s1 X l
Action: s2 X s2 X r
Action: s3 ( *halt* 0 -
Action: s3 X s3 X r
Action: s3 - *halt* 1 -
Vergib die informelle Art, das alles aufzuschreiben. Ich lerne immer noch die theoretischen Konstrukte dahinter.