8.2 Beispiele
Informelle Beschreibung. Unsere Turingmaschine arbeitet
in Phasen. In jeder Phase sucht die Maschine ein
Formellere Beschreibung. Als Bandalphabet verwenden wir
- findA: gehe nach links, bis Du ein
findest, ersetze es durch und wechsle dann in findB. Wenn Du allerdings in ein läufst, bist Du am linken Rand und es gibt keine mehr; wechsle nach noA und gehe ein Feld nach rechts. - findB: gehe nach rechts, bis Du ein
gefunden hast; ignoriere auf dem Weg alle und alle ; wenn Du liest, ersetze es durch und gehe nach findC;jedes andere Zeichen erzeugt einen Fehler. -
findC: gehe nach rechts, bis Du ein
gefunden hast; ignoriere derweil alle und ; wenn Du ein liest, ersetze es durch und gehe in Zustand findA. -
noA: wir stehen nun am Anfang des Bandinhalts und wissen,
dass es kein
mehr gibt. Wir müssen jetzt überprüfen, dass es auch keine mehr gibt. Also: gehe nach rechts, ignoriere alle . Wenn Du ein oder triffst, gehe nach reject. Wenn Du ein triffst, dann besteht das Wort nur noch aus . Wechsel nach accept.
Wir können die Beschreibung jetzt formal als Funktion
Beachten Sie: manche Zellen sind leer. Damit meine ich, dass die Turingmaschine dort
in den Zustand reject wechselt. Andere Zellen bestehen nur aus einem
Buchstaben; so steht in der Zelle von
Auf der Webseite
turingmachinesimulator.com
können Sie Ihre Turingmaschine eingeben und simulieren. Den Text für
die gerade beschriebene finden in aabbcc.txt.
Generell können Sie Regeln der Form
q, a r, b, Dangeben, wobei die Richtung
Unsere Maschine sucht das erste Zeichen, löscht es (ersetzt es durch
Als Bandalphabet brauchen wir hier nur
-
next: ist der Anfangszustand. Die Maschine steht am linkesten Zeichen.
Ist dieses
, so haben wir das "leere" Palindrom und wir wechseln nach accept. Ist es , wechseln wir nach readA und gehen einen Schritt nach rechts; ist es , wechseln wir nach readB und gehen nach rechts. - readA, readB: wir gehen nach rechts, bis wir ein
lesen, also den rechten Rand erreicht haben, und wechseln dann nach killA bzw. killB und gehen einen Schritt nach links. - killA, killB: hier weiß die Turingmaschine, was das linkeste Zeichen war,
und dass dieses bereits gelöscht worden ist. Sie muss nun überprüfen, was
das rechteste Zeichen ist. Wenn es "passt", löschen wir es und wechseln
nach return; wenn es "nicht passt", nach reject; wenn es
ist, dann haben wir das ganze Wort abgearbeitet und gehen nach accept. -
return: gehe nach links, bis Du ein
findest. Wechsle dann nach next.
Jetzt sind Sie dran.