นี่อาจเป็นปัญหา NP-Complete หรือไม่


10

พิจารณาข้อความสั่งปัญหาต่อไปนี้:

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

สถานะเริ่มต้น: 37

ผู้เล่น 1 ลบออก 16 สถานะ: 21

ผู้เล่น 2 ลบ 8. สถานะ: 13

ผู้เล่น 1 หักออก 4. สถานะ: 9

ผู้เล่น 2 ลบ 9. สถานะ: 0

ผู้เล่น 2 ชนะ!

เขียนโปรแกรมที่ให้สถานะเริ่มต้นคืนค่าการย้ายที่ดีที่สุดเช่นที่รับประกันว่าจะนำไปสู่การชนะเกม หากไม่มีการเคลื่อนไหวที่เป็นไปได้สามารถนำคุณไปสู่สถานะที่ชนะได้ให้กลับ -1

ปัญหานี้สามารถแก้ไขได้ในเวลาเทียม - พหุนามโดยใช้การเขียนโปรแกรมแบบไดนามิก แนวความคิดนี้เป็นเพียงการเติมความยาวของอาร์เรย์n (โดยที่nคือสถานะเริ่มต้น) ขึ้นด้านล่างด้วยการเคลื่อนไหวที่ดีที่สุดหรือ -1 หากไม่มีการเคลื่อนไหวใดที่นำไปสู่การชนะ นี่จะใช้ O (n * sqrt (n)) เนื่องจากสำหรับทุก ๆ หมายเลขเราต้องพิจารณาลบแต่ละตารางที่สมบูรณ์แบบที่เป็นไปได้ที่เล็กกว่ามัน (มี ~ sqrt (n) ของพวกเขา) อย่างไรก็ตามนี่คือความซับซ้อนรันไทม์ pseudo-polynomial เนื่องจากรันไทม์จะขยายตามความสัมพันธ์กับขนาดของอินพุตในไบนารี่ (# ของบิตที่ใช้แทนหมายเลข)

ทุกคนสามารถคิดอัลกอริทึมแบบพหุนามเพื่อแก้ปัญหานี้ได้หรือไม่? ถ้าไม่ใช่มันจะเป็น NP-Complete หรือไม่? ทำไม?


1
ด้วยความอยากรู้ทำไมคุณถามโดยเฉพาะว่ามันเป็นปัญหาสมบูรณ์หรือไม่ (โดยส่วนตัวแล้วฉันจะเดาได้เลยว่ามันไม่ใช่แม้แต่ใน NP แม้ว่าฉันจะไม่รู้จริงๆ)
ruakh

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

คุณเคยลองคำนวณตำแหน่งใดบ้างที่จะชนะตำแหน่งและตำแหน่งใดที่แพ้ บางทีรูปแบบจะเกิดขึ้น
Yuval Filmus

@YuvalFilmus ตามWikipediaไม่มีสูตรที่รู้จักสำหรับรูปแบบนี้ (ลำดับA030193ใน OEIS)
Martin Copes

ใช่ฉันเพิ่งจะโพสต์คำตอบด้วยข้อมูลนี้ ดูเพิ่มเติมที่ A224839
Yuval Filmus

คำตอบ:


6

ลำดับของการสูญเสียตำแหน่งที่สามารถพบได้ใน OEIS, A030193ที่เป็นลำดับของตำแหน่งที่มีค่าใจแคบ 1 A224839 สารานุกรมอ้างอิงบทความที่เกี่ยวข้องหลายประการ บางทีบางคนพูดถึงอัลกอริธึมที่ไม่สำคัญสำหรับการคำนวณลำดับ


ดังที่คุณกล่าวถึงลำดับนี้แสดงถึงตำแหน่งที่แพ้ แม้ว่าคุณจะสามารถตรวจสอบเวลาคงที่ได้ว่าตำแหน่งนั้นจะหายไปหรือไม่ (ซึ่งดูเหมือนว่ายาก!) ปัญหาก็ยังขอให้คุณคืนการเคลื่อนไหวที่ดีที่สุดนั่นคือสแควร์ใดที่คุณจะต้องลบออกไปสู่สถานะปัจจุบัน ตำแหน่งที่แพ้ ปัญหาจะเดือดลงมาเพื่อค้นหาตำแหน่งที่สูญเสียโดยการลบกำลังสองออกจากสถานะปัจจุบัน ดังนั้นคุณยังคงต้องวนซ้ำทุกสี่เหลี่ยมเล็กกว่ารัฐแม้ว่าคุณจะสามารถตรวจสอบว่าตำแหน่งสูญเสียในเวลาคงที่หรือไม่
Martin Copes

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