คำถามที่ผ่านมากล่าวถึงขั้นตอนวิธีการเขียนโปรแกรมแบบไดนามิกตอนนี้คลาสสิกสำหรับ TSP เนื่องจากอิสระเพื่อยามและถือคาร์พ อัลกอริทึมเป็นสากลรายงานให้ทำงานในเวลา อย่างไรก็ตามในฐานะที่เป็นหนึ่งในนักเรียนของฉันเมื่อเร็ว ๆ นี้ชี้ให้เห็นเวลาทำงานนี้อาจต้องใช้แบบจำลองการคำนวณที่ทรงพลังอย่างไม่มีเหตุผล
นี่คือคำอธิบายสั้น ๆ ของอัลกอริทึม การป้อนข้อมูลประกอบด้วยกำกับกราฟกับจุดและที่ไม่ใช่เชิงลบฟังก์ชั่นความยาว + สำหรับจุดยอดและใด ๆ และเซตย่อยของจุดยอดที่แยกและให้แสดงความยาวของเส้นทางแฮมิลโตเนียนที่สั้นที่สุดจากถึงใน subgraph เหนี่ยวนำให้เกิด ] อัลกอรึทึมของ Bellman-Held-Karp นั้นมีพื้นฐานมาจากการเกิดซ้ำดังต่อไปนี้ (หรือในฐานะนักเศรษฐศาสตร์และนักทฤษฎีควบคุมที่เรียกมันว่า "สมการของเบลแมน"):
สำหรับการใด ๆ จุดสุดยอดความยาวของการท่องเที่ยวที่ดีที่สุดในการเดินทางของพนักงานขายที่เป็นs) เนื่องจากพารามิเตอร์แรกเป็นค่าคงที่ในการเรียกซ้ำทั้งหมดมี\ Theta (2 ^ nn)ปัญหาย่อยที่แตกต่างกันและแต่ละปัญหาย่อยขึ้นอยู่กับnอื่น ๆมากที่สุด ดังนั้นขั้นตอนวิธีการเขียนโปรแกรมแบบไดนามิกวิ่งในO (2 ^ NN ^ 2)เวลา
หรือไม่!
โมเดล RAM จำนวนเต็มมาตรฐานช่วยให้สามารถจัดการกับจำนวนเต็มด้วยบิตบิตได้ แต่อย่างน้อยสำหรับการคำนวณทางคณิตศาสตร์และการดำเนินการทางตรรกะ (ไม่เช่นนั้นอาจเกิดเรื่องประหลาดขึ้นได้) นี่เป็นเรื่องจริงหรือไม่ที่การเข้าถึงที่อยู่หน่วยความจำอีกต่อไปยังใช่หรือไม่ หากอัลกอริทึมใช้พื้นที่ superpolynomial มันสมเหตุสมผลหรือไม่ที่จะสมมติว่าการเข้าถึงหน่วยความจำต้องใช้เวลาคงที่เท่านั้น?
สำหรับอัลกอริทึม Bellman-Held-Karp โดยเฉพาะอัลกอริทึมจะต้องแปลงคำอธิบายของเซตย่อยเป็นคำอธิบายของเซตย่อยสำหรับแต่ละเพื่อเข้าถึงตารางบันทึกช่วยจำ หากเซตย่อยแสดงด้วยจำนวนเต็มจำนวนเต็มเหล่านี้ต้องการบิตดังนั้นจึงไม่สามารถจัดการได้ในเวลาคงที่ หากพวกเขาไม่ได้เป็นตัวแทนจากจำนวนเต็มการแสดงของพวกเขาไม่สามารถใช้โดยตรงเป็นดัชนีลงในตารางการบันทึก
ดังนั้น: เวลาทำงานเชิงซีมโทติคจริงของอัลกอรึทึมของ Bellman-Held-Karp คืออะไร?