Estoy tratando de atacar a TAOCP una vez más, dada la gran pesadez literal de los volúmenes que tengo problemas para comprometerme en serio. En TAOCP 1 Knuth escribe, página 8, conceptos básicos ::
Dejar ser un conjunto finito de letras. Dejar ser el conjunto de todas las cadenas en (el conjunto de todas las secuencias ordenadas ... dónde y es en para ) La idea es codificar los estados del cálculo para que estén representados por cadenas de. Ahora deja ser un número entero no negativo y Q (el estado) sea el conjunto de todos , dónde es en y j es un entero ; dejar (la entrada) sea el subconjunto de Q con y deja (la salida) sea el subconjunto con . Si y son cadenas en , Nosotros decimos eso ocurre en Si tiene la forma para cuerdas y . Para completar nuestra definición, dejemos ser una función del siguiente tipo, definido por las cadenas , y los enteros , para :
- Si no ocurre en
- Si es la cadena más corta posible para la cual
Al no ser un informático, tengo problemas para comprender todo el pasaje. Tengo la idea de que está detrás de un sistema de códigos de operación, pero no he progresado efectivamente en la comprensión. Creo que el problema principal es tat. No sé cómo leerlo de manera efectiva.
¿Sería posible explicar el pasaje anterior para que pueda entenderlo y darme una estrategia para entrar en la lógica al interpretar estas declaraciones?
fuente
Respuestas:
Nos falta algo de contexto, así que no tengo idea de qué punto está tratando de hacer Knuth, pero aquí está cómo interpretar una máquina Turing de esta manera. Quizás te ayudará a entender lo que está sucediendo. En general, una buena forma de controlar un concepto es jugar con él. En el caso de paradigmas de programación, eso significa escribir un programa. En este caso, mostraré cómo escribir cualquier programa.
Supongamos que la cinta de la máquina Turing tiene símbolos{0,1,ϵ} (dónde ϵ significa "vacío") y agregue un símbolo más que represente la ubicación de la cabeza H . Tus estados van a ser pares de la forma(q,α) , dónde q es un estado de la máquina de Turing, y α∈{0,…,14} . También identificamos(F,0) con N para cualquier estado final.
Entrada activada (no vacía)x , tu punto de partida será (Hx,(s,0)) , dónde s is the starting state. The difficult part is to encode states. Suppose that at state q , upon reading input x , you replace it with a(q,x) , move in direction D(q,x)∈{L,R} , and switch to state σ(q,x) . For the θ s, we have
Now applyf repeatedly until you get stuck. If you follow the construction, you will see that we have simulated the running of the Turing machine.
fuente
Vamos a desglosarlo poco a poco. En primer lugar, recuerde lo que Knuth escribió en la página 7:
This is the outline. You have to read "represent" as "contain";Q is going to contain states (some of which are in I , some are in Ω ) and f is going to be a transition function between states; think of it as a program.
This is just a reiteration of whatA∗ is. See also here.
This is probably the key sentence. We are talking about computations, that is execution sequences of some (programming language) statements which manipulate some state, which can be thought of as values in memory cells, or valuations of variables. Knuth says here that he wants to encode these states in an abstract way, namely as word over some alphabet.
Example: Consider a program that uses (at most)k variables, each of which stores an integer. That is, a state is given by the tuple of values (x1,…,xk) where xk is the (current) value of the k -th variable. In order to encode states of this form in a formal language, we can choose A={0,1,#} with # a separator. Now model such a state by #x1¯¯¯¯¯#⋯#xk¯¯¯¯¯# where xi¯¯¯¯¯ is the binary encoding of xi .
Specifically,(3,5,0) would be #11#101#0# .
You misquoted there (bad Stefano!); the parentheses are not in the original text, and they were misleading (see above). Knuth definesQ here as the set of all possible states (σ∈A∗ ) at all possible places in the computation (j can be understood as program counter). Therefore, Q contains all statement-indexed states any computation of the algorithm given by f can assume. By definition, we start with program counter 0 and end in N , thus states indexed 0 are input states and those indexed N are output states.
I hope that this is clear; it is just a (re)definition of substrings.
This is a a small programming language; if you fixθj,ψj,aj,bj , you have a program. On program counter j , f replaces the left-most occurrence θj in the state with ψj and goes to statement bj . If there is no θj in the current state, it goes to statement aj . The program loops if statement N is reached, modelling termination.
On the upper half of page 8, there is a more concrete example of a "program"f . Keep in mind that Knuth is going to use assembly language later on; this informs how he looks at programs (atomic statements connected by jumps).
fuente
That text describes the following (Python) pseudocode:
The function f is presumably going to be applied repeatedly.
The last three bullet points is all you really need once you understand the notations. All that comes before is a bit analogous to explaining how Python works before giving the Python code.
fuente