จะพิสูจน์ได้อย่างไรว่าปัญหา NP สมบูรณ์?


108

ฉันมีปัญหากับการตั้งเวลา ฉันต้องการพิสูจน์ว่าปัญหาสมบูรณ์ NP อะไรคือวิธีการพิสูจน์ว่า NP สมบูรณ์?


อ่าน "การลดความสามารถในการต่อสู้ร่วมกัน" โดย Karp
Paul Hankin

คำตอบ:


146

ในการแสดงปัญหา NP เสร็จสมบูรณ์คุณต้อง:

แสดงว่าอยู่ใน NP

กล่าวอีกนัยหนึ่งคือจากข้อมูลบางอย่างCคุณสามารถสร้างอัลกอริทึมเวลาพหุนามVที่จะตรวจสอบทุกอินพุตที่เป็นไปได้Xว่าXอยู่ในโดเมนของคุณหรือไม่

ตัวอย่าง

พิสูจน์ว่าปัญหาของการจุดสุดยอดครอบคลุม (นั่นคือกราฟบางG, ไม่ได้มีชุดจุดสุดยอดหน้าปกของขนาดkดังกล่าวที่ขอบในทุก ๆGมีอย่างน้อยหนึ่งจุดสุดยอดในชุดฝาครอบ ?) อยู่ใน NP:

  • ข้อมูลที่เราป้อนXคือกราฟGและตัวเลขบางส่วนk(มาจากนิยามปัญหา)

  • ใช้ข้อมูลของเราCเป็น "จุดยอดย่อยที่เป็นไปได้ในกราฟGขนาดk"

  • จากนั้นเราสามารถเขียนอัลกอริทึมVที่ได้รับG, kและCจะกลับไม่ว่าจะเป็นชุดของจุดที่มีฝาครอบจุดสุดยอดสำหรับGหรือไม่ในเวลาพหุนาม

จากนั้นทุกกราฟG, ถ้ามีบางคน "ส่วนย่อยที่เป็นไปได้ของจุดในGขนาดk" ซึ่งเป็นฝาครอบจุดสุดยอดแล้วอยู่ในGNP

โปรดทราบว่าเราไม่จำเป็นต้องค้นหาCในเวลาพหุนาม ถ้าทำได้ปัญหาจะอยู่ใน `P

หมายเหตุว่าขั้นตอนวิธีการVควรจะทำงานสำหรับทุก สำหรับบางคนG Cสำหรับการป้อนข้อมูลทุกครั้งควรมีข้อมูลที่สามารถช่วยเราตรวจสอบได้ว่าอินพุตนั้นอยู่ในโดเมนที่เป็นปัญหาหรือไม่ นั่นคือไม่ควรมีอินพุตที่ไม่มีข้อมูลอยู่

พิสูจน์ว่าเป็น NP Hard

สิ่งนี้เกี่ยวข้องกับการรับปัญหา NP-complete ที่รู้จักเช่นSATชุดของนิพจน์บูลีนในรูปแบบ:

(A หรือ B หรือ C) และ (D หรือ E หรือ F) และ ...

ที่แสดงออกคือพอใจที่จะมีการตั้งค่าที่มีอยู่บางอย่างสำหรับ booleans เหล่านี้ซึ่งจะทำให้การแสดงออกที่แท้จริง

จากนั้นลดปัญหา NP-สมบูรณ์ในการแก้ไขปัญหาของคุณได้ในเวลาพหุนาม

นั่นคือให้อินพุตบางส่วนXสำหรับSAT(หรือปัญหาที่สมบูรณ์ของ NP ที่คุณใช้) สร้างอินพุตYสำหรับปัญหาของคุณเช่นXใน SAT ถ้าYเป็นปัญหาของคุณเท่านั้น ฟังก์ชั่นf : X -> Yจะต้องทำงานในเวลาพหุนาม

ในตัวอย่างข้างต้นใส่Yจะเป็นกราฟและขนาดของฝาครอบจุดสุดยอดGk

สำหรับการพิสูจน์ที่สมบูรณ์คุณต้องพิสูจน์ทั้งคู่:

  • ที่Xอยู่ในSAT=> Yในปัญหาของคุณ

  • และYในการแก้ไขปัญหาของคุณ => ในXSAT

คำตอบของ marcogมีลิงก์กับปัญหา NP-complete อื่น ๆ ที่คุณสามารถลดปัญหาของคุณได้

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


7
ฉันสงสัยว่ามีข้อมูลที่ขาดหายไปหรือมีเหตุผลแบบวงกลมอยู่เบื้องหลัง ฉันหมายถึงวิธีการ 'พิสูจน์' ว่าปัญหาอยู่ใน NP โดยไม่อ้างถึงปัญหาอื่นที่ 'มีอยู่แล้วใน NP'? ก็เหมือนกับการพูดว่า "มันทำจากเหล็กเพราะส่วนหนึ่งของมันเป็นที่รู้กันว่าเป็นเหล็ก" นั่นไม่ใช่หลักฐานเหล็ก
Hernán Eche

6
เท่าที่ฉันจำได้มีทฤษฎีบทที่เรียกว่าทฤษฎีบทคุก - เลวินซึ่งระบุว่า SAT เป็น NP-complete การพิสูจน์นั้นค่อนข้างซับซ้อนกว่าที่อธิบายไว้ข้างต้นเล็กน้อยและฉันไม่คิดว่าจะอธิบายเป็นคำพูดของตัวเองได้
Laila Agaev

4
เพื่อให้แม่นยำยิ่งขึ้นทฤษฎีบท Cook-Levin ระบุว่า SAT เป็น NP-complete: ปัญหาใด ๆ ใน NP สามารถลดลงในเวลาพหุนามโดยเครื่องทัวริงที่กำหนดเป็นปัญหาในการพิจารณาว่าสูตรบูลีนเป็นที่น่าพอใจหรือไม่ (SAT) นั่นคือชิ้นส่วนที่ขาดหายไปที่คุณถามถึง หากคุณค้นหาทฤษฎีบทในวิกิพีเดียมีข้อพิสูจน์และคุณสามารถอ้างอิงทฤษฎีบทในการพิสูจน์ของคุณได้ ที่กล่าวว่าการลด SAT ให้เป็นปัญหานั้นเป็นวิธีที่ฉันได้รับการสอนให้พิสูจน์ความสมบูรณ์ของ NP
Laila Agaev

ดังนั้นคำถามของฉันจึงจบลงด้วยการที่ SAT สามารถแก้ไขเป็นพหุนามได้เช่นปัญหา P = NP .. ขอบคุณสำหรับคำตอบของคุณ
Hernán Eche

คุณช่วยอธิบายได้ไหมว่าทำไมเราไม่สามารถลดปัญหา NP-hard ให้เป็นปัญหาที่เราต้องการได้ในขั้นตอนที่สอง ต้องเป็นปัญหา NP-complete หรือไม่?
MLT

23

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

ไม่ใช่เรื่องง่ายไปกว่าปัญหา NP-complete เนื่องจากสามารถลดเป็นพหุนามซึ่งทำให้ปัญหา NP-Hard

ดูส่วนท้ายของhttp://www.ics.uci.edu/~eppstein/161/960312.htmlสำหรับข้อมูลเพิ่มเติม


2
+1 คนที่อธิบายอย่างเข้าใจ แทนที่จะพูดการอ้างอิงคำหลักหลาย ๆ คำที่ฉันแทบไม่เข้าใจ
ColacX

22
ประโยคแรกเป็นแบบย้อนกลับ: คุณต้องลดปัญหา NP-complete ที่ทราบแล้วให้เป็นปัญหาของคุณเอง นี่แสดงให้เห็นว่าอย่างน้อยปัญหาของคุณก็ยากพอ ๆกับปัญหา NP-complete ที่ทราบ ส่วน (b) ก็ไม่ถูกต้องเช่นกัน: หากคุณพบการลดลงแสดงว่าคุณรู้แล้วว่าปัญหาของคุณเป็นปัญหา NP คำถามเดียวคืออยู่ใน NP หรือไม่ (ปัญหาบางอย่างเช่นปัญหาการหยุดชะงักไม่ใช่) Iff มันเป็น NP-hard และใน NP ก็จะเป็น NP-complete (เช่น "NP-complete" มีความเฉพาะเจาะจงมากกว่า "NP-hard")
j_random_hacker

1
ฉันจะไม่พูดว่า a) นำไปสู่ความขัดแย้งเนื่องจากเราไม่รู้ว่า P! = NP
Chiel ten Brinke

8

เพื่อที่จะพิสูจน์ว่าปัญหา L นั้นสมบูรณ์เราต้องทำตามขั้นตอนต่อไปนี้:

  1. พิสูจน์ว่าปัญหาของคุณ L เป็นของ NP (นั่นคือวิธีแก้ปัญหาที่คุณสามารถตรวจสอบได้ในเวลาพหุนาม)
  2. เลือกปัญหา NP-complete ที่รู้จัก L '
  3. อธิบายอัลกอริทึม f ที่เปลี่ยน L 'เป็น L
  4. พิสูจน์ว่าอัลกอริทึมของคุณถูกต้อง (อย่างเป็นทางการ: x ∈ L 'ถ้าและเฉพาะเมื่อ f (x) ∈ L)
  5. พิสูจน์ว่า algo f ทำงานในเวลาพหุนาม

7

ขั้นแรกคุณแสดงให้เห็นว่าอยู่ใน NP เลย

จากนั้นคุณจะพบปัญหาอื่นที่คุณรู้อยู่แล้วว่า NP สมบูรณ์และแสดงให้เห็นว่าคุณลดปัญหา NP Hard ลงในปัญหาของคุณได้อย่างไร


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

6
  1. ทำความคุ้นเคยกับส่วนย่อยของปัญหา NP Complete
  2. พิสูจน์ความแข็งของ NP: ลดอินสแตนซ์ของปัญหา NP ที่สมบูรณ์โดยพลการให้เป็นตัวอย่างปัญหาของคุณ นี่คือชิ้นส่วนที่ใหญ่ที่สุดของพายและความคุ้นเคยกับปัญหา NP Complete จ่าย การลดจะยากมากหรือน้อยขึ้นอยู่กับโจทย์ NP Complete ที่คุณเลือก
  3. พิสูจน์ว่าปัญหาของคุณอยู่ใน NP: ออกแบบอัลกอริทึมที่สามารถตรวจสอบในเวลาพหุนามว่าอินสแตนซ์เป็นวิธีแก้ปัญหาหรือไม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.