Có yêu cầu rằng một vấn đề NP-hard phải được tính toán?
Tôi không nghĩ vậy, nhưng tôi không chắc.
Có yêu cầu rằng một vấn đề NP-hard phải được tính toán?
Tôi không nghĩ vậy, nhưng tôi không chắc.
Câu trả lời:
Không, một vấn đề -hard không cần phải tính toán. Định nghĩa khá đầy đủ: một vấn đề là -hard nếu vấn đề đó có giải pháp đa thời gian ngụ ý mọi vấn đề trong đều có giải pháp đa thời gian (nghĩa là giảm tồn tại cho mọi vấn đề trong .).
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 đề chúng ta đang xem xét.
Ví dụ, hãy xem xét các vấn đề ngăn chặn . Chúng ta có thể giảm bất kỳ ngôn ngữ nào từ xuống như sau, giả sử chúng ta có trình kiểm tra đa thời gian để kiểm tra xem có phải là chứng chỉ cho :
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.
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.
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, và B . Nói A là đ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 ,
- Nếu bạn cung cấp với đầu vào, 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 ) .
- là trong Một khi và chỉ khi M ( s ) là trong B .
Một vấn đề quyết định là 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 .
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 ,
- 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".
- Đầu ra là "có" nếu ở A và "không" nếu không.
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:
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.
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ột 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 ⊕ B: 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.
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.
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ó . 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 định .
("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.)
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
problem()
chức năng chúng ta có thể gọi.
Để đầ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 ) 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à ?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 T từ chối.
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 xmã hóa một CNF thỏa đáng) sau đó chúng ta đặt và nếu không, chúng ta đặt L ( x ) : = 1 .
Sau vô số bước, chúng ta nhận được Màu của { 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 i quy tắc ra của nó là giảm từ SAT để L .
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ện
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 ý.