ปัญหานี้ซึ่งผมจะเรียก CO สำหรับการสั่งซื้อคอลัมน์เป็นNP-ยาก นี่คือการลดลงของVertex Cover (VC) ของปัญหา NP-hard :
รูปแบบปัญหาการตัดสินใจของ VC และ CO
ให้การป้อนข้อมูลเช่น VC เป็นk) มันแสดงถึงคำถาม: "จากกราฟ , เป็นไปได้หรือไม่ที่จะเลือกชุดของจุดยอดสูงสุดจากเช่นว่าขอบทุกอันในจะเกิดขึ้นอย่างน้อยหนึ่งจุดยอดที่เลือก" เราจะสร้างอินสแตนซ์ของ CO ที่แสดงถึงคำถาม: "ให้เมทริกซ์กับองค์ประกอบใน , เป็นไปได้ไหมที่จะเปลี่ยนคอลัมน์ของที่ 1 ปรากฏขึ้นก่อนหน้า -1 บนอย่างน้อยแถว? " ปัญหาทั้งสองนี้ระบุไว้ในปัญหาการตัดสินใจ(V,E,k)(V,E)kVE(A,k′)A{−1,0,1}Ak′รูปแบบโดยคำตอบของแต่ละคนเป็นใช่หรือไม่: การพูดอย่างเป็นทางการมันเป็นรูปแบบของปัญหาที่ NP- สมบูรณ์ (หรือไม่) ไม่ยากเกินไปที่จะเห็นว่ารูปแบบปัญหาการเพิ่มประสิทธิภาพที่เป็นธรรมชาติมากขึ้นที่ระบุไว้ในคำถามของ OP นั้นเทียบเท่ากันในแง่ของความซับซ้อน: การค้นหาแบบไบนารีบนพารามิเตอร์ขีด จำกัด สามารถใช้เพื่อแก้ปัญหาการเพิ่มประสิทธิภาพโดยใช้ตัวแก้ไขปัญหาการตัดสินใจ การเรียกใช้ตัวแก้ปัญหาการปรับให้เหมาะสมแล้วตามด้วยการเปรียบเทียบเพียงครั้งเดียวก็เพียงพอที่จะแก้ปัญหาการตัดสินใจ
การสร้างอินสแตนซ์ของ CO จากอินสแตนซ์ของ VC
ให้และ. เราจะสร้างเมทริกซ์พร้อมแถวและคอลัมน์ ด้านบนแถวจะเกิดขึ้นของตึกแถวแต่ละคนพร้อมกับแต่ละบล็อกที่เป็นตัวแทนของขอบที่จำเป็นต้องได้รับการคุ้มครอง แถวด้านล่างมี "สถานะ" จุดสุดยอดซึ่งจะทำให้คอลัมน์ (ตรงกับจุดสุดยอด) จะต้องเสียค่าใช้จ่ายคงที่ถ้ามันรวมอยู่ในด้านซ้ายมือของการแก้ปัญหา CO (สอดคล้องกับจุดสุดยอดที่รวมอยู่ในจุดสุดยอด ปกของโซลูชัน VC)n=|V|m=|E|A(n+1)m+nn+1(n+1)mmn+1n
สำหรับแต่ละจุดยอดให้สร้างคอลัมน์ที่:vi
- ในด้านบนแถวที่บล็อก -th ของแถวทั้งหมดมี 1 เมื่อขอบเป็นเหตุการณ์ที่เกิดขึ้นในและ 0 เป็นอย่างอื่นและ(n+1)mjn+1ejvi
- แถวด้านล่างมีทั้งหมด 0 ยกเว้น -th ซึ่งคือ -1ni
สร้างคอลัมน์ "รั้ว" อีกหนึ่งคอลัมน์ซึ่งประกอบด้วยสำเนาของ -1, ตามด้วยสำเนาของ +1(n+1)mn
สุดท้ายคือการกำหนดเกณฑ์สำหรับอินสแตน CO สร้าง:k กล่าวอีกนัยหนึ่งเราอนุญาตได้สูงสุดแถวซึ่ง -1 จะปรากฏต่อหน้า +1 ลองเรียกจำนวนการละเมิดแถวนี้ว่า "ต้นทุน" ของโซลูชัน COk′(n+1)m+n−kk
พิสูจน์
การโต้ตอบระหว่างวิธีแก้ไขปัญหากับอินสแตนซ์ CO และชุดจุดยอดในอินสแตนซ์ VC ต้นฉบับคือ: ทุกคอลัมน์ทางด้านซ้ายของรั้วสอดคล้องกับจุดสุดยอดที่อยู่ในชุดและทุกคอลัมน์ทางด้านขวาของรั้วสอดคล้องกับ จุดสุดยอดที่ไม่ใช่
โดยสัญชาตญาณ -1s ที่ด้านบนสุดของคอลัมน์ "รั้ว" บังคับให้เลือกส่วนย่อยของคอลัมน์ที่จะวางไว้ทางซ้ายของมันที่รวมกันประกอบด้วย +1 ในตำแหน่งทั้งหมดเหล่านี้ - สอดคล้องกับส่วนย่อยของจุดยอดที่เกิดขึ้นในทุก ๆ ขอบ. แต่ละคอลัมน์เหล่านี้ที่ปรากฏทางด้านซ้ายของ "รั้ว" มี -1 ในแถวที่แตกต่างบางแห่งในแถวด้านล่างแถวค่าใช้จ่ายของ 1; +1 ที่ด้านล่างของ "รั้ว" ตรวจสอบให้แน่ใจว่าคอลัมน์ทั้งหมดอยู่ทางด้านขวาไม่มีค่าใช้จ่ายดังกล่าวn
เห็นได้ชัดว่าวิธีแก้ปัญหา VC ที่ใช้ที่จุดยอดสูงสุดให้ผลเฉลยกับ CO ตัวอย่างที่สร้างด้วยราคาสูงสุดที่ : เพียงแค่สั่งคอลัมน์ที่ตรงกับจุดยอดในจุดสุดยอดครอบคลุมโดยพลการตามด้วยคอลัมน์รั้วตามด้วยคอลัมน์รั้วที่เหลือทั้งหมดตามลำดับ .kk
มันยังคงแสดงให้เห็นว่าทางออกของอินสแตนซ์ของ CO ที่มีราคาสูงสุดที่สอดคล้องกับจุดยอดปกคลุมด้วยจุดสูงสุดkk
สมมติว่าตรงกันข้ามกับวิธีแก้ปัญหา CO ที่มีอยู่โดยมีค่าใช้จ่ายที่มากที่สุดซึ่งเหลือบางแถวในแถวบนสุดด้วย -1 ก่อน +1 แถวนี้เป็นบล็อกของแถวที่สอดคล้องกับขอบโดยเฉพาะยูวีทุกแถวในบล็อกนี้ในอินสแตนซ์ดั้งเดิมนั้นเหมือนกันทุกประการโดยการสร้าง การอนุญาตคอลัมน์อาจเปลี่ยนแถวเหล่านี้ แต่ไม่มีผลต่อความจริงที่ว่าพวกเขาเหมือนกัน ดังนั้นแต่ละเหล่านี้แถวเหมือนมี -1 ก่อนที่ 1 ในการแก้ปัญหาหมายความค่าใช้จ่ายอย่างน้อย1แต่ : ความขัดแย้งk(n+1)m(n+1)uvAn+1n+1k≤n<n+1
เนื่องจากแต่ละบล็อกของแถวในแถวบนสุดมี +1 ก่อน -1 แต่ละขอบที่สอดคล้องกันจะถูกปกคลุมด้วยจุดยอดที่สอดคล้องกับคอลัมน์ทางด้านซ้ายของรั้ว: นั่นคือ ชุดย่อยของจุดยอดนี้ถือเป็นการปิดยอด เนื่องจากไม่มีแถวบนสุดมี -1 ก่อน +1 ดังนั้นจึงมีเพียงสถานที่ที่ค่าใช้จ่ายที่อาจเกิดขึ้นในการแก้ปัญหาอยู่ในแถวด้านล่างจากคอลัมน์ที่อยู่ทางด้านซ้ายของรั้ว แต่ละคอลัมน์ดังกล่าวมีค่าใช้จ่ายที่แน่นอน 1 ดังนั้นเมื่อค่าใช้จ่ายมากที่สุดคือต้องมีคอลัมน์ดังกล่าวมากที่สุดและด้วยเหตุนี้ที่จุดยอดสูงสุดในหน้าปกm(n+1)m(n+1)mnkkk
ท้ายที่สุดเป็นที่ชัดเจนว่าอินสแตนซ์ CO สามารถสร้างขึ้นในเวลาพหุนามจากอินสแตนซ์ VC ซึ่งหมายความว่าหากมีอัลกอริทึมพหุนามเวลาสำหรับการแก้ปัญหา CO อินสแตนซ์ VC ใด ๆ ก็สามารถแก้ไขได้ในเวลาพหุนาม ด้านบนแล้วแก้ไขมัน เนื่องจาก VC เป็น NP-hard CO ก็เช่นกัน