Tại sao biểu tượng trống không được coi là một phần của bảng chữ cái đầu vào của máy Turing?


12

Các định nghĩa về máy Turing luôn rõ ràng về biểu tượng trống không phải là một phần của bảng chữ cái đầu vào.

Tôi tự hỏi những gì đi sai khi bạn sẽ làm cho nó một phần của bảng chữ cái đầu vào, bởi vì có hiệu quả các biểu tượng trống đã dường như là một phần của đầu vào.

Để giải thích rằng "dường như" trong câu cuối cùng, hãy xem xét những điều sau đây.

Trong thiết lập mặc định, vô số ký hiệu trống xuất hiện ở bên phải của đầu vào. Khi đầu băng di chuyển qua biểu tượng trống đầu tiên, tính toán có thể tiếp tục, vì nó không cần phải là trạng thái chấp nhận hoặc từ chối.

Bây giờ, giả sử việc tính toán sau đó sẽ viết các ký hiệu từ bảng chữ cái đầu vào bên phải của biểu tượng trống đầu tiên đó, sau đó quay lại vị trí ngoài cùng bên trái trong khi cũng trở về trạng thái bắt đầu. Sau đó, nó sẽ 'bắt đầu lại' với một băng khác. Thực tế, bây giờ nó bắt đầu với một đầu vào khác, trong đó có các ký hiệu đầu vào ở bên phải của khoảng trống không có trước đó. Các đầu vào dường như có hiệu quả bao gồm các biểu tượng trống. Hành vi tiếp theo của máy bây giờ cũng có thể khác: sau khi gặp lại ô trống, bây giờ nó sẽ gặp các biểu tượng khác nhau ở bên phải.

Giả sử kịch bản này thực sự có thể xảy ra, tại sao bạn không xem xét phần biểu tượng trống của bảng chữ cái đầu vào và tại sao bạn không cho phép đưa nó vào như một phần của đầu vào 'ban đầu'?

Có lẽ nó chỉ là một cách để xác định đầu vào sao cho nó không phải là vô hạn?


Khi tôi ở trong lớp, tôi đã thiết kế các máy Turing sử dụng cho phép (ký hiệu trống cục bộ) trong đầu vào của chúng làm dấu tách trường.
Joshua

Câu trả lời:


22

Lý do chính là nó cho phép máy phát hiện phần cuối của đầu vào: đó là (ký tự trước) trống đầu tiên. Nếu bạn cho phép khoảng trống trong đầu vào, máy không bao giờ có thể biết liệu nó có thể tìm thấy thêm đầu vào hay không bằng cách quét xa hơn về bên phải. Tất nhiên, bạn có thể giải quyết điều đó bằng việc có một đặc biệt "cuối đầu vào" nhân vật nhưng sau đó bạn phải nhấn mạnh rằng điều đó không thể xuất hiện trong đầu vào, vì vậy bạn vừa chuyển mức một vấn đề sâu sắc hơn.

Nó cũng làm cho các điều kiện ban đầu dễ dàng hơn nhiều để xác định: đầu vào là phần không trống của băng ban đầu, phải hữu hạn và tiếp giáp nhau. Và nếu bạn muốn một ký tự trống là một phần của bảng chữ cái đầu vào, bạn luôn có thể thêm một ký tự phụ (gọi nó là "khoảng trắng" hoặc một cái gì đó) và để máy hoạt động theo cách bạn muốn khi nhìn thấy nó.


1
Tất nhiên, không thể xác định được kết thúc của đầu vào ban đầu, một số tính toán sẽ là không thể. Nhưng nếu không thì không có gì đặc biệt về biểu tượng. Và tôi đoán đó là vấn đề của nền kinh tế thuật ngữ để sử dụng biểu tượng trống, vì dù sao bạn cũng cần cái đó trong bảng chữ cái của bạn. Tôi nghĩ nó sẽ rõ ràng hơn với tôi khi ban đầu được xác định bằng một biểu tượng đầu vào rõ ràng và một nhận xét nó không thực sự cần thiết và thường bị bỏ qua.
Nhầm lẫn

1
{00}0,{11}1,{10,01}b

2
Xem như máy Turing cần các quy tắc chi phối những gì nó làm nếu nó đọc một khoảng trống và nó có thể có một quy tắc bảo nó viết trống, không có nghĩa là trống thực sự là một phần của bảng chữ cái của nó? Tôi không thấy lý do tại sao đầu vào có thể không chứa khoảng trống. Làm thế nào về việc mã hóa các mục đầu vào bằng cách sử dụng các ký tự không trống và một ô trống làm dấu phân cách? Sau đó, nhiều khoảng trống liên tiếp chỉ ra kết thúc của đầu vào.
Rosie F

3
@YonatanN Chắc chắn rồi. Đó là "đơn giản" nhưng có một biểu tượng trống thì đơn giản hơn.
David Richerby

3
@RosieF Trống là một phần của bảng chữ cái băng; bảng chữ cái đầu vào là một tập hợp con của điều đó. Và, chắc chắn, bạn có thể thiết lập các quy ước về cách đầu vào có thể chứa khoảng trống trong các trường hợp nhất định (như bạn đã làm) nhưng điều đó chỉ làm cho các định nghĩa phức tạp hơn. Các định nghĩa phức tạp hơn có nghĩa là khó chứng minh mọi thứ về máy Turing. Và, vì máy Turing thực sự chỉ được sử dụng để chứng minh mọi thứ (nếu bạn muốn thiết kế một máy tính thực tế, nó sẽ không phải là một TM), đó không phải là một sự đánh đổi tốt.
David Richerby

6

Bạn có thể định nghĩa biểu tượng trống là một phần của bảng chữ cái. Vấn đề với điều đó là nếu một máy với b010010b đầu vào (trong đó b là viết tắt của Turing trống ) không bao giờ đọc quá khứ b thứ hai, sau đó máy sẽ cư xử chính xác theo cùng một cách trên tất cả các đầu vào bắt đầu với b010010b.

Các máy Turing này được gọi là máy Turing tiền tố , và chúng rất hữu ích để chứng minh một số định lý về độ phức tạp Kolmogorov.


5

Câu trả lời rất ngắn: bảng chữ cái băng là tập hợp các biểu tượng có thể xuất hiện trên băng và nó bao gồm biểu tượng trống. Các bảng chữ cái đầu vào là tập hợp các biểu tượng mà có thể xuất hiện trong đầu vào ban đầu , và nó không bao gồm các biểu tượng trống. Bảng chữ cái chính mà máy quan tâm là bảng chữ cái băng: nó vẫn cần các quy tắc để làm gì khi thấy một ô trống chẳng hạn.

Sự khác biệt này rất quan trọng, như những người khác đã nói, để máy có thể biết đầu vào của nó kết thúc ở đâu. Đó là cùng một lý do mà bạn không thể (một cách hữu ích) đặt một ký tự 0 ở giữa một chuỗi trong C: ký tự 0 được dành riêng để có nghĩa là "ký tự khác không cuối cùng trước khi đây là kết thúc của dữ liệu, vì vậy khi bạn thấy điều này, bạn đã hoàn thành ". Nếu bạn cần mong đợi các ký tự không ở giữa chuỗi, việc viết strlensẽ khó hơn rất nhiều.

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.