Có phải mọi vấn đề NP-hard đều có thể tính toán được không?


Câu trả lời:


14

Không, một vấn đề NP -hard không cần phải tính toán. Định nghĩa khá đầy đủ: một vấn đề LNP -hard nếu vấn đề đó có giải pháp đa thời gian ngụ ý mọi vấn đề trong NP đều có giải pháp đa thời gian (nghĩa là giảm L tồn tại cho mọi vấn đề trong NP .).

Các vấn đề không thể tính toán được sau đó rất khó khăn: giả sử chúng ta có thể giải quyết một trong thời gian đa thức. Sau đó, chúng tôi sử dụng bằng chứng rằng nó không thể tính toán được để cho rằng đó là cả tính toán và không thể tính toán được, một mâu thuẫn. Từ sự giả dối này, chúng ta có thể rút ra bất cứ điều gì, cụ thể là có một thuật toán thời gian đa thức cho bất kỳ vấn đề NP chúng ta đang xem xét.

Ví dụ, hãy xem xét các vấn đề ngăn chặn H . Chúng ta có thể giảm bất kỳ ngôn ngữ NP nào từ A xuống H như sau, giả sử chúng ta có trình kiểm tra đa thời gian f(s,c) để kiểm tra xem c có phải là chứng chỉ cho sA :

  • Cho đầu vào s
  • Xây dựng (nhưng không chạy) Turing Machine M mà có đầu vào x cố gắng mỗi giấy chứng nhận c và tạm dừng nếu c là một giấy chứng nhận kiểm định rằng sA .
  • Trả về (nghĩa là trả về đúng iff M dừng lại ở đầu vào )H(M,x)Mx

Do đó, với một lệnh gọi đến thuật toán đa thời gian giải bài toán dừng, chúng ta có thể giải bất kỳ bài toán nào trong thời gian đa thức.NP

Việc giảm như vậy là không hữu ích, bởi vì tất cả những gì nó làm là nếu "nếu sai thì có gì đó". Chúng tôi đã biết rằng không có thuật toán polytime cho các vấn đề không thể giải quyết.


7
"Định nghĩa khá đầy đủ", nhưng không phải là câu nói sau câu trả lời của bạn.

Tôi có một câu hỏi về cái này. Tôi có thể tưởng tượng một hàm giải quyết vấn đề tạm dừng cho tập hợp chương trình lớn nhất có thể theo một số ràng buộc thích hợp, nhưng tôi có thể tưởng tượng hàm này vẫn không thể tính toán được (theo nghĩa là chúng ta sẽ không bao giờ tìm thấy nó trong một khoảng thời gian vô hạn) . Tuy nhiên, nếu chúng ta bằng cách nào đó đã có giải pháp cho nó, tôi thậm chí còn không rõ ràng rằng nó sẽ giải quyết tất cả các vấn đề NP-hard nhất thiết. Vì vậy, logic trong câu trả lời này không tuân theo (có nghĩa là không thể giải quyết được! = Không thể tính toán được), hoặc lý luận của tôi là thiếu sót (có khả năng). Vậy lỗ hổng là gì?
Mehrdad

12
Hầu hết câu trả lời này là không chính xác, bao gồm cả định nghĩa về NP cứng của bạn: vấn đề A là NP khó nếu "đối với mọi vấn đề NP B, có sự giảm đa thời gian từ B xuống A." Điều đó không giống với "nếu A là đa thời gian, thì P = NP." (Cái sau là hậu quả của cái trước, nhưng không phải ngược lại.) Đặc biệt, gần như chắc chắn có những vấn đề không thể tính toán được mà cũng không thể làm NP khó. Tôi đã không tìm ra các chi tiết, nhưng vấn đề về tư cách thành viên trong một bộ đủ chung chung (theo nghĩa là bắt buộc) sẽ làm nên chuyện. Bộ tạm dừng, cụ thể, là NP-hard, tuy nhiên, bằng cách giảm của bạn.
mlh

7
Hãy suy nghĩ về việc giảm đa thời gian từ A xuống B như thế này: đó là một chương trình chạy trong thời gian đa thức, nhưng nó có khả năng đặc biệt để truy vấn, trong một bước duy nhất, một lời tiên tri trả lời các trường hợp của vấn đề B. Bất kể là có một thuật toán đa thời gian cho B, hoặc thậm chí liệu B có thể tính toán được hay không, vẫn có ý nghĩa khi đặt câu hỏi sau: giả sử rằng nhà tiên tri trả lời đúng các câu hỏi đã hỏi (trong một bước duy nhất), chương trình đang được hỏi chạy trong thời gian đa thức và giải quyết chính xác các trường hợp của vấn đề A?
mlh

2
@MikeHaskel Sự tương tự lời tiên tri của bạn chỉ chính xác nếu, sau khi truy vấn lời tiên tri, chương trình phải dừng lại với cùng một câu trả lời như lời tiên tri đó. Mặt khác, co-SAT giảm xuống SAT: truy vấn lời tiên tri và phủ nhận. Trong một số khái niệm giảm, ví dụ như giảm Turing, điều này có thể được chấp nhận, nhưng trong việc giảm đa thời gian tiêu chuẩn, hoặc thậm chí là giảm nhiều lần, thì không.
chi

16

Dường như có một số nhầm lẫn đáng kể trong cộng đồng này liên quan đến câu hỏi này. Tôi sẽ đưa ra câu trả lời chi tiết với hy vọng làm sạch nước và làm sáng tỏ mối quan hệ giữa khả năng tính toán và độ cứng NP.

Đầu tiên, tôi tin rằng việc rõ ràng và rõ ràng về các định nghĩa khác nhau có liên quan sẽ giải quyết được rất nhiều sự nhầm lẫn.

Một chuỗi là một chuỗi các ký tự hữu hạn từ một số bảng chữ cái hữu hạn cố định.

Một vấn đề quyết định là một tập hợp các chuỗi. (Tập này thường là vô hạn.) Hãy nghĩ về vấn đề quyết định khi kiểm tra các chuỗi cho một số thuộc tính: các chuỗi có thuộc tính nằm trong tập hợp và các chuỗi không có thuộc tính thì không.

Giả sử chúng ta có hai vấn đề quyết định, B . Nói Ađa thức thời gian có thể rút gọn thành B nếu có một số đa thức p ( x ) và thuật toán một số thuật toán M sao cho tất cả các chuỗi s ,ABABp(x)Ms

  • Nếu bạn cung cấp với đầu vàoM, M dừng lại dưới các bước p ( | s | ) (trong đó | s | là độ dài của chuỗi s ) và xuất ra chuỗi M ( s ) .sMp(|s|)|s|sM(s)
  • là trong Một khi và chỉ khi M ( s ) là trong B .sAM(s)B

Một vấn đề quyết định NP-hard nếu, mỗi NP vấn đề quyết định Một , Một là thời gian đa thức rút gọn về B .BAAB

Một vấn đề quyết định có thể tính toán được nếu có thuật toán , với tất cả các chuỗi s ,Ms

  • Nếu bạn cung cấp với đầu vào s , M dừng lại và xuất ra "có" hoặc "không".MsM
  • Đầu ra là "có" nếu A và "không" nếu không.sA

Với các định nghĩa trên, chúng tôi có thể ngay lập tức làm rõ những gì tôi nghĩ có thể là sự nhầm lẫn gốc trong câu hỏi của bạn: không có gì trong các định nghĩa về vấn đề quyết định, giảm hoặc độ cứng NP đòi hỏi các vấn đề quyết định phải được tính toán. Các định nghĩa làm cho ý nghĩa hoàn hảo nghĩ về các vấn đề quyết định như các chuỗi tùy ý, và các bộ này thực sự có thể rất khó chịu.


Điều đó để lại hai câu hỏi trên bàn:

  1. Các định nghĩa bỏ ngỏ khả năng các hàm không tính toán được có thể là NP-hard. Có thực sự không tính toán, chức năng NP-hard?
  2. Có một trực giác nói rằng một vấn đề là NP-hard đang nói rằng nó rất khó để giải quyết. Nói rằng nó không tính toán được cũng giống như nói rằng "thực sự khó" để giải quyết. Vì vậy, có phải tất cả các vấn đề không tính toán được NP-hard?

Câu hỏi 1 dễ trả lời hơn. Có hai cách đặc biệt quan trọng để tìm ra các vấn đề quyết định không tính toán được đó là NP-hard. Đầu tiên là vấn đề ngăn chặn: vấn đề ngăn chặn, , có những tài sản mà mỗi tính toán vấn đề quyết định là thời gian đa thức rút gọn về H . Vì các bài toán NP là có thể tính toán được, nên mọi bài toán NP đều có thể rút ngắn thời gian đa thức thành H , vì vậy H là NP-hard.HHHH

Cách quan trọng khác để xây dựng một vấn đề NP-hard không tính toán được là quan sát rằng chúng ta có thể kết hợp bất kỳ vấn đề NP-hard nào đã biết với bất kỳ vấn đề không thể tính toán nào đã biết. Đặt là NP-hard và B không tính toán được. Hình thành các vấn đề quyết định Một B như sau: MộtABAB chứa những chuỗi có dạng "0, tiếp theo là một chuỗi trong một " và những dạng "1, tiếp theo là một chuỗi trong B ". Một B là NP-khó vì chúng ta có thể biến bất kỳ giảm (của bất kỳ vấn đề) để Một thành giảm đến A BABABABAAB: chỉ cần điều chỉnh thuật toán để xuất thêm "0" ở phía trước chuỗi đầu ra của nó. là không tính toán, kể từ khi máy tính A B đòi hỏi quyết định chuỗi bắt đầu bằng "1" này nằm trong bộ; Điều này là không thể, vì B là không thể tính toán được.ABABB


Câu hỏi 2 khó hơn đáng kể, nhưng trên thực tế, có những vấn đề quyết định không tính toán được mà không phải là NP-hard (giả sử P NP). Câu trả lời tốt của Yuval xây dựng một vấn đề quyết định rõ ràng như vậy. (Đối với bất kỳ lý thuyết computability trong phòng, bất kỳ "Cohen Π 0 1 -generic" sẽ làm các trick, là tốt.) Tôi sẽ phá vỡ tại sao trực giác rằng "vấn đề NP-khó rất khó, vấn đề không phải là tính toán là khó khăn hơn " sai.Π10

Cả NP-độ cứng và không tính toán đều nói rằng một vấn đề là "khó" theo nghĩa rất chung chung, nhưng chúng rất khác nhau và không nên gộp lại thành một loại hiện tượng giống nhau. Cụ thể, độ cứng NP là một thuộc tính "tích cực": một vấn đề NP-hard khó hiểu theo nghĩa, khi được cấp quyền truy cập vào bảng cheat cho A , bạn có thể giải quyết một loại vấn đề khóAA . Mặt khác, tính không tính toán là một thuộc tính "âm": một vấn đề không thể tính toán khó hiểu theo nghĩa là bạn không thể giải quyết A bằng một loại tài nguyên nhất địnhAA .

("Buộc," nhân tiện, là kỹ thuật được sử dụng để tạo ra " chung chung Cohen " mà tôi đã đề cập. Rất rất mơ hồ, buộc là một cách chung để tạo ra những thứ "chung chung" không có thuộc tính tích cực và mọi thuộc tính tiêu cực. Đó là lý do tại sao việc ép buộc có thể trực tiếp tạo ra một vấn đề không thể tính toán hay NP-hard.)Π10


2
Bạn không thể xây dựng một ngôn ngữ không thể giải quyết được mà không phải NP-hard bằng cách chéo? Chéo chéo với tất cả các người quyết định và tất cả các giảm polytime từ SAT.
Yuval Filmus

1
@YuvalFilmus Điều đó có thể hoạt động, yeah. Tôi nghĩ rằng việc viết ra các chi tiết về lý do tại sao việc cắt chéo chống lại việc giảm đa thời gian từ SAT là số tiền có thể tương tự như việc thể hiện rằng việc ép buộc hoạt động, tuy nhiên, vì vậy tôi đã không nghĩ về điều đó.
mlh

1
@YuvalFilmus Tôi cũng vừa nói thêm rằng bạn phải giả sử P NP: chắc chắn có một bước trong bằng chứng của tôi là "đọc một số vấn đề trong NP nhưng không phải ở P."
mlh

1
@aelguindy Tôi không chắc phương pháp dễ tiếp cận nhất để chứng minh nó là gì. Tôi đã đề cập đến kỹ thuật cưỡng bức , rất chung chung và mạnh mẽ. Tôi đã học nó từ mọi người, không phải sách giáo khoa, vì vậy cá nhân tôi không biết về một tài liệu tham khảo tuyệt vời về cưỡng bức. Như Yuval đã chỉ ra, tuy nhiên, việc ép buộc có lẽ là quá mức cần thiết: một số đối số trực tiếp hơn liên quan đến đường chéo có thể hoạt động. "Bộ và cấp độ đệ quy" của Soare là một cuốn sách giáo khoa bao gồm rất nhiều kiểu lập luận đó nếu bạn muốn làm quen với nó. Một lần nữa, hầu hết có lẽ là quá mức cần thiết. ...
mlh

1
@aelguindy Ngoài ra, nếu bạn nghĩ về tập hợp các vấn đề quyết định như một không gian tôpô, có lẽ bạn có thể xoa bóp định lý Baire Category để đưa ra một bằng chứng. Định lý này liên quan chặt chẽ với cưỡng bức, nhưng cũ hơn và đơn giản hơn.
mlh

10

Không. NP-Hard có nghĩa là nó khó, hoặc khó hơn các vấn đề NP khó nhất. Theo trực giác, không thể tính toán sẽ làm cho nó khó khăn hơn rất nhiều so với NP.

Wikipedia:

Có những vấn đề quyết định là NP-hard nhưng không phải NP-perfect, ví dụ như vấn đề tạm dừng.

Mọi người đều biết rằng không thể tính toán được


4
Lưu ý rằng, trong khi một số vấn đề không tính toán được (như vấn đề tạm dừng) là NP-hard, điều đó không có nghĩa là tất cả các vấn đề không tính toán được là NP-hard. Xem ý kiến ​​của tôi về câu trả lời của jmite. Độ cứng NP là một thuộc tính tích cực: nó nói rằng câu trả lời cho vấn đề của bạn có thể giúp giải quyết các vấn đề NP. Trở thành NP-hard ngụ ý rằng vấn đề ở một mức độ nào đó là khó khăn. Không phải tất cả các vấn đề khó khăn là NP-hard.
mlh

@MikeHaskel: Sở hữu giải pháp cho vấn đề tạm dừng giúp giảm tất cả các vấn đề thành khó khăn P * của vấn đề tạm dừng ..
Joshua

1
@Joshua: Điều đó vô nghĩa. Nó giống như một mảnh của một bằng chứng. Bạn thậm chí có ý nghĩa gì đối với một vấn đề có số bit hữu hạn trong giải pháp của nó và tại sao bạn nghĩ điều này áp dụng cho tất cả các vấn đề không thể tính toán được? Bạn có ý nghĩa gì bởi "P * dừng"? Phần còn lại của "giảm qua bit thứ n của ..." là gì?
user2357112 hỗ trợ Monica 7/11/2016

1
@Joshua: Có vẻ như vấn đề cốt lõi là bạn cho rằng mọi vấn đề đều tương ứng với máy Turing. Không phải mọi vấn đề tương ứng với một máy Turing. Không có problem()chức năng chúng ta có thể gọi.
user2357112 hỗ trợ Monica

1
Bạn có lẽ nên chuyển cái này để trò chuyện hoặc một cái gì đó
Lemon phá hủy

10

Để đầy đủ, chúng ta hãy chứng minh định lý sau:

Có tồn tại một ngôn ngữ uncomputable mà không phải là NP-hard khi và chỉ khi P NP.

Nếu P = NP thì bất kỳ ngôn ngữ không tầm thường (một trong đó khác với ,{0,1} ) là NP-hard (tập thể dục), và đặc biệt là bất kỳ ngôn ngữ uncomputable là NP-hard.

Bây giờ giả sử rằng P NP. Đặt T i là một số liệt kê của tất cả các máy Turing. Chúng tôi sẽ xây dựng ngôn ngữ L yêu cầu trong các giai đoạn. Ở mỗi giai đoạn chúng ta sẽ giữ một { 0 , 1 , ? } Màu của { 0 , 1 } * mà chúng tôi cũng biểu thị bởi L ; ở đây 0 có nghĩa là chúng ta đã quyết định rằng chuỗi không nằm trong L , 1 có nghĩa là chúng ta đã quyết định rằng chuỗi nằm trong L , và ?TiL{0,1,?}{0,1}L0L1L?có nghĩa là chúng tôi chưa quyết định. Tất cả nhưng chính xác nhiều chuỗi sẽ được tô màu .?

Ở bước , chúng ta nghĩ về T i như một cỗ máy chấp nhận đầu vào của nó, từ chối nó hoặc không bao giờ dừng lại. Nếu T tôi không luôn luôn dừng lại thì chúng ta sẽ không làm gì cả. Nếu T i luôn dừng thì ta tìm một chuỗi x sao cho L ( x ) = ? và đặt L ( x ) : = 0 nếu T i ( x ) chấp nhận và L ( x ) : = 1 nếu T2iTiTiTixL(x)=?L(x):=0Ti(x)L(x):=1 từ chối.Ti(x)

Trong bước , chúng ta nghĩ về T i như một máy tính có chức năng một phần (có thể) trên đầu vào của nó. Nếu T i không phải là tổng hoặc nếu là tổng nhưng không chạy trong thời gian đa thức hoặc nếu là tổng nhưng phạm vi của nó là hữu hạn, chúng tôi sẽ không làm gì cả. Nếu T i là tổng, chạy trong thời gian đa thức và có phạm vi vô hạn, thì chúng ta tìm thấy một chuỗi x sao cho L ( T i ( x ) ) = ? . Nếu x S A T (nghĩa là, nếu x2i+1TiTiTixL(Ti(x))=?xSATxmã hóa một CNF thỏa đáng) sau đó chúng ta đặt và nếu không, chúng ta đặt L ( x ) : = 1L(x):=0L(x):=1 .

Sau vô số bước, chúng ta nhận được Màu của { 0 , 1 } *{0,1,?}{0,1} mà chúng tôi hoàn thành một ngôn ngữ thực tế một cách tùy ý.

Ngôn ngữ kết quả không thể tính toán được: bước 2 tôi đảm bảo rằng T i không tính toán được. Nó cũng không phải là NP-hard, nhưng ở đây lý luận thì tinh tế hơn một chút. Giả sử rằng T i là giảm polytime từ SAT để L . Nếu phạm vi của T i là hữu hạn thì chúng ta có thể biến T i thành một cỗ máy đa thời gian quyết định SAT, bằng cách liệt kê bảng chân lý của L trên phạm vi của T i . Điều này là không thể bởi giả định P NP. Do đó T i có phạm vi vô hạn, nhưng sau đó bước 2 iL2iTiTiLTiTiLTiTi quy tắc ra của nó là giảm từ SAT để L .2i+1L


3

Một ngôn ngữ là NP-hard nếu cho mỗi L 'N P chúng tôi có mà L ' là thời gian đa thức rút gọn về L . Vấn đề chấp nhận cho máy Turing không điều kiệnLLNPLL

ANTM={M,wM is a nondeterministic Turing machine that accepts w}

LNPLMfLANTM

f(x)=M,x

3

Tôi nghĩ điều khiến mọi người nghĩ rằng không có vấn đề NP-hard không thể giải quyết được là họ bỏ lỡ điểm rằng độ cứng NP là giới hạn thấp hơn về độ cứng của vấn đề, chứ không phải giới hạn trên của độ cứng như P hay NP.

Một ngôn ngữ L là NP-hard có nghĩa là ngôn ngữ trên NP và đó là ngôn ngữ. Bây giờ nếu bạn hiểu điều này cần phải chỉ ra rằng có vấn đề khó hơn tùy ý.

AACACAHaltCACA

AAA<AA<A<A<A<...

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.