Sự khác biệt giữa NP , NP-Complete và NP-Hard là gì?
Tôi biết nhiều tài nguyên trên web. Tôi muốn đọc những lời giải thích của bạn, và lý do là chúng có thể khác với những gì ở ngoài kia, hoặc có điều gì đó mà tôi không biết.
Sự khác biệt giữa NP , NP-Complete và NP-Hard là gì?
Tôi biết nhiều tài nguyên trên web. Tôi muốn đọc những lời giải thích của bạn, và lý do là chúng có thể khác với những gì ở ngoài kia, hoặc có điều gì đó mà tôi không biết.
Câu trả lời:
Tôi giả sử rằng bạn đang tìm kiếm các định nghĩa trực quan, vì các định nghĩa kỹ thuật đòi hỏi khá nhiều thời gian để hiểu. Trước hết, hãy nhớ một khái niệm cần thiết sơ bộ để hiểu những định nghĩa đó.
Bây giờ, chúng ta hãy định nghĩa các lớp phức tạp .
P là một lớp phức tạp đại diện cho tập hợp tất cả các vấn đề quyết định có thể được giải quyết trong thời gian đa thức .
Đó là, đưa ra một ví dụ của vấn đề, câu trả lời có hoặc không có thể được quyết định trong thời gian đa thức.
Thí dụ
Cho một đồ thị được kết nối G
, các đỉnh của nó có thể được tô màu bằng hai màu sao cho không có cạnh nào là đơn sắc?
Thuật toán: bắt đầu với một đỉnh tùy ý, tô màu đỏ và tất cả các lân cận của nó màu xanh và tiếp tục. Dừng lại khi bạn hết các đỉnh hoặc bạn buộc phải tạo một cạnh có cả hai điểm cuối của nó có cùng màu.
NP là một lớp phức tạp đại diện cho tập hợp tất cả các vấn đề quyết định mà các trường hợp trong đó câu trả lời là "có" có bằng chứng có thể được xác minh trong thời gian đa thức.
Điều này có nghĩa là nếu ai đó đưa cho chúng tôi một ví dụ về vấn đề và chứng chỉ (đôi khi được gọi là nhân chứng) cho câu trả lời là có, chúng tôi có thể kiểm tra xem nó có đúng trong thời gian đa thức hay không.
Thí dụ
Hệ số nguyên là trong NP. Đây là vấn đề đã cho các số nguyên n
và m
, có một số nguyên f
với 1 < f < m
, như vậy mà f
chia n
( f
là một yếu tố nhỏ n
)?
Đây là một vấn đề quyết định bởi vì câu trả lời là có hoặc không. Nếu ai đó đưa cho chúng tôi một ví dụ của vấn đề (vì vậy họ đưa cho chúng tôi số nguyên n
và m
) và một số nguyên f
với 1 < f < m
, và cho rằng đó f
là một yếu tố của n
(chứng chỉ), chúng tôi có thể kiểm tra câu trả lời trong thời gian đa thức bằng cách thực hiện phép chia n / f
.
NP-Complete là một lớp phức tạp mà đại diện cho tập hợp tất cả các vấn đề X
trong NP mà nó có thể giảm bất kỳ vấn đề NP khác Y
để X
trong thời gian đa thức.
Theo trực giác điều này có nghĩa là chúng ta có thể giải quyết Y
nhanh chóng nếu chúng ta biết cách giải quyết X
nhanh chóng. Chính xác, Y
có thể rút gọn thành X
, nếu có một thuật toán thời gian đa thức f
để biến đổi các thể hiện y
thành các Y
thể x = f(y)
hiện X
trong thời gian đa thức, với thuộc tính mà câu trả lời y
là có, nếu và chỉ khi câu trả lời f(y)
là có.
Thí dụ
3-SAT
. Đây là vấn đề trong đó chúng tôi được cung cấp một kết hợp (AND) của các bất đồng 3 mệnh đề (OR), các câu lệnh có dạng
(x_v11 OR x_v21 OR x_v31) AND
(x_v12 OR x_v22 OR x_v32) AND
... AND
(x_v1n OR x_v2n OR x_v3n)
trong đó mỗi biến x_vij
là một biến boolean hoặc phủ định của một biến từ danh sách xác định trước hữu hạn (x_1, x_2, ... x_n)
.
Có thể chỉ ra rằng mọi vấn đề NP đều có thể giảm xuống còn 3-SAT . Bằng chứng về điều này là kỹ thuật và yêu cầu sử dụng định nghĩa kỹ thuật của NP ( dựa trên các máy Turing không xác định ). Điều này được gọi là định lý Cook .
Điều làm cho các vấn đề hoàn thành NP trở nên quan trọng là nếu có thể tìm thấy thuật toán thời gian đa thức xác định để giải quyết một trong số chúng, mọi vấn đề NP đều có thể giải quyết được trong thời gian đa thức (một vấn đề để thống trị tất cả).
Theo trực giác, đây là những vấn đề ít nhất là khó khăn như các vấn đề hoàn thành NP . Lưu ý rằng các vấn đề NP-hard không phải ở NP và chúng không phải là vấn đề quyết định .
Định nghĩa chính xác ở đây là một vấn đề X
là NP-hard, nếu có một vấn đề hoàn chỉnh NP Y
, như vậy Y
có thể giảm xuống X
trong thời gian đa thức .
Nhưng vì bất kỳ vấn đề hoàn thành NP nào cũng có thể được giảm xuống thành bất kỳ vấn đề hoàn thành NP nào khác trong thời gian đa thức, tất cả các vấn đề hoàn thành NP có thể được giảm xuống thành bất kỳ vấn đề NP-hard nào trong thời gian đa thức. Sau đó, nếu có một giải pháp cho một vấn đề NP-hard trong thời gian đa thức, thì có một giải pháp cho tất cả các vấn đề NP trong thời gian đa thức.
Thí dụ
Các vấn đề ngăn chặn là một vấn đề NP-hard. Đây là vấn đề đưa ra một chương trình P
và đầu vào I
, nó sẽ dừng lại? Đây là một vấn đề quyết định nhưng nó không nằm trong NP. Rõ ràng là bất kỳ vấn đề NP-đầy đủ có thể được giảm xuống vấn đề này. Một ví dụ khác, bất kỳ vấn đề NP-đầy đủ là NP-hard.
Vấn đề NP-Complete yêu thích của tôi là vấn đề Minesweeper .
Đây là một vấn đề nổi tiếng nhất trong khoa học máy tính và là một trong những câu hỏi nổi bật quan trọng nhất trong khoa học toán học. Trên thực tế, Viện Clay đang cung cấp một triệu đô la cho một giải pháp cho vấn đề này ( bài viết của Stephen Cook trên trang web của Clay khá tốt).
Rõ ràng P là tập con của NP. Câu hỏi mở là liệu các vấn đề NP có giải pháp thời gian đa thức xác định hay không. Người ta tin rằng họ không. Dưới đây là một bài viết nổi bật gần đây về vấn đề mới nhất (và tầm quan trọng) của vấn đề P = NP: Trạng thái của vấn đề P so với NP .
Cuốn sách hay nhất về chủ đề này là Máy tính và Khả năng thu hút của Garey và Johnson.
Tôi đã nhìn xung quanh và thấy nhiều lời giải thích dài. Dưới đây là một biểu đồ nhỏ có thể hữu ích để tóm tắt:
Lưu ý mức độ khó tăng từ trên xuống dưới: mọi NP có thể giảm xuống NP-Complete và mọi NP-Complete đều có thể giảm xuống NP-Hard , tất cả chỉ trong thời gian P (đa thức).
Nếu bạn có thể giải quyết một loại vấn đề khó hơn trong thời gian P, điều đó có nghĩa là bạn đã tìm ra cách giải quyết tất cả các vấn đề dễ dàng hơn trong thời gian P (ví dụ: chứng minh P = NP, nếu bạn tìm ra cách giải quyết bất kỳ vấn đề NP-Complete nào trong P thời gian).
Giới thiệu | Loại vấn đề | Có thể kiểm chứng trong thời gian P | Có thể giải quyết trong thời gian P | Tăng độ khó Giới thiệu | | P | Vâng | Vâng | | | NP | Vâng | Có hay không * | | | Hoàn thành NP | Vâng | Không biết | | | NP-cứng | Có hay không ** | Không biết *** | | Giới thiệu
Ghi chú trên Yes
hoặc No
mục:
Tôi cũng thấy sơ đồ này khá hữu ích trong việc xem tất cả các loại này tương ứng với nhau như thế nào (chú ý nhiều hơn đến nửa bên trái của sơ đồ).
Đây là một câu trả lời rất không chính thức cho câu hỏi được hỏi.
3233 có thể được viết là tích của hai số khác lớn hơn 1 không? Có cách nào để đi bộ một con đường xung quanh tất cả Bảy cây cầu của Königsberg mà không cần đi cầu nào hai lần không? Đây là những ví dụ về các câu hỏi có chung một đặc điểm. Có thể không rõ ràng làm thế nào để xác định câu trả lời một cách hiệu quả, nhưng nếu câu trả lời là "có", thì sẽ có một cách ngắn gọn và nhanh chóng để kiểm tra bằng chứng. Trong trường hợp đầu tiên, một nhân tố không tầm thường là 51; trong lần thứ hai, một tuyến đường để đi bộ các cây cầu (phù hợp với các ràng buộc).
Một vấn đề quyết định là một tập hợp các câu hỏi có hoặc không có câu trả lời chỉ khác nhau trong một tham số. Giả sử vấn đề COMPOSITE = {"Là n
hỗn hợp": n
là số nguyên} hay EULERPATH = {"Đồ thị G
có đường dẫn Euler không?": G
Là đồ thị hữu hạn}.
Bây giờ, một số vấn đề quyết định cho vay hiệu quả, nếu không phải là thuật toán rõ ràng. Euler đã phát hiện ra một thuật toán hiệu quả cho các vấn đề như "Bảy cây cầu của Königsberg" hơn 250 năm trước.
Mặt khác, đối với nhiều vấn đề quyết định, không rõ ràng làm thế nào để có câu trả lời - nhưng nếu bạn biết thêm một số thông tin, thì rõ ràng làm thế nào để chứng minh rằng bạn đã có câu trả lời đúng. COMPOSITE là như thế này: Phân chia thử nghiệm là thuật toán rõ ràng và rất chậm: để tính một số có 10 chữ số, bạn phải thử một số thứ như 100.000 ước số có thể. Nhưng nếu, chẳng hạn, có ai đó nói với bạn rằng 61 là số chia của 3233, thì phép chia dài đơn giản là một cách hiệu quả để thấy rằng chúng đúng.
NP lớp phức tạp là lớp các vấn đề quyết định trong đó các câu trả lời 'có' được nêu ngắn gọn, nhanh chóng kiểm tra bằng chứng. Giống như COMPOSITE. Một điểm quan trọng là định nghĩa này không nói lên điều gì về mức độ khó của vấn đề. Nếu bạn có một cách chính xác, hiệu quả để giải quyết vấn đề quyết định, chỉ cần viết ra các bước trong giải pháp là đủ chứng minh.
Nghiên cứu thuật toán tiếp tục, và các thuật toán thông minh mới được tạo ra mọi lúc. Một vấn đề bạn có thể không biết làm thế nào để giải quyết hiệu quả ngày hôm nay có thể có một giải pháp hiệu quả (nếu không rõ ràng) vào ngày mai. Trên thực tế, các nhà nghiên cứu phải mất đến năm 2002 để tìm ra giải pháp hiệu quả cho COMPOSITE! Với tất cả những tiến bộ này, người ta thực sự phải tự hỏi: Có phải đây là một chút về việc có bằng chứng ngắn chỉ là một ảo ảnh? Có lẽ mọi vấn đề quyết định cho vay bằng chứng hiệu quả có một giải pháp hiệu quả? Không ai biết .
Có lẽ đóng góp lớn nhất cho lĩnh vực này đi kèm với việc phát hiện ra một loại vấn đề NP đặc biệt. Bằng cách chơi xung quanh với các mô hình mạch để tính toán, Stephen Cook đã tìm ra một vấn đề quyết định của giống NP có thể chứng minh là khó hoặc khó hơn mọi vấn đề NP khác. Một giải pháp hiệu quả cho vấn đề thỏa mãn boolean có thể được sử dụng để tạo ra một giải pháp hiệu quả cho bất kỳ vấn đề nào khác trong NP. Ngay sau đó, Richard Karp đã chỉ ra rằng một số vấn đề quyết định khác có thể phục vụ cùng một mục đích. Những vấn đề này, theo một nghĩa nào đó, những vấn đề "khó nhất" trong NP, được gọi là các vấn đề hoàn thành NP .
Tất nhiên, NP chỉ là một lớp các vấn đề quyết định. Nhiều vấn đề không được nêu một cách tự nhiên theo cách này: "tìm các yếu tố của N", "tìm đường đi ngắn nhất trong biểu đồ G truy cập mọi đỉnh", "đưa ra một tập các phép gán biến làm cho biểu thức boolean sau đúng". Mặc dù người ta có thể nói một cách không chính thức về một số vấn đề như vậy là "trong NP", nhưng về mặt kỹ thuật điều đó không có ý nghĩa nhiều - chúng không phải là vấn đề quyết định. Một số trong những vấn đề này thậm chí có thể có cùng loại sức mạnh như một vấn đề hoàn chỉnh NP: một giải pháp hiệu quả cho những vấn đề (không quyết định) này sẽ dẫn trực tiếp đến một giải pháp hiệu quả cho bất kỳ vấn đề NP nào. Một vấn đề như thế này được gọi là NP-hard .
P (Polynomial Time): Như tên gọi của nó, đây là những vấn đề có thể được giải quyết trong thời gian đa thức.
NP (Thời gian không xác định-đa thức): Đây là những vấn đề quyết định có thể được xác minh trong thời gian đa thức. Điều đó có nghĩa là, nếu tôi cho rằng có một giải pháp thời gian đa thức cho một vấn đề cụ thể, bạn yêu cầu tôi chứng minh điều đó. Sau đó, tôi sẽ cung cấp cho bạn một bằng chứng mà bạn có thể dễ dàng xác minh trong thời gian đa thức. Những loại vấn đề được gọi là vấn đề NP. Lưu ý rằng, ở đây chúng tôi không nói về việc có một giải pháp thời gian đa thức cho vấn đề này hay không. Nhưng chúng ta đang nói về việc xác minh giải pháp cho một vấn đề nhất định trong thời gian đa thức.
NP-Hard: Đây ít nhất cũng khó như các vấn đề khó nhất trong NP. Nếu chúng ta có thể giải quyết các vấn đề này trong thời gian đa thức, chúng ta có thể giải quyết bất kỳ vấn đề NP nào có thể tồn tại. Lưu ý rằng những vấn đề này không nhất thiết là vấn đề NP. Điều đó có nghĩa là, chúng tôi có thể / không thể xác minh giải pháp cho những vấn đề này trong thời gian đa thức.
NP-Complete: Đây là những vấn đề cả NP và NP-Hard. Điều đó có nghĩa là, nếu chúng ta có thể giải quyết các vấn đề này, chúng ta có thể giải quyết bất kỳ vấn đề NP nào khác và các giải pháp cho các vấn đề này có thể được xác minh trong thời gian đa thức.
Ngoài các câu trả lời tuyệt vời khác, đây là lược đồ điển hình mà mọi người sử dụng để hiển thị sự khác biệt giữa NP, NP-Complete và NP-Hard:
Cách dễ nhất để giải thích NP v. Và như vậy mà không đi sâu vào kỹ thuật là so sánh "các vấn đề từ" với "các vấn đề trắc nghiệm".
Khi bạn đang cố gắng giải quyết một "vấn đề từ ngữ", bạn phải tìm giải pháp từ đầu. Khi bạn đang cố gắng giải quyết "vấn đề trắc nghiệm", bạn có một lựa chọn: hoặc giải quyết nó như bạn sẽ là "vấn đề từ ngữ", hoặc cố gắng đưa ra từng câu trả lời cho bạn và chọn câu trả lời phù hợp.
Điều thường xảy ra là "bài toán trắc nghiệm" dễ hơn nhiều so với "bài toán đố" tương ứng: thay thế câu trả lời của thí sinh và kiểm tra xem chúng có phù hợp có thể đòi hỏi ít nỗ lực hơn so với tìm câu trả lời đúng từ đầu không.
Bây giờ, nếu chúng ta đồng ý nỗ lực mất thời gian đa thức "dễ dàng" thì lớp P sẽ bao gồm "các vấn đề từ dễ" và NP lớp sẽ bao gồm "các vấn đề dễ lựa chọn".
Bản chất của P v. NP là câu hỏi: "Có bất kỳ vấn đề trắc nghiệm dễ dàng nào không dễ dàng như các vấn đề từ ngữ" không? Đó là, có vấn đề nào dễ dàng xác minh tính hợp lệ của một câu trả lời nhất định nhưng việc tìm ra câu trả lời đó từ đầu có khó không?
Bây giờ chúng tôi hiểu trực giác NP là gì, chúng tôi phải thử thách trực giác của mình. Nó chỉ ra rằng có "vấn đề trắc nghiệm", theo một cách nào đó, khó nhất trong tất cả chúng: nếu ai đó tìm ra giải pháp cho một trong những vấn đề "khó nhất trong tất cả" thì người ta có thể tìm ra giải pháp cho TẤT CẢ Vấn đề NP! Khi Cook phát hiện ra điều này 40 năm trước, nó đã đến như một sự ngạc nhiên hoàn toàn. Những vấn đề "khó nhất trong tất cả" được gọi là NP-hard. Nếu bạn tìm thấy "giải pháp cho vấn đề từ" cho một trong số họ, bạn sẽ tự động tìm "giải pháp cho vấn đề từ" cho mỗi "vấn đề trắc nghiệm dễ dàng"!
Cuối cùng, các vấn đề hoàn thành NP là những vấn đề đồng thời là NP và NP-hard. Theo sự tương tự của chúng tôi, chúng đồng thời "dễ như các vấn đề trắc nghiệm" và "khó nhất trong số chúng là các vấn đề từ ngữ".
Các vấn đề hoàn thành NP là những vấn đề cả NP-Hard và NP lớp phức tạp. Do đó, để chỉ ra rằng bất kỳ vấn đề nào được đưa ra là NP-đầy đủ, bạn cần chỉ ra rằng vấn đề nằm ở NP và đó là NP-hard.
Các vấn đề nằm trong lớp phức tạp NP có thể được giải quyết một cách không xác định trong thời gian đa thức và một giải pháp khả thi (nghĩa là chứng chỉ) cho một vấn đề trong NP có thể được xác minh tính chính xác trong thời gian đa thức.
Một ví dụ về giải pháp không xác định cho vấn đề k-clique sẽ là một cái gì đó như:
1) chọn ngẫu nhiên k nút từ biểu đồ
2) xác minh rằng các nút k này tạo thành một cụm.
Chiến lược trên là đa thức về kích thước của đồ thị đầu vào và do đó, bài toán k-clique nằm trong NP.
Lưu ý rằng tất cả các vấn đề có thể giải quyết được trong thời gian đa thức cũng nằm trong NP.
Cho thấy một vấn đề là NP-hard thường liên quan đến việc giảm từ một số vấn đề NP-hard khác sang vấn đề của bạn bằng cách sử dụng ánh xạ thời gian đa thức: http://en.wikipedia.org/wiki/Redraction_(complexity)
Tôi nghĩ rằng chúng ta có thể trả lời ngắn gọn hơn nhiều. Tôi đã trả lời một câu hỏi liên quan và sao chép câu trả lời của tôi từ đó
Nhưng trước tiên, một vấn đề NP-hard là một vấn đề mà chúng ta không thể chứng minh rằng một giải pháp thời gian đa thức tồn tại. Độ cứng NP của một số "vấn đề-P" thường được chứng minh bằng cách chuyển đổi một vấn đề NP-hard đã được chứng minh thành "vấn đề-P" trong thời gian đa thức.
Để trả lời phần còn lại của câu hỏi, trước tiên bạn cần hiểu những vấn đề NP-hard nào cũng hoàn thành NP. Nếu một vấn đề NP-hard thuộc về NP, thì đó là NP-Complete. Để thuộc về NP, một vấn đề cần phải là
(i) một vấn đề quyết định,
(ii) số lượng giải pháp cho vấn đề phải là hữu hạn và mỗi giải pháp nên có độ dài đa thức và
(iii) đưa ra một giải pháp độ dài đa thức, chúng ta có thể nói liệu câu trả lời cho vấn đề là có / khôngBây giờ, thật dễ dàng để thấy rằng có thể có nhiều vấn đề NP-hard không thuộc về NP và khó giải quyết hơn. Lấy ví dụ trực quan, phiên bản tối ưu hóa của nhân viên bán hàng du lịch nơi chúng tôi cần tìm lịch trình thực tế khó hơn phiên bản quyết định của nhân viên bán hàng du lịch nơi chúng tôi chỉ cần xác định liệu lịch trình có độ dài <= k có tồn tại hay không.
Có những câu trả lời thực sự hay cho câu hỏi đặc biệt này, vì vậy không có lý do gì để viết lời giải thích của riêng tôi. Vì vậy, tôi sẽ cố gắng đóng góp với một nguồn tài nguyên tuyệt vời về các lớp phức tạp tính toán khác nhau.
Đối với ai đó nghĩ rằng độ phức tạp tính toán chỉ là về P và NP, đây là tài nguyên toàn diện nhất về các vấn đề phức tạp tính toán khác nhau. Ngoài các vấn đề được OP yêu cầu, nó đã liệt kê khoảng 500 loại vấn đề tính toán khác nhau với các mô tả hay và danh sách các tài liệu nghiên cứu cơ bản mô tả về lớp học.
Theo tôi hiểu, một vấn đề khó np không "khó" hơn một vấn đề hoàn thành np . Trong thực tế, theo định nghĩa, mọi vấn đề hoàn thành np là:
- Giới thiệu. đến các thuật toán (3ed) của Cormen, Leiserson, Rivest và Stein, trg 1069
I
trênn
các biến, thử tất cả các2^n
phép gán có thể cho các biến và dừng lại nếu một cái thỏa mãn mệnh đề và nếu không thì nhập một vòng lặp vô hạn. Chúng tôi thấy rằng thuật toán này dừng lại khi và chỉ khiI
là thỏa đáng. Do đó, nếu chúng ta có một thuật toán thời gian đa thức để giải bài toán tạm dừng thì chúng ta có thể giải SAT trong thời gian đa thức. Do đó, vấn đề tạm dừng là NP-hard.