Bitte erläutern Sie diese formale Definition der Berechnung


7

Ich versuche erneut, TAOCP anzugreifen, angesichts der buchstäblichen Schwere der Bände, für die ich Probleme habe, mich ernsthaft zu engagieren. In TAOCP 1 schreibt Knuth, Seite 8, grundlegende Konzepte:

Sei eine endliche Menge von Buchstaben. Sei A die Menge aller Strings in A (die Menge aller geordneten Folgen x 1 x 2 ... x n, wobei n 0 ist und x j für 1 j n in A ist ). Die Idee ist, die Zustände der Berechnung so zu codieren, dass sie durch Zeichenfolgen von A ∗ dargestellt werden . Nun sei N eine nicht negative ganze Zahl und Q (der Zustand) die Menge aller ( σ , jAAAx1 x2xnn0xjA1jnAN wobei σ in A ∗ ist und j eine ganze Zahl 0 j N ist ; lassen I (der Eingang) mit der Teilmenge von Q sein , j = 0 und lasse Ω (die Ausgabe) mit der Teilmenge j = N . Wenn θ und σ Strings in A ∗ sind , sagen wir, dass θ in σ auftritt,wenn σ die Form α θ ω für Strings α und ω hat(σ,j)σA0jNIj=0Ωj=NθσAθσσαθωαω. Unsere Definition zu vervollständigen, lassen eine Funktion des folgenden Typs sein, durch die Saiten definierte θ j , φ j und die ganzen Zahlen a j , b j für 0 j N :fθjϕjajbj0jN

  • wenn θ j in σ nicht vorkommtf((σ,j))=(σ,aj)θjσ
  • wenn α die kürzestmögliche Zeichenkette ist, für die σ = α θ j ω istf((σ,j))=(αψjω,bj)ασ=αθjω
  • f((σ,N))=(σ,N)

Da ich kein Informatiker bin, habe ich Probleme, die gesamte Passage zu erfassen. Ich habe irgendwie die Idee, die hinter einem System von Opcodes steckt, aber ich bin beim Verständnis nicht effektiv vorangekommen. Ich denke, dass das Hauptproblem darin besteht, dass ich nicht weiß, wie ich es effektiv lesen soll.

Wäre es möglich, die obige Passage zu erklären, damit ich sie verstehen und mir eine Strategie geben kann, um in die Logik der Interpretation dieser Aussagen einzusteigen?


Dann sollten Sie Ihren Kommentar nicht in das angebliche Zitat aufnehmen, was jeden verwirrt, der das Buch nicht zur Hand hat. -.- Hoffe, meine Antwort hilft ...
Raphael

@ Raphael: Das Zitat stammt wörtlich aus dem Buch. Ich habe gerade eine Erklärung in Klammern der Symbole für I und Omega hinzugefügt
Stefano Borini

@SteanoBorini: Aber es ist keine "Erklärung", es ist falsch. Ich sehe, wie Sie den Originaltext lesen können, um zu dem gleichen Ergebnis zu gelangen, das Sie gezogen haben, aber es ist immer noch nicht hilfreich. Wenn Sie sagen, Sie zitieren etwas und fügen einen Kommentar hinzu, markieren Sie es bitte als solches, damit die Leute es mit einem Körnchen Salz nehmen können.
Raphael

Hier fehlt der Kontext: Welche Berechnung und welche Zustände?
Reinierpost

Antworten:


8

Wir vermissen einen Kontext, daher habe ich keine Ahnung, welchen Punkt Knuth anstrebt, aber hier erfahren Sie, wie Sie eine Turing-Maschine auf diese Weise interpretieren. Vielleicht hilft es Ihnen zu verstehen, was los ist. Im Allgemeinen ist es eine gute Möglichkeit, ein Konzept in den Griff zu bekommen, damit zu spielen. Bei Programmierparadigmen bedeutet dies, ein Programm zu schreiben. In diesem Fall werde ich zeigen, wie man ein Programm schreibt .

Angenommen, das Band der Turing-Maschine hat Symbole (wobei ϵ für "leer" steht), und fügen Sie ein weiteres Symbol hinzu, das die Position des Kopfes H darstellt . Ihre Zustände werden Paare der Form ( q , α ) sein , wobei q ein Zustand der Turing-Maschine ist und α { 0 , , 14 } . Wir identifizieren uns auch{0,1,ϵ}ϵH(q,α)qα{0,,14} mit N für jeden Endzustand.(F,0)N

Bei (nicht leerem) Eingang ist Ihr Startpunkt ( H x , ( s , 0 ) ) , wobei s der Startzustand ist. Der schwierige Teil besteht darin, Zustände zu codieren. Nehmen wir an, dass im Zustand Q , beim Lesen Eingang x , man ersetzt es mit einem ( Q , x ) , bewegen sich in Richtung D ( q , x ) { L ,x(Hx,(s,0))sqxa(q,x) , undSchalterden Zustand σ ( q , xD(q,x){L,R} . Für die θ s, haben wir θ q , 0σ(q,x)θ Für dasas haben wireinq,i=(q,i+1)füri<14undeinq,14=(q,14), obwohl wir niemals wirklich so weit kommen sollten. Für diebs haben wir

θq,0=0H0,θq,1=0H1,θq,2=0Hϵ,θq,3=1H0,θq,4=1H1,θq,5=1Hϵ,θq,6=ϵH0θq,7=ϵH1,θq,8=ϵHϵ,θq,9=H0,θq,10=H1,θq,11=Hϵ,θq,12=0H,θq,13=1H,θq,14=ϵH.
aaq,i=(q,i+1)i<14aq,14=(q,14)b Nun bleibt es, dieψszu bestimmen. Seia0=a(q,0)
bq,0=bq,3=bq,6=bq,9=(σ(q,0),0),bq,1=bq,4=bq,7=bq,10=(σ(q,1),0),bq,2=bq,5=bq,8=bq,11=bq,12=bq,13=bq,14=(σ(q,ϵ),0).
ψa0=a(q,0). Wenn dann ist ψ q , 0D(q,0)=L WennD(q,0)=R ist,dann
ψq,0=H0a0,ψq,3=H1a0,ψq,6=ψq,9=Hϵa0.
D(q,0)=R Als nächstes seia1=a(q,1). WennD(q,1)=L ist,dann ist ψ q , 1
ψq,0=0a0H,ψq,3=1a0H,ψq,6=ϵa0H,ψq,9=a0Hϵ.
a1=a(q,1)D(q,1)=L WennD(q,1)=R ist,dann
ψq,1=H0a1,ψq,4=H1a1,ψq,7=ψq,10=Hϵa1.
D(q,1)=R Schließlich seiaϵ=a(q,ϵ). WennD(q,ϵ)=L ist,dann ist ψ q , 2
ψq,1=0a1H,ψq,4=1a1H,ψq,7=ϵa1H,ψq,10=a1Hϵ.
aϵ=a(q,ϵ)D(q,ϵ)=L WennD(q,ϵ)=R ist,dann ist ψ q , 2
ψq,2=H0aϵ,ψq,5=H1aϵ,ψq,8=ψq,11=Hϵaϵ,ψq,12=H0aϵ,ψq,13=H1aϵ,ψq,14=Hϵaϵ.
D(q,ϵ)=R
ψq,2=0aϵH,ψq,5=1aϵH,ψq,8=ϵaϵH,ψq,11=aϵHϵ,ψq,12=0aϵH,ψq,13=1aϵH,ψq,14=ϵaϵH.

Jetzt bewerben Sie f wiederholt an, bis Sie stecken bleiben. Wenn Sie der Konstruktion folgen, werden Sie sehen, dass wir den Betrieb der Turing-Maschine simuliert haben.f


nichts verstanden. Nicht deine Schuld. Trotzdem danke :(

3
"Wir vermissen einen Kontext." Es ist: Wir sollten eine genaue Beschreibung dessen haben, was wir unter einer 'Berechnungsmethode' verstehen. hier ist eine von AA Markov gegeben; Es gibt andere gleichwertige, wie z. B. Turing-Maschinen.
Rgrig

6

Lassen Sie es uns Stück für Stück aufschlüsseln. Denken Sie zunächst daran, was Knuth auf Seite 7 geschrieben hat:

Definieren wir eine Berechnungsmethode formal als Vierfach , wobei Q eine Menge ist, die Teilmengen I und Ω enthält , und f eine Funktion von Q in sich selbst ist. [...] Die vier Größen Q , I , Ω , f sollen jeweils den Zustand der Berechnung, der Eingabe, der Ausgabe und der Rechenregel darstellen.(Q,I,Ω,f)QIΩfQQIΩf

Dies ist der Umriss. Sie müssen "darstellen" als "enthalten" lesen; wird Zustände enthalten (von denen einige in I sind , andere in Ω ) und fQIΩf wird eine Übergangsfunktion zwischen Zuständen sein; Betrachten Sie es als ein Programm.

Sei eine endliche Menge von Buchstaben. Sei A die Menge aller Strings in A (die Menge aller geordneten Folgen x 1 x 2 ... x n, wobei n 0 ist und x j für 1 j n in A ist ).AAAx1 x2xnn0xjA1jn

Dies ist nur eine Wiederholung dessen, was ist. Siehe auch hier .A

Die Idee ist, die Zustände der Berechnung so zu codieren, dass sie durch Zeichenfolgen von .A

Dies ist wahrscheinlich der Schlüsselsatz. Wir sprechen von Berechnungen , dh Ausführungssequenzen einiger (Programmiersprachen-) Anweisungen, die einen bestimmten Zustand manipulieren , der als Werte in Speicherzellen oder als Bewertung von Variablen angesehen werden kann. Knuth sagt hier, dass er diese Zustände abstrakt kodieren will, nämlich als Wort über ein Alphabet.

Beispiel: Stellen Sie sich ein Programm vor, das (höchstens) Variablen verwendet, von denen jede eine Ganzzahl speichert. Das heißt, ein Zustand ist durch das Tupel von Werten ( x 1 , , x k ) gegeben, wobei x k der (aktuelle) Wert der k- ten Variablen ist. Um Zustände dieser Form in einer formalen Sprache zu kodieren, können wir A = { 0 , 1 , # } mit # einem Trennzeichen wählen . Modellieren Sie nun einen solchen Zustand mit # ¯ x 1 # # ¯k(x1,,xk)xkkA={0,1,#}#wo ¯ x i ist die binäre Codierung vonxi.#x1¯##xk¯#xi¯xi

Insbesondere wären # 11 # 101 # 0 # .(3,5,0)#11#101#0#

N(σ,j)σA0jNIj=0Ωj=N .

QσAjQf0N0N

θσAθσσαθωαω .

Ich hoffe, dass dies klar ist; Es ist nur eine (Neu-) Definition von Teilzeichenfolgen.

fθjϕjajbj0jN

  • f((σ,j))=(σ,aj)θjσ
  • f((σ,j))=(αψjω,bj)ασ=αθjω
  • f((σ,N))=(σ,N)

θj,ψj,aj,bjjfθjψjbjθjajN

f


1
Jetzt habe ich ein bisschen besser verstanden, was los ist. Zwei Dinge sind jedoch immer noch nicht klar und ich würde mich sehr freuen, wenn Sie Ihre Antwort erweitern könnten. Erstens, θj, ψj, aj, bj - was sind diese Zeichenfolgen und Zahlen? Was repräsentieren sie? Wenn ich das richtig verstehe, repräsentieren aj und bj die Schrittnummer oder den Befehlszähler für den Zustand j + 1. Aber ich bin mir nicht sicher, was θj, ψj Strings bedeuten. Können Sie erklären, was Sie unter "Wenn Sie θj, ψj, aj, bj reparieren, haben Sie ein Programm" verstehen? Oder besser gesagt, wie würde ich das für ein Beispiel beheben?
Georgy Bolyuba

ajbjσjθjψjf

5

Dieser Text beschreibt den folgenden (Python) Pseudocode:

subs = a list of string pairs  
As = a list of integers  
Bs = a list of integers

def f(state, pc):  
  if pc == N: return (state, pc)  
  if state.find(subs[pc][0]) != -1:  
    return (state.replace(subs[pc][0],subs[pc][1],1), Bs[pc])  
  else:  
    return (state,As[pc])  

Die Funktion f wird vermutlich wiederholt angewendet.

Die letzten drei Aufzählungspunkte sind alles, was Sie wirklich brauchen, wenn Sie die Notationen verstanden haben. Alles, was vorher kommt, ist ein bisschen analog zu der Erklärung, wie Python funktioniert, bevor der Python-Code gegeben wird.


Ah ok, es ist eine Turingmaschine.
Stefano Borini

1
Es handelt sich vielmehr um ein anderes Rechenmodell mit der gleichen Leistung wie eine Turing-Maschine.
Yuval Filmus

Nun, drei Zeilen unter Ihrem Zitat Knuth sagt , dass dies äquivalent zu Turing - Maschinen, also vermutlich wussten Sie das schon , wenn Sie gefragt. Ich dachte, Sie bitten um Hilfe bei der Notation. Jetzt habe ich keine Ahnung, was Sie fragen wollten.
Rgrig
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.