Ở trường đại học, chúng tôi đã học về lý thuyết tính toán nói chung và máy Turing cụ thể hơn. Một trong những kết quả lý thuyết tuyệt vời là với chi phí của một bảng chữ cái (ký hiệu) có khả năng lớn, bạn có thể giảm số lượng trạng thái xuống chỉ còn 2.
Tôi đã tìm kiếm các ví dụ về các máy Turing khác nhau và một ví dụ phổ biến được trình bày là trình so khớp / kiểm tra ngoặc đơn. Về cơ bản, nó kiểm tra xem một chuỗi dấu ngoặc đơn, ví dụ (()()()))()()()
có được cân bằng không (ví dụ trước sẽ trả về 0 cho không cân bằng).
Hãy thử vì tôi có thể chỉ có thể trở thành một cỗ máy ba trạng thái. Tôi rất muốn biết liệu có ai có thể giảm điều này xuống mức tối thiểu lý thuyết là 2 hay không và cách tiếp cận / trạng thái / biểu tượng của họ là gì!
Chỉ cần làm rõ, các dấu ngoặc đơn được "kẹp" giữa băng trống để trong ví dụ trên
- - - - - - - (()()()))()()() - - - - - - -
sẽ là đầu vào trên băng. Bảng chữ cái sẽ bao gồm (
, )
, 1
, 0
, -
, và *halt*
nhà nước không được tính là một trạng thái.
Để tham khảo cách tiếp cận ba trạng thái tôi có như sau: Mô tả các trạng thái:
State s1: Looks for Closing parenthesis
State s2: Looks for Open parenthesis
State s3: Checks the tape to ensure everything is matched
Symbols: ),(,X
Chuyển tiếp được liệt kê như:
Action: State Symbol NewState WriteSymbol Motion
// Termination behavior
Action: s2 - *halt* 0 -
Action: s1 - s3 - r
//Transitions of TM
Action: s1 ( s1 ( l
Action: s1 ) s2 X r
Action: s1 X s1 X l
Action: s2 ( s1 X l
Action: s2 X s2 X r
Action: s3 ( *halt* 0 -
Action: s3 X s3 X r
Action: s3 - *halt* 1 -
Tha thứ cho cách viết không chính thức này. Tôi vẫn đang học các cấu trúc lý thuyết đằng sau này.