Defining an Algorithm
[Knuth], [TheArtofComputerProgramming] [taocp]
Some computational sequences may never terminate; an algorithm is a computational method that terminates in finitely many steps for all x in I.
Thuật toán là 1 tập hữu hạn các phép tính toán đối với mọi x là Input
Let us formally define a computational method to be a quadruple (Q, I, Ω, f), in which Q is a set containing subsets I and Ω and f is a function from Q into itself.
computational method được tổ hợp bởi 4 thành phần quadruple (Q,I,Ω,f).
- Trong đó
I,Ωlà tập hợp chứa nhiều giá trị khác nhau Qlà 1 tập hợp chứaI,Ω⊆Q, không chỉ vậy, Khi functionfxử lý nó sẽ lấy đầu vàoIlà những giá trị nằm trongQsau đófsẽ trả raΩ: OUTPUTnhững giá trị tớiQ
Furthermore f should leave Ω pointwise fixed; that is, f(q) should equal q for all elements q of Ω.
Câu này đơn giản được hiểu nghĩa là. Những gì mà hàm f sau khi xử lý trả về sẽ giống với đối số q nếu đối số q là 1 thành phần của tập Ω. Lý do là Ω là 1 tập hợp của các giá trị đầu ra của computational method(phương pháp tính). Đưa 1 giá tri Ω output vào trở lại làm f sẽ không làm thay đổi giá trị của nó.
The four quantities Q, I, Ω, f are intended to represent respectively the states of the computation, the input, the output, and the computational rule.
Ý nghĩa của từng thành phần trong computational method:
Qrepresents a collection of all possible states of our algorithmIthe inputΩthe outputfthe computational rule, Quy trình được áp dụng cho mỗi stage để có được state tiếp theo. Đến cuối cùng sẽ ra được output
Each input x in the set I defines a computational sequence, x0, x1, x2, ..., as follows: x0 = x and xk+1 = f(xk) for k ≥ 0.
Mỗi Input x là 1 chuỗi tính toán nối tiếp nhau, ví dụ: x1=f(x0) x1 là kết quả của sau khi xử lý của f. x0=x là giá trị bắt đầu, giá trị tiếp theo được xác định xk+1=f(xk) với k>=0
Algorithm E may, for example, be formalized in these terms as follows: Let Q be the set of all singletons (n), all ordered pairs (m, n), and all ordered quadruples (m, n, r, 1), (m, n, r, 2), and (m, n, p, 3), where m, n, and p are positive integers and r is a nonnegative integer. Let I be the subset of all pairs (m, n) and let Ω be the subset of all singletons (n).
Theo thuật toán Euclid, đầu vào I (input) là 1 cặp số nguyên dương (m,n). Kết quả của mỗi state xử lý là 1 số nguyên, và nó được mô tả là singleton(n) nằm trong tập Ω.
f((m, n)) = (m, n, 0, 1); f((n)) = (n); f((m, n, r, 1)) = (m, n, remainder of m divided by n, 2); f((m, n, r, 2)) = (n) if r = 0, (m, n, r, 3) otherwise; f((m, n, p, 3)) = (n, p, p, 1).
ở phần trên chúng ta có công thức f(xk)=xk+1
Phần dưới này là ứng dụng công thức vào trong bài toán Euclid cụ thể
f((m, n)) = (m, n, 0, 1);Thể hiện input đầu vào là 1 cặp(m,n), 1 là thể hiện bước tiếp theo.(m, n, 0, 1)sẽ được đưa vào hàmfoh bước tiếp theof((m, n, r, 1)) = (m, n, remainder of m divided by n, 2);. Tham số của hàmfđược lấy bằng kết quả phần trên, r được tính bằng phần dư của m/n.f((m, n, r, 2)) = (n) if r = 0, (m, n, r, 3) otherwise;(n)được đưa vào danh sáchΩ outputnếur=0. Trái lại tiếp tực quy trình trênf((m, n, p, 3)) = (n, p, p, 1).Khi ở bước trênr!=0thì ta tới bước này, tiếp theo của bước này là quay lại bước 1, và gánn=p & m=n. Bài 4 chương 1
f((6099, 2166)) = (6099, 2166, 0, 1);
f((6099, 2166, 0, 1)) = (6099, 2166, 1767, 2);
f((6099, 2166, 1767, 2)) = (6099, 2166, 1767, 3);
f((6099, 2166, 1767, 3)) = (2166, 1767, 1767, 1);
f((2166, 1767, 1767, 1)) = (2166, 1767, 399, 2);
f((2166, 1767, 399, 2)) = (2166, 1767, 399, 3);
f((2166, 1767, 399, 3)) = (1767, 399, 399, 1);
f((1767, 399, 399, 1)) = (1767, 399, 171, 2);
f((1767, 399, 171, 2)) = (1767, 399, 171, 3);
f((1767, 399, 171, 3)) = (399, 171, 171, 1);
f((399, 171, 171, 1)) = (399, 171, 57, 2);
f((399, 171, 57, 2)) = (399, 171, 57, 3);
f((399, 171, 57, 3)) = (171, 57, 57, 1);
f((171, 57, 57, 1)) = (171, 57, 0, 2);
f((171, 57, 0, 2)) = (57);
f((57)) = (57); ~ công thức f(q)=qIf we wish to restrict the notion of algorithm so that only elementary operations are involved, we can place restric1tions on
Q, I, Ωandf, for example as follows: LetAbe a finite set of letters, and letA*be the set of all strings onA(the set of all ordered sequencesx1x2...xn, wheren ≥ 0andxjis inAfor1 ≤ j ≤ n).
Với A là 1 tập hữu hạn các letter. A* là 1 tập tương ứng chứa các combinations of letter. xj is in A for 1 ≤ j ≤ n có nghĩ là với bất kỳ letter(xj) trong A* thì có tương ứng trong tập A.
The idea is to encode the states of the computation so that they are represented by strings of
A*.
Mỗi string của letter trong A* thể hiện 1 states trong Q, và mỗi tính toán ( I input, Ω output, và các bước trung gian) đều được lưu trong tập A*.
Now let
Nbe a nonnegative integer and letQbe the set of all(σ,j), whereσis inA*andjis an integer,0 ≤ j ≤ N;letIbe the subset ofQwithj = 0and letΩbe the subset withj = N.
Q: là 1 tập hợp chứa các cặp(σ,j)σ: là 1 string trong tậpA*j: là 1 step(hay state) trong thuật toánj=0là bước đầu tiên của thuật toán, nó là đầu vàoIj=Nlà bước cuối cùng của thuật toán, là đầu ra của thuật toánΩ
Mục (3) Basic Concepts có nhắc tới thuật toán Markov Markov algorithm là thuật toán dùng để chuyển 1 chuỗi các ký tự thành 1 chuỗi các ký tự khác dựa vào 1 danh sách các rules có thứ tự. Mỗi luật dùng cụ thể 1 chuỗi thay thế bằng 1 chuỗi khác. Quy trình sẽ đi từ chuỗi đầu tiên cho tới cuối cùng. Khi gặp chuỗi cần thay thế thì thay thành chuỗi mới luôn. Nếu không gặp thì tiếp tục thực hiện tiếp rule tiếp theo cho tới cuối cùng là kết thúc quá trình. Ví dụ :
1 - "u" -> "do"
2 - "p" -> "wn"
3 - "up" -> "error"Giả sử, ta đưa vào 1 chuỗi cần chuyển đổi là up. quy trình sẽ là
1 - "up" => input
2 - "dop" => thay thế "u" bằng "do" ra 1 chuỗi mới
3 - "down" => gặp "p" có trong danh sách nên thay thế bằng "wn"If
θandσare strings inA*, we say thatθoccurs inσif it has the formαθωfor stringsαandω.
Định nghĩa thế nào là 1 string nằm bên trong 1 string khác. θ, σ là string nằm bên trong tập A*. θ được gọi là nằm trong string σ nếu nó có dạng αθω. Cụ thể như ví dụ phía trên khi ta đưa 1 chuỗi up vào thì θ=u vì u có mặt trong bộ chuyển đổi. α là 1 chuỗi empty "" do trước u không có chuỗi nào. ω=p.
To complete our definition, let f be a function of the following type, defined by the strings
θj,φjand the integersaj, bj for 0 ≤ j ≤ N:f((σ,j)) = (σ,aj)if θj does not occur in σf((σ,j)) = (αφjω,bj)if α is the shortest string for which σ = αθjωf((σ,N)) = (σ,N)
Áp dụng vào để thể hiện lời giải bài toán Markov algorithm
j là number of the step we are performing.
θ&φ tương ứng mỗi step là (θj & φj)
a là luật nào đang được ứng dụng
b tương ứng với step nào tiếp tới, step cuối cùng b=N
3 bước phía trên là thể hiện những luật của Markov algorithm.
j - θ φ a b
0 - "u" "do" 2 1
1 - "p" "wn" 2 3
2 - "*" "error" 3 3Bắt đầu với chuỗi "up" cần được xử lý. Khi đưa "up" vào thuật toán
f((σ,j)) ~ f(("up", 0)) σ="up", j=0.- Ta thấy RULE 1 không thỏa mãn do
σ ("up")does containθ0 ("u"). nên chuyển tới RULE 2 - RULE 2
f((σ,j)) = (αφjω,bj)được áp dụng vớiθ0 là "u",ω là "p".α là empty string (do trước u không có chuỗi nào hết.a0=2do RULE 2 được sử dụng.b0=1thể hiện bước tiếp theo là 1. `"u" được thay thế bới "do" f((σ,j)) ~ f(("dop", 1)) σ="dop", j=1.- Ta thấy RULE 1 không thỏa mãn do
σ ("dop")does containθ1 ("p"). nên chuyển tới RULE 2 - RULE 2
f((σ,j)) = (αφjω,bj)được áp dụng vớiθ1 là "p",ω là "".α là "do".a1=2do RULE 2 được sử dụngb1=3thể hiện bước tiếp theo là 3. `"u" được thay thế bới "do" - Kết quả
f((σ,N)) = (σ,N) = f(("down", 3))
[taocp-exercises-basic-concepts]: TAOCP Exercises Basic concept