Đây chỉ là một nhận xét mở rộng. Một vài lần trước tôi đã hỏi (bản thân mình :-) một NTM đa nhiệm nhanh như thế nào chấp nhận một ngôn ngữ hoàn chỉnh NP (được mã hóa hợp lý) có thể. Tôi nảy ra ý tưởng này:
3-SAT vẫn hoàn thành NP ngay cả khi các biến được biểu thị bằng unary. Đặc biệt chúng tôi có thể chuyển đổi một điều khoản - giả sử - một tùy ý 3-SAT công thức φ trên n biến và m khoản trong một chuỗi các ký tự trên bảng chữ cái Σ = { + , - , 1 } trong đó mọi sự xuất hiện biến được thể hiện bằng unary:(xi∨¬xj∨xk)φnmΣ={+,−,1}
+1i0,−1j,+1k
Ví dụ, có thể được chuyển đổi sang:(x2∨−x3∨+4)
+110-1110+11110
Vì vậy, chúng ta có thể chuyển đổi công thức 3-SAT trong một chuỗi tương đương U ( φ i ) nối các mệnh đề của nó. Ngôn ngữ L U = { U ( φ i ) | φ i ∈ 3 - S Một T } là NP-đầy đủ.φiU(φi)LU={U(φi)∣φi∈3−SAT}
Một NTM 2 băng có thể quyết định nếu một chuỗi trong thời gian 2 | x | theo cách nàyx∈LU2|x|
- đầu thứ nhất quét đầu vào từ trái sang phải và với logic bên trong, nó sẽ theo dõi khi nó nhập hoặc thoát một mệnh đề hoặc đến cuối công thức. Bất cứ khi nào nó tìm thấy dấu hoặc - , đầu thứ hai bắt đầu di chuyển đúng với nó trên 1 i đại diện cho x i . Ở cuối 1 i , nếu đầu thứ hai ở trên 0 thì nó đoán giá trị thật + hoặc - (nó thực hiện một bài tập) và viết nó vào băng thứ hai; nếu nó tìm thấy dấu + hoặc - thì biến đó đã được gán một giá trị;+−1ixi1i0+−+−
- trong cả hai trường hợp, sử dụng logic bên trong, NTM khớp với giá trị chân lý dưới đầu thứ hai (phép gán) với giá trị nhìn thấy hoặc - ; nếu chúng khớp thì mệnh đề được thỏa mãn;+−
- sau đó đầu thứ hai có thể trở về ô ngoài cùng bên phải;
- với logic bên trong, NTM có thể theo dõi nếu tất cả các mệnh đề được thỏa mãn trong khi đầu thứ nhất di chuyển về cuối của đầu vào.
Thí dụ:
Tape 1 (formula) Tape 2 (variable assignments)
+110-1110+11110... 0000000000000...
^ ^
+110-1110+11110... 0000000000000...
^ ^
+110-1110+11110... 0000000000000...
^ ^
+110-1110+11110... 0+00000000000... first guess set x2=T; matches +
^ ^ so remember that current clause is satisfied
+110-1110+11110... 0+00000000000...
^ ^
...
+110-1110+11110... 0+00000000000...
^ ^
...
+110-1110+11110... 0++0000000000... second guess set x3=T
^ ^ don't reject because current
clause is satisfied (and in every
case another literal must be parsed)
Thời gian có thể giảm xuống nếu chúng ta thêm một số ký hiệu dự phòng vào biểu diễn mệnh đề:|x|
+1i0i,−1j0j,+1k0k...+++
+++
0i+++++