Verstaendnisproblem mit einem Beispielalgorithmus aus Knuth

Neue Frage »

Auf diesen Beitrag antworten »
Surma Verstaendnisproblem mit einem Beispielalgorithmus aus Knuth

Moin.
Ich lese gerade den ersten Band von Donald E. Knuth's "The Art of Computer Programming"-Reihe.
Ich bin zwar gerade erst am Anfang, jedoch kann ich einen Beispielalgorithmus von ihm nicht nachvollziehen. Das ganze ist wie folgt definiert:

Ein Algorithmus soll durch [latex](Q,I,\Omega,f)[/latex] definiert werden koennen, wobei [latex]Q[/latex] die Untermengen [latex]I[/latex] und [latex]\Omega[/latex] enthaelt und [latex]f: Q \rightarrow Q[/latex] gilt. [latex]\Omega[/latex] sollen Fixpunkte von [latex]f[/latex] sein, es soll also gelten [latex]f(\omega)=\omega\bigwedge_{\omega \in \Omega}[/latex].
[latex](Q,I,\Omega,f)[/latex] repraesentieren dabei den Berechnungsstatus, den Input, den Output und die Berechnungsregel (i.d.Reihenfolge).

Dabei soll fuer jedes [latex]x[/latex] gelten: [latex]x_0=x[/latex] und [latex]x_{k+1}=f(x_k)[/latex] fuer [latex]k \ge 0[/latex]


Nun Knuth nach diesem System einen Beispielalgorithmus aufgestellt, der wie folgt definiert ist:

Sei [latex]A[/latex] die Menger aller Buchstaben und [latex]A^\ast[/latex] sei die Menger aller Strings aus [latex]A[/latex], also alle [latex]x_1x_2x_3...x_n[/latex] mit [latex]n \ge 1[/latex] und [latex]x_j \in A[/latex] mit [latex] 1 \le j \le n[/latex]. [latex]N[/latex] ist ein nicht-negativer Integer und [latex]Q[/latex] ist die Menge aller [latex](\sigma, j)[/latex], wobei [latex]\sigma \in A^\ast[/latex] und [latex]0 \le j \le N[/latex]. [latex]I[/latex] soll jetzt die Untermenge von [latex]Q[/latex] sein, bei der [latex]j=0[/latex] gilt, [latex]\Omega[/latex] die mit [latex]j=N[/latex].
Wenn [latex]\theta[/latex] und [latex]\sigma[/latex] jetzt aus [latex]A^\ast[/latex] sind, dann sagt man, [latex]\theta[/latex] kommt in [latex]\sigma[/latex] vor, wenn [latex]\sigma[/latex] die Form [latex]\alpha\theta\omega[/latex] hat, mit [latex]\alpha[/latex] und [latex]\omega[/latex] aus [latex]A^\ast[/latex].
[latex]f[/latex] ist nun definiert mit den beiden Strings [latex]\theta_j[/latex],[latex]\Phi_j[/latex] und den beiden Integern [latex]a_j[/latex], [latex]b_j[/latex] mit [latex]0 \le j \le N[/latex] als:
[latex]f\left((\sigma,j)\right)=(\sigma,a_j)[/latex] Wenn [latex]\theta_j[/latex] nicht in [latex]\sigma[/latex] auftaucht,
[latex]f\left((\sigma,j)\right)=(\alpha\Phi_j\omega,b_j)[/latex] Wenn [latex]\alpha[/latex] der kuerzeste String ist, fuer den gilt [latex]\sigma=\alpha\theta_j\omega[/latex]
[latex]f\left((\sigma,N)\right)=(\sigma,N)[/latex]

Mein Problem ist, dass ich die Rolle von [latex]a_j[/latex] und [latex]b_j[/latex] nicht verstehe. Ihre Werte oder ihr Sinn werden nicht genannt und ich kann sie mir auch nicht denken. Und wo ist der Unterschied, ob ich jetzt [latex]\sigma[/latex] erhalte, oder [latex]\alpha\theta_j\omega[/latex], denn Wertetechnisch ist das doch ein und das Selbe?
Ich bitte euch, mir da ein wenig auf die Spruenge zu helfen.

MfG
Surma
 
Auf diesen Beitrag antworten »
Tobias

Abgesehen von deinen LaTeX-Fehlern (Statt A* lieber A^\ast, Indizes bitte vollständig klammern: nicht x_k+1 sondern x_{k+1}) ist das, höflich gesprochen, nicht sehr ausgiebig formuliert. Ist der Text aus dem Buch abgeschrieben oder hast du nach eigenem Belieben gekürzt?

Soweit ich es verstanden habe geht die Funktion hin und ersetzt einen Teilstring [latex]\theta_j[/latex] durch den String [latex]\Phi_j[/latex], falls dieser vorhanden ist und ersetzt dann j zu b_j. Falls der String nicht gefunden wird, wird nichts ersetzt aber j durch a_j ersetzt. Für jedes j sind Strings und a_j, b_j definiert. Ziel ist es wohl, die Funktion mehrfach hintereinander auszuführen und irgendwann in einen Fixpunkt hineinzulaufen.

Ist in deinem Buch irgendwas über den Sinn des Algorithmus erzählt? In welchem Kontext taucht er auf?
Auf diesen Beitrag antworten »
Surma

Danke erstmal fuer die Latex-Hinweise.

Das ganze ist (meiner Meinung nach) ungekuerzt, aber frei aus dem Englischen uebersetzt.

Das ganze taucht im Kontext von "effizienten" Algorithmen auf. Da vor wurde in diesem Schema Euklid's ggT-Algorithmus gezeigt, der wohl ineffizient war. Den hab' ich aber problemlos verstanden (siehe Anhang).
Ich habe mal die relevante Seite hier angehaengt, vielleicht hab' ich auch was relevantes uebersehen. Die mathematische Ausfuehrung fangt auf der ersten Seite letzter Absatz an.
http://drebesium.org/~crock/stuff/knuth.pdf



MfG
Surma
 
Neue Frage »
Antworten »


Verwandte Themen