ภาคผนวกลงไปด้านล่างชี้แจงข้อกำหนดk(k−1) :
ดังนั้นถ้าคุณตรวจสอบเงื่อนไขในนิพจน์คุณสามารถจินตนาการ (ตามความคล้ายคลึง)เทอมคือการแจกแจงของสตริงไบนารี่ทั้งหมดที่มี 1 ที่มี 1 ในตำแหน่งแรก กล่าวอีกนัยหนึ่งเราปล่อยให้แต่ละตำแหน่งในสตริงไบนารีแสดงตัวเลือกว่าหนึ่งในเมืองที่ระบุในปัญหานั้นอยู่ในชุดย่อยที่แน่นอนที่เรากำลังพิจารณาอยู่หรือไม่ ดังนั้นสำหรับ 5 เมือง 1,0101 สอดคล้องกับส่วนย่อย {1,3,5}(n−1k)kn
ดังนั้นในการคำนวณข้ามเซตย่อยทั้งหมดของ {1, ... , } เราจะนับผ่านแต่ละเซตย่อยไบนารี (เช่นนับผ่านสตริงไบนารี่) ของขนาด = 2 (เช่นสตริงไบนารี่ขนาดที่มีสอง 1) จากนั้น ขนาด = 3 แล้วขนาด = 4, ... แล้วขนาด = n (โปรดทราบว่าชุดย่อยขนาด = 1 จะต้องประกอบด้วยเมืองแรกเท่านั้นจึงไม่เกี่ยวข้องกับการคำนวณระยะทางบางส่วนเนื่องจากระยะทางตั้งแต่ 1 -> เมืองอื่น ๆ ทั้งหมดในชุดย่อย -> 1 มีค่าเท่ากับ 0)nn
ในแต่ละชุดย่อยที่มีเมืองเราจะต้องพิจารณาเส้นทางที่เหมาะสมและบางส่วนได้สูงสุดโดยเฉพาะอย่างยิ่งเส้นทางที่ดีที่สุดทั้งหมดอาจข้ามผ่านส่วนย่อยที่กำหนดและสิ้นสุดในเมืองๆ ยกเว้นเมืองแรก จากนั้นสำหรับแต่ละเส้นทางย่อยของผู้สมัครเราคำนวณการเดินทางที่ดีที่สุดจนถึงจุดต่ำสุดของเส้นทางย่อยขนาด =ก่อนหน้าใด ๆบวกระยะทางจากเมืองปลายทางสำหรับเส้นทางย่อยนั้นไปยัง เทอร์มินัลซิตี้สำหรับเส้นทางย่อยของผู้สมัครปัจจุบัน สิ่งนี้ให้การเปรียบเทียบดังกล่าวที่เราต้องทำ ความแตกต่างระหว่างเทอมของฉันและkk−1k−1k−1(k−1)(k−2)(k−1)(k−2)k(k−1)คำในการวิเคราะห์ที่เชื่อมโยงกันเป็นความแตกต่างที่เป็นสัญกรณ์ (ฉันจะรวมช่วงที่ต่างกันให้นิยามของมากกว่าที่ทำ) อย่างน้อยที่สุดก็ควรแสดงให้เห็นถึงความซับซ้อนของกำลังสองของคำนั้นk
น่าสนใจมาก - ฉันเพิ่งเขียนโค้ดอัลกอริธึมที่แน่นอนนี้ขึ้นใน C ++ ไม่กี่นาทีที่ผ่านมา (ดังนั้นให้อภัยแทนเจนต์จากทฤษฏีบริสุทธิ์ไปสู่การสนทนาเชิงปฏิบัติเล็กน้อย :))
มันมีค่าใช้จ่ายเวลาและพื้นที่ - อย่างน้อยภายใต้การใช้งานของฉัน แม้ว่าในทางปฏิบัติเมื่อความต้องการพื้นที่ของคุณเพิ่มขึ้นอย่างรวดเร็วพวกเขาก็เจ็บปวดกว่าเวลาที่กำหนด ตัวอย่างเช่นบนพีซีของฉัน (ที่มี RAM 4 GB) ฉันสามารถแก้ปัญหาอินสแตนซ์ที่มีได้ถึง 24 เมือง - ยิ่งไปกว่านั้นและฉันมีหน่วยความจำไม่เพียงพอO(2nn2)O(2nn)
แน่นอนฉันอาจเป็นโปรแกรมเมอร์ที่ไม่ดีและคุณอาจทำได้ดีกว่าฉันในทางปฏิบัติ :)
แก้ไข: มีรายละเอียดเพิ่มเติมเกี่ยวกับคำถามของคุณเพียงเล็กน้อย: เทอมมาจากข้อเท็จจริงที่ว่าคุณต้องคำนวณระยะทางที่เหมาะสมที่สุดจากชุดย่อยก่อนหน้า (ในกรณีส่วนใหญ่)ของพวกเขาโปรดทราบว่าถูกหาผลรวมในการวิเคราะห์ที่คุณเชื่อมโยง) กับค่าปัจจุบัน นี้ต้องใช้อีกครั้งในกรณีที่เลวร้ายที่สุดเปรียบเทียบกับขนาดย่อยของรวมเป็น2)k(k−1)nknO(k)k−1O(k2)
นอกจากนี้หากคำอธิบายของฉันไม่ชัดเจนพอนี่คือบันทึกการบรรยายที่ดีของ Vazirani ( PDF ) เลื่อนลงมาที่หน้า 188 เพื่อหารือเกี่ยวกับ TSP รวมถึงการวิเคราะห์ Held-Karp