Máy Turing hai trạng thái cho khớp ngoặc


9

Ở 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.


Chúng ta có được phép sử dụng một bảng chữ cái lớn hơn không?
Raphael

@Raphael Theo kết quả lý thuyết, người ta có thể trao đổi trạng thái cho bảng chữ cái và ngược lại. Vì vậy, giảm các trạng thái xuống hai có nghĩa là rất có thể bạn sẽ phải sử dụng một bảng chữ cái lớn hơn. Vì vậy, có, câu trả lời ngắn gọn là Bảng chữ cái có thể lớn như mong muốn
Four_FUN

Tôi nghĩ, trong một băng TM hai, điều này có thể được thực hiện mà không có biểu tượng phụ và.
Karolis Juodelė

@Four_FUN bạn đến từ MIT?

Câu trả lời:


8


_ ( ) [ { / \ _

q0:  _ -> accept  // accept on empty string and on balanced parenthesis
     ( -> {,R,q1  // mark the first open "(" with "{" and goto q1
     ) -> reject  // reject if found unbalanced ")"
     \ -> /,L,q0  // go left
     / -> \,R,q0  // go right

q1:  ( -> [,R,q1  // replace "(" with "[" and continue ...
     ) -> /,L,q1  // ... until first ")", replace it with "/" and goto left
     [ -> \,R,q1  // found matching "(" bracket, goto right and search for another ")"
     _ -> reject  // no ")" found for the first "{", reject
     { -> \,R,q0  // this must be the last match, goto q0 and check if it is true
     \ -> /,L,q1  // go left
     / -> \,R,q1  // go right

Bạn có thể thấy nó tại nơi làm việc bằng cách sử dụng một trình giả lập trực tuyến máy Turing ; mã nguồn là:

0 _ Y r halt
0 ( { r 1
0 ) N r halt
0 \ / l 0
0 / \ r 0
1 ( [ r 1
1 ) / l 1
1 [ \ r 1
1 _ N r halt
1 { \ r 0
1 \ / l 1
1 / \ r 1

Lưu ý cuối cùng: nếu bạn muốn xem làm thế nào kỹ thuật này có thể được đẩy đến giới hạn, hãy đọc (và cố gắng hiểu :-) việc xây dựng máy Universal Turing với 2 trạng thái và 18 biểu tượng của Y. Rogozhin trong "Turing phổ quát nhỏ máy móc "


Chúng tôi đã không quyết định rằng các câu trả lời chỉ trình bày mã nguồn là không tốt cho Khoa học Máy tính ? ;)
Raphael

1
@Raphael: Tôi đồng ý với bạn, nhưng tôi có thể được xem giống như một phụ lục của bạn (điều đó có vẻ tốt, ngay cả khi tôi không kiểm tra chi tiết). Tôi sẽ thêm một lưu ý về điều này.
Vor

1
@Raphael: Tôi đã mã hóa nó chỉ để giải trí khi cố gắng giảm thiểu các ký hiệu băng và nó "có vẻ" :-) để hoạt động nên tôi quyết định đăng nó.
Vor

@Vor. Cảm ơn bạn rất nhiều vì đầu vào bổ sung của bạn vào vấn đề này. Tất cả điều này nói với tôi là tôi cần thực hành nhiều hơn trong công cụ này. Cảm ơn bạn đã đăng mã nguồn của bạn dù sao, mặc dù lý thuyết là những gì tôi đã theo sau.
Four_FUN

1
@Four_FUN: Rogozhin Universal TM (2.18) là máy Turing tiêu chuẩn (nghĩa là ngoài đầu vào băng ban đầu của nó chỉ chứa các ký hiệu trống) mô phỏng hệ thống 2 thẻ tùy ý (là mô hình phổ quát). Biểu tượng 2 trạng thái 3 là máy Turing yếu (băng ban đầu cần được lấp đầy bằng một chuỗi vô hạn của mẫu) và tính phổ quát được "đạt" mô phỏng Quy tắc tự động 110 của tế bào (đã được chứng minh là hoàn thành Turing ). Có một bằng chứng (được tuyên bố?) Rằng một TM tiêu chuẩn (2,3) không thể hoàn thành Turing.
Vor

7

Câu trả lời ngu ngốc: kết quả của bạn hứa hẹn rằng có một máy Turing phổ quát với hai trạng thái. Xây dựng bất kỳ TM nào cho ngôn ngữ Dyck, tính toán chỉ mục của nó và mã hóa nó vào máy vạn năng.

{#,(,),x}a^a

  • q0

    )aa^)x^
    )#x^q1

    (^(^x
    )^#

  • q1(^+x^#x^


  1. x

Nếu bạn không phiền tôi hỏi, làm thế nào chính xác giải pháp của tôi hứa hẹn một TM phổ quát với hai trạng thái? (giải pháp rất thông minh btw. thnak bạn cho đầu vào của bạn)
Four_FUN

1
@Four_FUN: bởi vì bạn nói trong câu hỏi của mình: "... 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 ..." . .. vì vậy bạn cũng có thể chọn một máy Turing phổ dụng tùy ý và giảm số lượng trạng thái xuống chỉ còn 2. Và nếu bạn thực hiện một số thử nghiệm, bạn cũng sẽ nhận ra rằng không khó để thực hiện một quy trình tự động chuyển đổi một TM tùy ý thành tương đương 2 trạng thái TM (nếu bạn không quan tâm đến việc giảm thiểu số lượng ký hiệu bảng chữ cái).
Vor
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.