Làm cách nào để tạo cấu trúc giảm giữa các vấn đề để chứng minh sự cố là NP-đầy đủ?


27

Tôi đang tham gia một khóa học phức tạp và tôi gặp rắc rối với việc giảm bớt giữa các vấn đề NPC. Làm thế nào tôi có thể tìm thấy giảm giữa các vấn đề? Có một mẹo chung mà tôi có thể sử dụng? Làm thế nào tôi nên tiếp cận một vấn đề yêu cầu tôi chứng minh một vấn đề là NPC?


4
Xin lỗi để thất vọng, tôi không nghĩ có một phương pháp giải quyết tất cả. Giống như nhiều vấn đề trong cuộc sống, mỗi vấn đề là duy nhất .. Hy vọng, với thời gian, bạn sẽ có được linh cảm đúng đắn để giải quyết từng vấn đề.
Ran G.

1
Có một số hướng dẫn hữu ích về cách tiếp cận các vấn đề như vậy? Tôi hoàn toàn lạc lối khi thấy một câu hỏi yêu cầu tôi chứng minh đó là NPC. Tôi nên tiếp cận họ như thế nào?
Ẩn danh

Câu trả lời:


45

Không có viên đạn nhiệm màu; Bằng chứng độ cứng NP là cứng. Tuy nhiên, có một khuôn khổ chung cho tất cả các bằng chứng như vậy. Nhiều sinh viên đấu tranh với bằng chứng độ cứng NP tỏ ra bối rối về những gì họ phải làm, điều này rõ ràng khiến họ không thể tìm ra cách thực hiện. Vì vậy, đây là những gì cần làm để chứng minh một vấn đề NP-hard.

Đầu tiên, trừ khi bạn chỉ làm bài tập về nhà, bạn phải quyết định vấn đề NP-hard nào để giảm bớt vấn đề của bạn . Đây phần lớn là một câu hỏi về "mùi". Nếu số 3 xuất hiện ở bất cứ đâu trong báo cáo sự cố, hãy thử giảm từ hoặc 3 C o l o r hoặc 3 P a r t i t i o n . (Vâng, tôi nghiêm túc.) Nếu vấn đề của bạn liên quan đến việc tìm kiếm một con đường hoặc hoán vị hoặc đường dẫn tối ưu, hãy thử giảm từ H a m i l t o n i n3SAT3Color3Partition hoặc H a m i l t o n i a n P a t h . Nếu vấn đề của bạn yêu cầu tập hợp con nhỏ nhất với một thuộc tính nhất định, hãy thử C l i q u e ; nếu nó yêu cầu tập hợp con lớn nhất với một thuộc tính nhất định, hãy thử I n d e p e n d e n t S e t . Nếu vấn đề của bạn liên quan đến việc làm một cái gì đó trong máy bay, hãy thử PHamiltonianCycleHamiltonianPathCliqueIndependentSet hoặc P l một n một r T S P . Và như vậy. Nếu vấn đề của bạn không "ngửi" như bất cứ điều gì, 3 S A T hoặc C i r c u i t S A T có lẽ là lựa chọn tốt nhất của bạn.PlanarCircuitSATPlanarTSP3SATCircuitSAT

Rõ ràng, bạn cần phải biết chính xác làm thế nào tất cả những vấn đề này được xác định , và vấn đề bạn giảm bớt càng đơn giản thì càng tốt. Vì vậy, khi mát mẻ như là kết quả có thể nhìn cuối cùng, tôi không khuyên bạn nên giảm từ Minesweeper hay Tetris hoặc OneCheckersMove hay SuperMarioBros .

Thứ hai, thực tế giảm. Để giảm vấn đề X (vấn đề bạn biết là NP-hard) thành vấn đề Y (vấn đề bạn đang cố chứng minh là NP-hard, bạn cần mô tả thuật toán biến đổi một thể hiện X tùy ý thành một thể hiện hợp pháp của Y Thuật toán rút gọn cần phải làm một cái gì đó cụ thể với từng "tính năng" của thể hiện X, phần đầu ra cho mỗi "tính năng" thường được gọi là một tiện ích .

Nhưng tính năng là gì? Điều đó phụ thuộc vào vấn đề X. Ví dụ:

  • Để chuyển đổi một thể hiện của , bạn sẽ cần một tiện ích cho từng biến và cho từng mệnh đề trong công thức nhập. Mỗi tiện ích biến phải có hai "trạng thái" tương ứng với "đúng" và "sai". Mỗi tiện ích mệnh đề cũng phải có nhiều "trạng thái", mỗi trạng thái bằng cách nào đó buộc ít nhất một trong số các chữ trong mệnh đề đó là đúng. (Các trạng thái không phải là một phần của đầu ra của thuật toán khử.)3SAT

  • Để chuyển đổi một thể hiện của , bạn sẽ cần một tiện ích cho từng đỉnh và từng cạnh của biểu đồ đầu vào và một tiện ích khác để xác định ba màu.3Color

  • Để chuyển đổi một thể hiện của , bạn sẽ cần một tiện ích cho mỗi đầu vào, cho mỗi dây và cho mỗi cổng trong mạch đầu vào.PlanarCircuitSat

Hình thức thực tế của các tiện ích phụ thuộc vào vấn đề Y, là bạn đang giảm đến . Ví dụ: nếu bạn đang giảm một vấn đề về đồ thị, các tiện ích của bạn sẽ là các sơ đồ nhỏ; xem bài viết Wikipedia. Nếu bạn đang giảm bớt một vấn đề về lập lịch, mỗi tiện ích sẽ là một tập hợp các công việc sẽ được lên lịch. Nếu bạn đang giảm bớt một vấn đề về Mario , mỗi tiện ích sẽ là một tập hợp các khối và gạch và Koopas.

Điều này có thể gây nhầm lẫn nếu cả hai vấn đề liên quan đến cùng một loại đối tượng. Ví dụ: nếu cả X và Y là các vấn đề về đồ thị, thuật toán của bạn sẽ chuyển đổi một biểu đồ (một thể hiện của X) thành một biểu đồ khác (một thể hiện của Y). Chọn ký hiệu của bạn một cách khôn ngoan, để bạn không nhầm lẫn hai biểu đồ này. Tôi cũng khuyên bạn nên sử dụng nhiều màu mực.

Cuối cùng, thuật toán rút gọn của bạn phải đáp ứng ba thuộc tính:

  • Nó chạy trong thời gian đa thức. (Điều này thường dễ dàng.)

  • Nếu thuật toán rút gọn của bạn được đưa ra một thể hiện dương của X làm đầu vào, thì nó tạo ra một thể hiện dương của Y là đầu ra.

  • Nếu thuật toán rút gọn của bạn tạo ra một thể hiện dương của Y là đầu ra, thì nó phải được đưa ra một thể hiện dương của X làm đầu vào.

Có một sự tinh tế quan trọng ở đây. Thuật toán rút gọn của bạn chỉ hoạt động theo một hướng, từ các thể hiện của X đến các thể hiện của Y, nhưng để chứng minh thuật toán chính xác đòi hỏi phải có lý do về việc chuyển đổi theo cả hai hướng. Bạn cũng phải nhớ rằng thuật toán giảm của bạn không thể biết liệu một thể hiện X đã cho là tích cực hay phủ định sẽ yêu cầu giải quyết vấn đề NP-hard trong thời gian đa thức!

Đó là những gì . Các cách chỉ đi kèm với thực hành.


5
3SMộtT3SMộtTptrbạnefmộttôiSe

1
Về "Nếu thuật toán rút gọn của bạn tạo ra một thể hiện dương của Y là đầu ra, thì nó phải được đưa ra một thể hiện tích cực của X làm đầu vào": Mặc dù có vẻ trực quan hơn khi viết điều kiện này là "Nếu thuật toán giảm của bạn được đưa ra một thể hiện tiêu cực của X là đầu vào, nó tạo ra một thể hiện âm của Y là đầu ra ", lưu ý rằng hai điều kiện này tương đương nhau và cách JeffE đã viết nó thường làm cho việc xây dựng bằng chứng dễ dàng hơn nhiều , vì trong mỗi trường hợp bạn" có một cái gì đó "( trường hợp tích cực của X hoặc trường hợp tích cực của Y) để làm việc với.
j_random_hacker

11

JeffE vạch ra chiến lược phổ biến nhất: biết nhiều vấn đề hoàn thành NP, tìm ra một vấn đề rất phù hợp và giảm bớt dễ dàng .

Một chiến lược hợp lệ khác là luôn luôn sử dụng 3SAT (hoặc bất kỳ vấn đề nào khác). Điều này có thể làm cho một số giảm bớt phức tạp hơn, nhưng nhược điểm là bạn có nhiều kinh nghiệm thể hiện sự bão hòa trong các loại vấn đề khác. Vì vậy, bạn tiết kiệm thời gian tìm kiếm một đối tác giảm tốt (bao gồm cả ngõ cụt) và hy vọng rằng kinh nghiệm của bạn sẽ cho phép bạn thực hiện việc giảm nhanh chóng ngay cả khi khó khăn hơn.

Cách tiếp cận này cũng có một số vẻ đẹp meta: (3) SAT là một trong số ít các vấn đề mà tính hoàn thiện NP đã được chứng minh (gần như) trực tiếp. Do đó, chỉ dựa vào bằng chứng đó sẽ giữ cho "cây bằng chứng" của bạn phẳng, tránh các chuỗi giảm dài.


3
Chứng minh trực tiếp rằng vấn đề Ngừng giới hạn là NP-đầy đủ khi ràng buộc được đưa ra một cách đơn nhất không quá khó, và là một cách dễ dàng để chứng minh rằng một số vấn đề hoàn thành NP tồn tại, mặc dù vấn đề này khá vô dụng để giảm bớt.
Alex ten Brink

3
Tôi không chắc chắn về tuyên bố rằng đó là vấn đề duy nhất đã được chứng minh là NP-hoàn thành trực tiếp. Trong thực tế nếu bạn diễn giải nó theo một nghĩa nghiêm ngặt thì nó chắc chắn là sai. Bài viết năm 1971 của Cook nói về TAUT chứ không phải SAT (ông sử dụng các mức giảm Cook chứ không phải giảm Karp) (một quan sát dễ dàng cho thấy bằng chứng cũng chứng minh rằng SAT hoàn thành NP theo mức giảm Karp).
Kaveh

@Kaveh Hả? Tautology là Co-Np hoàn chỉnh và do đó không được biết là trong NP (-complete). Tôi đã không đọc giấy của Cook mặc dù.
Albert Hendriks

1
@Albert, tốt bạn nên đọc nó sau đó. Với mức giảm Cook, bạn không thể phân biệt giữa NP và coNP.
Kaveh
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.