Tại sao lớp NP-Complete lại quan trọng so với NP-hard?


19

Tôi đang nghiên cứu độ phức tạp tính toán và tôi đã tự hỏi tại sao các vấn đề NP-Complete (NPC) lại là một lớp quan trọng. Tôi thấy rõ ràng lý do tại sao chúng tôi quan tâm đến việc hiển thị một vấn đề NP nhất định là NP-hard.

Tôi cũng hiểu định nghĩa của NPC và cho thấy một vấn đề quyết định nhất định là NP-hard, biết nó nằm trong NP, chính xác là NPC có nghĩa.

Tuy nhiên, điều tôi không hiểu là: tại sao khái niệm này lại quan trọng đến vậy? Chắc chắn, nếu chúng ta tìm thấy bất kỳ thuật toán NP-khó mà chạy trong thời gian P (đã hoặc chưa có nghĩa là trong NP), chúng tôi đã chỉ ra rằng .NP= =P

Tại sao khái niệm này rất quan trọng?


3
Tôi đã xóa câu hỏi thứ hai của bạn vì nó hoàn toàn tách biệt với câu hỏi đầu tiên. Tuy nhiên, đây là một câu hỏi rất hay và tôi khuyến khích bạn nên hỏi nó như một câu hỏi mới. Để khôi phục văn bản, nhấp vào liên kết "đã chỉnh sửa [bất cứ lúc nào]", liên kết này sẽ hiển thị cho bạn lịch sử chỉnh sửa và cho phép bạn sao chép-dán văn bản.
David Richerby

Câu trả lời:


16

Có ít nhất một vài lý do khiến NPC thú vị:

  • NP lớp chứa nhiều vấn đề thú vị (cả thực tế và lý thuyết), hơn nữa, nhiều vấn đề trong số đó hóa ra là NP-hard (và do đó là NP-hoàn chỉnh), nhưng nhiều vấn đề bên ngoài NP gần như chắc chắn là quá khó hơn cả sự quan tâm về mặt lý thuyết , vì vậy NPC cung cấp một nhóm các vấn đề (rõ ràng) có vẻ khó, nhưng không khó đến mức chúng ta không thể cố gắng làm gì đó với chúng.
    Nói cách khác, NPC có lẽ là giới hạn của những gì chúng ta có thể hy vọng có thể giải quyết được trong thời gian đa thức, có vẻ như sẽ rất khó để thử PSPACE = P (ví dụ).
  • Lớp học là NP có cấu trúc thú vị. Đó là ví dụ cơ bản về "chúng ta có nhận được bất kỳ" tốc độ "tính toán nào nữa từ chủ nghĩa không điều kiện không". Vì vậy, chúng tôi quan tâm liệu P = NP hay không, và NPC (có lẽ) là một thành phần quan trọng để giải quyết vấn đề đó.
  • NP-hard (với tư cách là một lớp) thực sự quá lớn và đa dạng để giải quyết như một điều duy nhất, đó là tất cả mọi thứ có thể được giảm xuống từ một vấn đề hoàn chỉnh NP , bao gồm cả một khối lượng lớn bên ngoài NP, từ quan điểm của quan điểm về việc cố gắng phát triển các kết quả và kỹ thuật chung, không có gì để nắm bắt.

Vì câu hỏi ban đầu của tôi đã được chỉnh sửa để phản ánh tiêu đề, có lẽ bạn cũng nên ẩn câu trả lời của câu hỏi thứ hai.
Amnests

1
NP-hard không phải là "mọi thứ bên ngoài NP", vì nó bao gồm (ít nhất) các vấn đề hoàn thành NP trong NP. Tôi hiểu ý của bạn, nhưng không biết cách nói ngắn gọn.
vonbrand

@vonbrand, vâng, tôi cực kỳ cường điệu rằng (cơn điên có lẽ vậy?). Phiên bản mới là chính xác, nhưng nó không có cảm giác đáng tiếc.
Luke Mathieson

9

Từ quan điểm của một người viết mã để kiếm sống, việc làm quen với sự hoàn thiện NP rất quan trọng đối với:

1. Nhận ra khi bạn sủa sai cây

Các bài toán hoàn thành NP là bài toán NP-hard dễ nhất và theo như chúng tôi có thể nói, cần có thời gian theo cấp số nhân đối với kích thước của đầu vào để giải quyết vấn đề quyết định như vậy. Vì vậy, như một vấn đề thực tế nếu bạn có thể chỉ ra rằng vấn đề bạn đang cố gắng giải quyết là NP-hard (thông thường bằng cách chỉ ra rằng một giải pháp hiệu quả cho nó cũng sẽ cung cấp một giải pháp hiệu quả cho một số vấn đề hoàn thành NP), bạn biết rằng bạn có thể ngừng tìm kiếm một thuật toán hiệu quả để giải quyết nó một cách chính xác nói chung. Thay vào đó, bạn có thể chọn từ các thuật toán đã biết hứa hẹn các xấp xỉ tốt cho các vấn đề tối ưu hóa NP-hard và tiếp tục với phần còn lại của dự án.

2. Tìm đúng cây

Bởi vì máy tính thường được sử dụng để tấn công các vấn đề NP-hard, các bộ giải chuyên biệt đã được phát triển có thể giải quyết hiệu quả một số trường hợp vấn đề NP-hard. Nhận thấy rằng vấn đề của bạn là NP-đầy đủ là bước đầu tiên để tìm một công cụ hiện có (SAT, ILP, SMT, CSP để đặt tên cho một số) có thể giúp bạn tìm giải pháp chính xác trong một số trường hợp mà bạn phải giải quyết xấp xỉ.


-4

"Chắc chắn, nếu chúng tôi tìm thấy bất kỳ thuật toán NP-hard nào chạy trong thời gian P (có hoặc không có trong NP), chúng tôi đã chỉ ra rằng NP = P. Tại sao khái niệm này rất quan trọng?"

Mọi vấn đề NP đều giảm đối với bất kỳ vấn đề NPC nào, nhưng sự thật là mọi vấn đề NP đều giảm đối với bất kỳ vấn đề NP-hard nào, vì vậy việc chứng minh thuật toán NP-hard nằm trong P hoàn toàn không chứng minh P = NP. Tuy nhiên, đó sẽ là trường hợp đối với một vấn đề NPC, đó chính xác là "giảm" nghĩa là gì. Vì vậy, nếu chúng ta tìm thấy thuật toán P cho một vấn đề NPC, thì chúng ta sẽ chứng minh rằng P = NP.


3
XX
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.