Có một ví dụ rõ ràng về thuật toán có thuộc tính sao cho nếu thì thuật toán này không chạy trong thời gian đa thức và nếu thì nó chạy trong thời gian đa thức?
Có một ví dụ rõ ràng về thuật toán có thuộc tính sao cho nếu thì thuật toán này không chạy trong thời gian đa thức và nếu thì nó chạy trong thời gian đa thức?
Câu trả lời:
Nếu bạn cho rằng có thể chứng minh được bằng PA (hoặc ZFC), một ví dụ tầm thường là như sau:
Input: N (integer in binary format)
For I = 1 to N do
begin
if I is a valid encoding of a proof of P = NP in PA (or ZFC)
then halt and accept
End
Reject
Một ví dụ khác - ít tầm thường hơn - không dựa vào giả định nào như sau:
Input: x (boolean formula)
Find the minimum i such that
1) |M_i| < log(log(|x|)) [ M_1,M_2,... is a standard fixed TM enumeration]
2) and M_i solves SAT correctly
on all formulas |y| < log(log(|x|))
halting in no more than |y|^|M_i| steps
[ checkable in polynomial time w.r.t. |x| ]
if such i exists simulate M_i on input x
until it stops and accept/reject according to its output
or until it reaches 2^|x| steps and in this case reject;
if such i doesn't exist loop for 2^|x| steps and reject.
Nếu , thuật toán sẽ sớm hay muộn - giả sử trên đầu vào - tìm chỉ số của máy Turing thời gian đa thức (hoặc phiên bản đệm của nó) giải SAT trong và cho tất cả các đầu vào lớn hơn sẽ tiếp tục mô phỏng nó và tạm dừng trong thời gian đa thức (lưu ý rằng bước 2 cũng có thể được kiểm tra trong thời gian đa thức). Nói cách khác, nếu thuật toán giải SAT trong thời gian đa thức trên một số trường hợp hữu hạn.