Hãy giải thích định nghĩa chính thức này của tính toán


7

Tôi đang cố gắng tấn công TAOCP một lần nữa, vì sự nặng nề theo nghĩa đen của các tập tôi gặp khó khăn khi thực hiện nó một cách nghiêm túc. Trong TAOCP 1 Knuth viết, trang 8, các khái niệm cơ bản ::

Để cho Alà một tập hợp hữu hạn của các chữ cái. Để choA là tập hợp của tất cả các chuỗi trong A (tập hợp tất cả các chuỗi theo thứ tự x1 x2 ... xn Ở đâu n0xj trong A cho 1jn). Ý tưởng là mã hóa các trạng thái tính toán sao cho chúng được biểu diễn bằng các chuỗiA. Bây giờ hãy đểN là một số nguyên không âm và Q (trạng thái) là tập hợp của tất cả (σ,j), Ở đâu σ trong A và j là một số nguyên 0jN; để choI (đầu vào) là tập con của Q với j=0 và để Ω (đầu ra) là tập hợp con với j=N. Nếuθσ là những chuỗi trong A, chúng tôi nói rằng θ xảy ra trong σ nếu σ có hình thức αθω cho chuỗi αω. Để hoàn thành định nghĩa của chúng tôi, hãy đểf là một hàm của loại sau, được xác định bởi các chuỗi θj, ϕj và các số nguyên aj, bj cho 0jN:

  • f((σ,j))=(σ,aj) nếu θj không xảy ra trong σ
  • f((σ,j))=(αψjω,bj) nếu α là chuỗi ngắn nhất có thể σ=αθjω
  • f((σ,N))=(σ,N)

Không phải là một nhà khoa học máy tính, tôi gặp khó khăn trong việc nắm bắt toàn bộ đoạn văn. Tôi có thể hiểu được ý tưởng đằng sau một hệ thống các mã, nhưng tôi đã không tiến bộ hiệu quả trong việc hiểu. Tôi nghĩ rằng vấn đề chính là tôi không biết cách đọc nó một cách hiệu quả.

Tôi có thể giải thích đoạn văn trên để tôi có thể hiểu nó không, và đưa cho tôi một chiến lược để có được logic trong việc diễn giải những câu này?


Sau đó, bạn không nên đưa bình luận của mình vào trích dẫn bị cáo buộc, gây nhầm lẫn cho bất kỳ ai không có cuốn sách này. -.- Hy vọng câu trả lời của tôi sẽ giúp ...
Raphael

@Raphael: trích dẫn nguyên văn từ cuốn sách. Tôi vừa thêm lời giải thích trong ngoặc đơn của các ký hiệu cho I và omega
Stefano Borini

@SteanoBedom: Nhưng nó không phải là "giải thích", nó sai. Tôi thấy làm thế nào bạn có thể đọc văn bản gốc để đi đến kết luận giống như bạn đã làm, nhưng nó vẫn không hữu ích. Nếu bạn nói bạn trích dẫn một cái gì đó và thêm bình luận, xin vui lòng đánh dấu nó như vậy để mọi người có thể lấy nó bằng một hạt muối.
Raphael

Có bối cảnh bị thiếu ở đây: tính toán nào và trạng thái nào?
Revierpost

Câu trả lời:


8

Chúng tôi đang thiếu một số bối cảnh vì vậy tôi không biết Knuth đang cố gắng tạo ra điểm nào, nhưng đây là cách diễn giải một máy Turing theo cách này. Có lẽ nó sẽ giúp bạn hiểu những gì đang xảy ra. Nói chung, một cách tốt để nắm bắt một khái niệm là chơi với nó. Trong trường hợp mô hình lập trình, điều đó có nghĩa là viết một chương trình. Trong trường hợp này, tôi sẽ chỉ cho bạn cách viết bất kỳ chương trình nào .

Giả sử băng của máy Turing có ký hiệu {0,1,ϵ} (Ở đâu ϵ là viết tắt của "trống") và thêm một biểu tượng nữa đại diện cho vị trí của đầu H. Các tiểu bang của bạn sẽ là cặp mẫu(q,α), Ở đâu q là trạng thái của máy Turing và α{0,,14}. Chúng tôi cũng xác định(F,0) với N cho bất kỳ trạng thái cuối cùng.

Bật (không trống) x, điểm bắt đầu của bạn sẽ là (Hx,(s,0)), Ở đâu slà trạng thái bắt đầu. Phần khó là mã hóa trạng thái. Giả sử rằng ở trạng tháiq, khi đọc đầu vào x, bạn thay thế nó bằng a(q,x), di chuyển theo hướng D(q,x){L,R}và chuyển sang trạng thái σ(q,x). Choθs, chúng tôi có

θ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.
Cho as, chúng tôi có aq,i=(q,i+1) cho i<14aq,14=(q,14), mặc dù chúng ta không bao giờ nên thực sự đi xa đến thế. Chobs, chúng tôi có
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).
Bây giờ nó vẫn còn để xác định ψS. Để choa0=a(q,0). NếuD(q,0)=L sau đó
ψq,0=H0a0,ψq,3=H1a0,ψq,6=ψq,9=Hϵa0.
Nếu D(q,0)=R sau đó
ψq,0=0a0H,ψq,3=1a0H,ψq,6=ϵa0H,ψq,9=a0Hϵ.
Tiếp theo, hãy a1=a(q,1). NếuD(q,1)=L sau đó
ψq,1=H0a1,ψq,4=H1a1,ψq,7=ψq,10=Hϵa1.
Nếu D(q,1)=R sau đó
ψq,1=0a1H,ψq,4=1a1H,ψq,7=ϵa1H,ψq,10=a1Hϵ.
Cuối cùng, hãy để aϵ=a(q,ϵ). NếuD(q,ϵ)=L sau đó
ψq,2=H0aϵ,ψq,5=H1aϵ,ψq,8=ψq,11=Hϵaϵ,ψq,12=H0aϵ,ψq,13=H1aϵ,ψq,14=Hϵaϵ.
Nếu D(q,ϵ)=R sau đó
ψ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.

Bây giờ áp dụng fliên tục cho đến khi bạn gặp khó khăn. Nếu bạn theo dõi quá trình xây dựng, bạn sẽ thấy rằng chúng tôi đã mô phỏng hoạt động của máy Turing.


hiểu: không có gì. Không phải lỗi của bạn. Dù sao cũng cảm ơn bạn :(

3
"Chúng tôi đang thiếu một số bối cảnh." Đó là: chúng ta nên có một số mô tả chính xác về ý nghĩa của một "phương pháp tính toán"; đây là một cái được đưa ra bởi AA Markov; có những cái tương đương khác, chẳng hạn như máy Turing.
rgrig

6

Hãy để chúng tôi phá vỡ nó từng chút một. Trước hết, hãy nhớ những gì Knuth đã viết trên trang 7:

Hãy để chúng tôi chính thức xác định một phương pháp tính toán là một bộ tứ(Q,I,Ω,f), trong đó Q là một tập hợp chứa các tập hợp con IΩf là một chức năng từ Qvào chính nó [...] Bốn số lượngQ, I, Ω, f được dự định để đại diện cho trạng thái tính toán, đầu vào, đầu ra và quy tắc tính toán.

Đây là phác thảo. Bạn phải đọc "đại diện" là "chứa";Q sẽ chứa các trạng thái (một số trong đó là trong I, một số trong Ω) và fsẽ là một chức năng chuyển tiếp giữa các quốc gia; nghĩ về nó như một chương trình

Để cho Alà một tập hợp hữu hạn của các chữ cái. Để choA là tập hợp của tất cả các chuỗi trong A (tập hợp tất cả các chuỗi theo thứ tự x1 x2 ... xn Ở đâu n0xj trong A cho 1jn).

Đây chỉ là một sự nhắc lại về những gì ALà. Xem thêm tại đây .

Ý tưởng là mã hóa các trạng thái tính toán sao cho chúng được biểu diễn bằng các chuỗi A.

Đây có lẽ là câu quan trọng. Chúng ta đang nói về các tính toán , đó là các chuỗi thực thi của một số câu lệnh (ngôn ngữ lập trình) thao túng một số trạng thái , có thể được coi là các giá trị trong các ô nhớ hoặc định giá các biến. Knuth nói ở đây rằng ông muốn mã hóa các trạng thái này một cách trừu tượng, cụ thể là từ trên một số bảng chữ cái.

Ví dụ: Xem xét một chương trình sử dụng (nhiều nhất)kcác biến, mỗi biến lưu một số nguyên. Đó là, một trạng thái được đưa ra bởi bộ giá trị(x1,,xk) Ở đâu xk là giá trị (hiện tại) của k-thứ biến. Để mã hóa các trạng thái của biểu mẫu này bằng ngôn ngữ chính thức, chúng tôi có thể chọnA={0,1,#} với #một dải phân cách. Bây giờ mô hình trạng thái như vậy bằng#x1¯##xk¯# Ở đâu xi¯ là mã hóa nhị phân của xi.

Đặc biệt, (3,5,0) sẽ là #11#101#0#.

Bây giờ hãy để N là một số nguyên không âm và Q là tập hợp của tất cả (σ,j), Ở đâu σ trong A và j là một số nguyên 0jN; để choI là tập con của Q với j=0 và để Ω là tập hợp con với j=N.

Bạn đã trích dẫn sai ở đó (xấu Stefano!); các dấu ngoặc đơn không có trong văn bản gốc và chúng bị sai lệch (xem ở trên). Knuth định nghĩaQở đây là tập hợp của tất cả các trạng thái có thể (σA) tại tất cả các vị trí có thể trong tính toán (jcó thể hiểu là chương trình truy cập). Vì thế,Q chứa tất cả các trạng thái được lập chỉ mục câu lệnh bất kỳ tính toán của thuật toán được đưa ra bởi fcó thể giả định. Theo định nghĩa, chúng tôi bắt đầu với bộ đếm chương trình0 và kết thúc bằng N, do đó, các tiểu bang được lập chỉ mục 0 là các trạng thái đầu vào và các trạng thái được lập chỉ mục N là các trạng thái đầu ra.

Nếu θσ là những chuỗi trong A, chúng tôi nói rằng θ xảy ra trong σ nếu σ có hình thức αθω cho chuỗi αω.

Tôi hy vọng rằng điều này là rõ ràng; nó chỉ là một định nghĩa (tái) của các chuỗi con.

Để hoàn thành định nghĩa của chúng tôi, hãy để f là một hàm của loại sau, được xác định bởi các chuỗi θj, ϕj và các số nguyên aj, bj cho 0jN:

  • f((σ,j))=(σ,aj) nếu θj không xảy ra trong σ
  • f((σ,j))=(αψjω,bj) nếu α là chuỗi ngắn nhất có thể σ=αθjω
  • f((σ,N))=(σ,N)

Đây là một ngôn ngữ lập trình nhỏ; nếu bạn sửa chữaθj,ψj,aj,bj, bạn có một chương trình. Trên quầy chương trìnhj, f thay thế cho sự xuất hiện nhiều nhất θj ở bang với ψj và đi đến tuyên bố bj. Nếu không cóθj ở trạng thái hiện tại, nó đi đến tuyên bố aj. Các vòng lặp chương trình if statementN đạt được, chấm dứt mô hình.

Ở nửa trên của trang 8, có một ví dụ cụ thể hơn về "chương trình" f. Hãy nhớ rằng Knuth sẽ sử dụng ngôn ngữ lắp ráp sau này; điều này cho biết cách anh ta nhìn vào các chương trình (các tuyên bố nguyên tử được kết nối bằng các bước nhảy).


1
Bây giờ tôi đã hiểu rõ hơn một chút về những gì đang xảy ra. Tuy nhiên, hai điều vẫn chưa rõ ràng và tôi thực sự sẽ đánh giá cao nếu bạn có thể mở rộng câu trả lời của mình. Đầu tiên, θj, j, aj, bj - các chuỗi và số này là gì? Họ đại diện cho cái gì? Nếu tôi hiểu chính xác, aj và bj đại diện cho số bước hoặc bộ đếm lệnh cho trạng thái j + 1. Nhưng tôi không chắc chuỗi θj, ψj có nghĩa là gì. Bạn có thể giải thích ý của bạn là gì nếu "nếu bạn sửa j, j, aj, bj, bạn có một chương trình" không? Hay đúng hơn, làm thế nào tôi sẽ sửa nó cho một số ví dụ?
Georgy Bolyuba ngày

@GeorgyBolyuba: Bạn nói đúng về ajbj. Trạng thái của chương trình là một chuỗiσ và một "quầy chương trình" j. θjψj được sử dụng để sửa đổi trạng thái đó (xem trường hợp thứ hai của f). Họ có thể có tất cả các loại hình dạng; nó thực sự phụ thuộc vào cách bạn mã hóa trạng thái như một chuỗi. Xem cuốn sách cho một ví dụ.
Raphael

5

Văn bản đó mô tả mã giả (Python) sau:

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])  

Hàm f có lẽ sẽ được áp dụng nhiều lần.

Ba điểm cuối cùng là tất cả những gì bạn thực sự cần một khi bạn hiểu các ký hiệu. Tất cả những gì xuất hiện trước đó là một chút tương tự để giải thích cách Python hoạt động trước khi đưa ra mã Python.


À, đó là một máy Turing.
Stefano Borini

1
Thay vào đó, nó là một mô hình tính toán khác với sức mạnh tương đương với máy Turing.
Yuval Filmus

Vâng, ba dòng dưới trích dẫn của bạn Knuth nói rằng điều này tương đương với máy Turing, vì vậy có lẽ bạn đã biết điều này khi bạn hỏi. Tôi nghĩ rằng bạn đang yêu cầu giúp đỡ với ký hiệu. Bây giờ tôi không biết bạn muốn hỏi cái gì
rgrig
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.