Cho một ngôn ngữ L được xác định bởi Máy Turing quyết định ngôn ngữ đó, liệu có thể xác định thuật toán liệu L có nằm trong NP không?
Cho một ngôn ngữ L được xác định bởi Máy Turing quyết định ngôn ngữ đó, liệu có thể xác định thuật toán liệu L có nằm trong NP không?
Câu trả lời:
Thứ nhất, theo Định lý Rice, đây là một tài sản của các TM chỉ phụ thuộc vào ngôn ngữ mà họ tính toán, vì vậy nó không thể tính toán được.
Nhưng, hơn thế nữa, người ta biết rằng bộ chỉ số (nghĩa là tập hợp các TM tính toán ngôn ngữ trong ) là ( trong hệ thống phân cấp số học tính toán, không phải là phân cấp số học tính toán, không phải là hệ thống phân cấp đa thức).
Những câu hỏi như thế này lần đầu tiên được điều tra bởi Hajek . Để biết thêm, xem ví dụ bài viết này của Ken Regan.
Một vài cốm tuyệt vời từ giấy của Hajek:
Câu trả lời cho câu hỏi theo nghĩa đen của bạn là không, như Joshua Grochow đã chỉ ra.
Tuy nhiên, như Holger đã nêu, có thể kiểm tra theo thời gian tuyến tính xem máy Turing không xác định (NTM) có tự "đồng hồ" và dừng lại sau n ^ k bước cho một số k không đổi, thông qua một số cách mô phỏng chuẩn của đồng hồ (chẳng hạn như mã bên dưới). Thông thường khi một tờ giấy hoặc cuốn sách sẽ gợi ý (không chính xác) rằng có thể xác định xem một NTM có phải là thời gian đa thức hay không, đây là ý nghĩa thực sự của chúng. Có lẽ đây là lý do tại sao bạn đặt câu hỏi? (Tôi đã có cùng một câu hỏi khi lần đầu tiên tôi học lý thuyết phức tạp và ở đâu đó đã thấy tuyên bố rằng có thể kiểm tra xem TM có phải là đa thời gian không.) Câu hỏi thực sự là tại sao người ta có thể muốn làm điều này, mà tôi sẽ thảo luận dưới đây sau khi giải thích như thế nào .
Có rất nhiều cách để thêm một tính năng đồng hồ như vậy. Ví dụ, hãy tưởng tượng trên đầu vào x có độ dài n, luân phiên thực hiện một câu lệnh của "thuật toán chính" được đặt xung nhịp, và sau đó một câu lệnh của thuật toán sau, kết thúc bằng (một cái gì đó gần với) n ^ k bước:
cho i_1 = 1 đến n cho i_2 = 1 đến n ... cho i_k = 1 đến n không ra đâu; trở về;
Nếu đoạn mã trên trả về trước khi thuật toán chính dừng lại, thì tạm dừng toàn bộ tính toán (giả sử, với sự từ chối).
Thuật toán quyết định xem NTM có ở dạng này hay không, nếu được hiểu là một nỗ lực của thuật toán để quyết định xem đầu vào của nó có phải là NTM đa thời gian hay không, sẽ báo cáo một số phủ định sai: mặc dù một số NTM được bảo đảm tạm dừng trong thời gian đa thức, mặc dù họ không luân phiên thực hiện một câu lệnh của thuật toán bằng một câu lệnh của đồng hồ như mã ở trên (do đó sẽ bị từ chối mặc dù là đa thời gian).
Nhưng không có dương tính giả. Nếu một NTM vượt qua bài kiểm tra, thì nó chắc chắn tạm dừng trong thời gian đa thức, do đó nó xác định một số ngôn ngữ NP. Tuy nhiên, có lẽ hành vi của thuật toán chính cơ bản của nó bị thay đổi, nếu đồng hồ đôi khi hết trước khi thuật toán chính dừng lại, khiến cho việc tính toán bị từ chối mặc dù thuật toán chính có thể đã chấp nhận nếu có đủ thời gian để kết thúc. Do đó, ngôn ngữ quyết định có thể khác với ngôn ngữ chính. Nhưngvà đây là chìa khóa, nếu trên thực tế thuật toán chính được thực hiện là thuật toán đa thức thời gian chạy trong thời gian p (n) và nếu hằng số k trong đồng hồ đủ lớn để n ^ k> p (n), thì thuật toán chính sẽ luôn dừng lại trước khi hết giờ. Trong trường hợp này, câu trả lời của thuật toán chính không bị thay đổi, do đó, thuật toán chính và NTM có xung nhịp mô phỏng nó do đó quyết định cùng một ngôn ngữ NP.
Sao nó lại quan trọng? Điều này có nghĩa là có thể "liệt kê tất cả các ngôn ngữ NP" (như tôi đã nói trong tài liệu thường được nêu không chính xác là "quyết định liệu một NTM đã cho là đa thời gian" hay "liệt kê tất cả các NTM đa thời gian"). Chính xác hơn, có thể liệt kê một danh sách vô hạn của M_1 M_2 M_2, ..., với các thuộc tính
Điều không xảy ra là mọi NTM thời gian đa thức đều có trong danh sách. Nhưng mỗi ngôn ngữ NP có vô số NTM đại diện cho nó. Do đó, mỗi ngôn ngữ NP được đảm bảo có ít nhất một số NTM đại diện của nó trong danh sách, cụ thể là tất cả các ngôn ngữ NTM đó với chỉ số đủ lớn k mà n ^ k vượt quá thời gian chạy của M_k.
Điều này rất hữu ích để thực hiện các thủ thuật như đường chéo, yêu cầu liệt kê một cách thuật toán các danh sách vô hạn (hoặc không giới hạn) như vậy của tất cả các ngôn ngữ NP. Và tất nhiên, toàn bộ cuộc thảo luận này áp dụng cho nhiều loại máy khác ngoài các NTM đa thời gian, chẳng hạn như các TM xác định đa thời gian.