คำถามติดแท็ก pseudo-polynomial

3
ทำไมไม่ลองแสดงตัวเลขในอัลกอริธึมเชิงตัวเลข?
อัลกอริธึมเวลาแบบหลอกเทียมคืออัลกอริธึมที่มีเวลาทำงานพหุนามกับค่าอินพุต (ขนาด) แต่เวลาทำงานแบบเอ็กซ์โพเนนเชียลตามขนาดอินพุต (จำนวนบิต) ตัวอย่างเช่นการทดสอบว่าตัวเลขnnnเป็นจำนวนเฉพาะหรือไม่ต้องการวนซ้ำผ่านตัวเลขตั้งแต่ 2 ถึงn−1n−1n-1และตรวจสอบว่าnnn mod iiiเป็นศูนย์หรือไม่ หากตัวดัดแปลงใช้เวลา O (1) ความซับซ้อนของเวลาโดยรวมจะเป็น O (n) แต่ถ้าเราปล่อยให้xxxเป็นจำนวนบิตที่ต้องการในการเขียนอินพุตดังนั้นx=lognx=log⁡nx = \log n (ไบนารี) ดังนั้นn=2xn=2xn = 2^xและเวลาการทำงานของปัญหาจะเป็น O ( 2x2x2^x ) ซึ่งเป็นเลขชี้กำลัง คำถามของฉันคือถ้าเราพิจารณาการเป็นตัวแทนของอินพุตnnn , ดังนั้นเสมอแล้วเวลาx=nx=nx=nหลอก - พหุนามจะเท่ากับความซับซ้อนของเวลาพหุนาม เหตุใดเราจึงไม่ทำเช่นนี้ ยิ่งไปกว่านั้นเนื่องจากมีอัลกอริธึมเวลาหลอกเทียมสำหรับเป้โดยใช้x=nx=nx=n , เป้จะเป็นพหุนามเป็นผลลัพธ์ P = NP

1
นี่อาจเป็นปัญหา NP-Complete หรือไม่
พิจารณาข้อความสั่งปัญหาต่อไปนี้: เมื่อให้หมายเลขเริ่มต้นคุณและเพื่อนของคุณจะผลัดกันลบสแควร์ที่สมบูรณ์แบบจากนั้น คนแรกที่ได้เป็นศูนย์ชนะ ตัวอย่างเช่น: สถานะเริ่มต้น: 37 ผู้เล่น 1 ลบออก 16 สถานะ: 21 ผู้เล่น 2 ลบ 8. สถานะ: 13 ผู้เล่น 1 หักออก 4. สถานะ: 9 ผู้เล่น 2 ลบ 9. สถานะ: 0 ผู้เล่น 2 ชนะ! เขียนโปรแกรมที่ให้สถานะเริ่มต้นคืนค่าการย้ายที่ดีที่สุดเช่นที่รับประกันว่าจะนำไปสู่การชนะเกม หากไม่มีการเคลื่อนไหวที่เป็นไปได้สามารถนำคุณไปสู่สถานะที่ชนะได้ให้กลับ -1 ปัญหานี้สามารถแก้ไขได้ในเวลาเทียม - พหุนามโดยใช้การเขียนโปรแกรมแบบไดนามิก แนวความคิดนี้เป็นเพียงการเติมความยาวของอาร์เรย์n (โดยที่nคือสถานะเริ่มต้น) ขึ้นด้านล่างด้วยการเคลื่อนไหวที่ดีที่สุดหรือ -1 หากไม่มีการเคลื่อนไหวใดที่นำไปสู่การชนะ นี่จะใช้ O (n * sqrt (n)) …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.