ทำไมคลาส NP-Complete จึงสำคัญเมื่อเทียบกับ NP-hard


19

ฉันกำลังศึกษาความซับซ้อนในการคำนวณและฉันก็สงสัยว่าทำไมปัญหา NP-Complete (NPC) จึงเป็นสิ่งสำคัญสำหรับทุกคน ฉันพบว่าชัดเจนว่าเหตุใดเราจึงสนใจแสดงปัญหา NP ที่ระบุคือ NP-hard

ฉันยังเข้าใจความหมายของ NPC และการแสดงปัญหาการตัดสินใจที่กำหนดคือ NP-hard รู้ว่ามันอยู่ใน NP คือ NPC หมายถึงอย่างแน่นอน

อย่างไรก็ตามสิ่งที่ฉันไม่เข้าใจคือ: ทำไมแนวคิดนี้จึงสำคัญ? แน่นอนถ้าเราพบใด ๆ อัลกอริทึม NP-ยากซึ่งจะทำงานในเวลาที่ P (หรือไม่ที่อยู่ใน NP) เราได้แสดงให้เห็นว่าPยังไม่มีข้อความP=P

เหตุใดแนวคิดนี้จึงสำคัญมาก


3
ฉันได้ลบคำถามที่สองของคุณเพราะคำถามนี้แยกจากคำถามแรกทั้งหมดอย่างสิ้นเชิง อย่างไรก็ตามมันเป็นคำถามที่ดีมากและฉันขอแนะนำให้คุณถามเป็นคำถามใหม่ หากต้องการกู้คืนข้อความให้คลิกลิงก์ "แก้ไข [เวลาใดก็ได้] ซึ่งจะแสดงประวัติการแก้ไขและให้คุณคัดลอกข้อความ
David Richerby

คำตอบ:


16

มีเหตุผลบางอย่างที่ NPC น่าสนใจ:

  • คลาส NP มีปัญหามากมายที่น่าสนใจ (ทั้งในทางปฏิบัติและในทางทฤษฎี) ยิ่งไปกว่านั้นปัญหาเหล่านี้กลายเป็นปัญหายาก (และดังนั้นปัญหาสมบูรณ์) แต่ปัญหามากมายนอก NP แทบจะยากเกินไปที่จะเป็น มากกว่าความสนใจเชิงทฤษฎีดังนั้น NPC จึงจัดให้มีกลุ่มของปัญหา (หยาบ) ที่เห็นได้ชัดว่าแข็ง แต่ไม่ยากมากจนเราไม่สามารถทำอะไรกับพวกเขาได้
    กล่าวอีกนัยหนึ่ง NPC อาจเป็นข้อ จำกัด ของสิ่งที่เราหวังว่าจะสามารถแก้ไขได้แบบพหุนามเวลามันดูเหมือนจะยืด PSPACE = P (ตัวอย่าง)
  • คลาสคือ NP เป็นโครงสร้างที่น่าสนใจ มันเป็นตัวอย่างพื้นฐานของ "เราจะได้ 'ความเร็ว' การคำนวณใด ๆ เพิ่มเติมจาก nondeterminism" ดังนั้นเราจึงสนใจว่า P = NP หรือไม่และ NPC เป็น (อาจ) องค์ประกอบที่สำคัญของการทำงานนั้น
  • NP-hard (ในชั้นเรียน) มีขนาดใหญ่เกินไปและหลากหลายเกินกว่าที่จะจัดการกับสิ่งใดสิ่งหนึ่งได้ทุกอย่างที่สามารถลดลงได้จากปัญหาที่เกิดขึ้นจากปัญหา NP-completeรวมถึงสิ่งที่อยู่นอก NP ขนาดใหญ่ดังนั้นจากจุด มุมมองของการพยายามพัฒนาผลลัพธ์และเทคนิคทั่วไปไม่มีอะไรให้ทำ

เนื่องจากคำถามเดิมของฉันถูกแก้ไขเพื่อให้สะท้อนถึงชื่อคุณอาจซ่อนคำตอบของคำถามที่สองด้วย
Amnestic

1
NP-hard ไม่ใช่ "ทุกอย่างภายนอก NP" เนื่องจากมีปัญหา NP-complete ใน NP ฉันเข้าใจสิ่งที่คุณหมายถึง แต่ไม่รู้ว่าจะสำเร็จได้อย่างไร
vonbrand

@ vonbrand ใช่ฉันคุยโวอย่างดุเดือด (การแข่งขันของความบ้าอาจ?) เวอร์ชั่นใหม่นั้นถูกต้อง แต่มันก็ไม่ได้น่าเสียดาย
ลุคแมททีสันเมื่อ

9

จากมุมมองของคนที่เขียนโค้ดเพื่อการใช้ชีวิตการมีความคุ้นเคยที่ดีกับปัญหาความสมบูรณ์แบบเป็นสิ่งสำคัญสำหรับ:

1. จดจำเมื่อคุณเห่าต้นไม้ผิด

ปัญหาที่สมบูรณ์แบบของ NP เป็นปัญหาที่ยากที่สุดของปัญหา NP และสมบูรณ์ที่สุดเท่าที่เราสามารถบอกได้มันต้องใช้เวลาชี้แจงถึงขนาดของอินพุตเพื่อแก้ไขปัญหาการตัดสินใจ ดังนั้นตามความเป็นจริงหากคุณสามารถแสดงให้เห็นว่าปัญหาที่คุณกำลังพยายามแก้ไขนั้นคือ NP-hard (โดยปกติแล้วแสดงให้เห็นว่าวิธีแก้ปัญหาที่มีประสิทธิภาพสำหรับมันก็จะให้วิธีแก้ปัญหาที่มีประสิทธิภาพสำหรับปัญหา NP-Complete ด้วย) คุณสามารถหยุดค้นหาอัลกอริทึมที่มีประสิทธิภาพเพื่อแก้ปัญหาโดยทั่วไป แต่คุณสามารถเลือกจากอัลกอริทึมที่รู้จักซึ่งให้การประมาณที่ดีสำหรับปัญหาการเพิ่มประสิทธิภาพ NP-hard และเข้าสู่ส่วนที่เหลือของโครงการของคุณ

2. ค้นหาต้นไม้ที่เหมาะสม

เพราะคอมพิวเตอร์มักจะถูกใช้ในการโจมตีปัญหา NP-ยากแก้เฉพาะได้รับการพัฒนาที่มีประสิทธิภาพสามารถแก้บางกรณีปัญหา NP-ยาก การรับรู้ว่าปัญหาของคุณคือ NP-complete เป็นขั้นตอนแรกในการค้นหาเครื่องมือที่มีอยู่ (SAT, ILP, SMT, CSP เพื่อตั้งชื่อไม่กี่) ที่อาจช่วยให้คุณค้นหาวิธีแก้ไขปัญหาที่แน่นอนในบางกรณีที่คุณจะต้องชำระ การประมาณ


-4

"แน่นอนถ้าเราพบอัลกอริธึม NP-hard ใด ๆ ที่ทำงานในเวลา P (หรือไม่นั้นอยู่ใน NP) เราได้แสดงว่า NP = P ทำไมแนวคิดนี้จึงสำคัญ?

ปัญหา NP ทุกข้อจะลดปัญหา NPC ใด ๆ แต่ก็ไม่เป็นความจริงที่ว่าปัญหา NP ทุกข้อจะลดปัญหา NP ยากใด ๆ ดังนั้นการพิสูจน์อัลกอริทึม NP-hard ที่เป็น P ไม่ได้พิสูจน์ P = NP เลย อย่างไรก็ตามในกรณีของปัญหา NPC นั่นคือสิ่งที่ "ลด" หมายถึง ดังนั้นหากเราพบอัลกอริทึม P สำหรับปัญหา NPC ดังนั้นเราจะได้พิสูจน์ว่า P = NP


3
XX
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.