ฉันพยายามที่จะหาว่ากราฟเส้นทางตามอัลกอริทึมของ Eppstein ในบทความนี้ทำงานอย่างไรและฉันสามารถสร้างเส้นทางที่สั้นที่สุดจากถึงด้วยการสร้างฮีปที่สอดคล้องกันได้อย่างไร
จนถึงตอนนี้:
มีขอบทั้งหมดออกจากจุดสุดยอดในกราฟที่ไม่ได้เป็นส่วนหนึ่งของเส้นทางที่สั้นที่สุดในGพวกเขาจะได้รับคำสั่งจากกอง "เสียเวลา" ที่เรียกว่าเมื่อใช้ขอบนี้แทนที่จะเป็นหนึ่งในเส้นทางที่สั้นที่สุด โดยใช้ Dijkstra ฉันหาเส้นทางที่สั้นที่สุดเพื่อทุกจุดสุดยอดจากเสื้อ
ฉันสามารถคำนวณโดยการใช้ความยาวของขอบ + (ค่าของจุดสุดยอดหัว (ที่ขอบกำกับชี้) ที่ -. ค่าของยอดหาง (ที่ขอบกำกับจะเริ่มต้น) ถ้าเป็นมัน ไม่ได้อยู่ในเส้นทางที่สั้นที่สุดหากเป็น= 0มันอยู่ในเส้นทางที่สั้นที่สุด
ตอนนี้ผมสร้าง 2 นาทีกองโดย heapifying ชุดของขอบo ยูที( วี)ตามที่พวกเขาδ ( E )สำหรับการใด ๆวี∈ Vที่รากo U T r o o t ( v )มีลูกเพียงคนเดียว (= ทรีย่อย)
เพื่อที่จะสร้างผมแทรกo ยูทีR o o T ( โวลต์)ในH T ( n E x เสื้อT ( วี) )เริ่มต้นที่จุดสุดยอดมินัลตัน ทุกยอดสัมผัสอย่างใดขณะที่ใส่มันจะมีเครื่องหมาย*
ตอนนี้ฉันสามารถสร้างโดยการใส่ส่วนที่เหลือของH o ยูที ( W )ในH T ( วี ) จุดยอดทุกอันในH G ( v )ประกอบด้วยเด็ก2คนจากH T ( v )และ1จากH o u t ( w )หรือ0จากที่หนึ่งและที่2จากที่สองและเป็น 3 กอง
ด้วยฉันสามารถสร้าง DAG เรียกว่าD ( G )ที่มีจุดสุดยอดสำหรับแต่ละ*จุดสุดยอดที่มีตำหนิจากH T ( V )และสำหรับแต่ละจุดสุดยอดที่ไม่ใช่รากจากH o ยูที ( วี )
รากของในD ( G )จะเรียกว่าเอช( วี)และพวกเขาจะเชื่อมต่อไปยังจุดที่พวกเขาอยู่ตามo ยูที( V )ด้วย "การทำแผนที่"
จนถึงตอนนี้ดีมาก
กระดาษกล่าวว่าฉันสามารถสร้างโดยการใส่รากR = R ( s )และการเชื่อมต่อนี้ไปยังเอช( s )โดยขอบ inital กับδ ( H ( s ) ) จุดยอดของD ( G )เหมือนกันในP ( G )แต่ไม่มีการถ่วงน้ำหนัก ขอบมีความยาว จากนั้นสำหรับแต่ละขอบชี้นำ( u , v ) ∈ D ( G )ขอบที่สอดคล้องกันในมีการสร้างและถ่วงน้ำหนักด้วยδ ( วี) - δ ( U ) พวกเขาเรียกว่า Heap Edges จากนั้นสำหรับแต่ละจุดยอดv ∈ P ( G )ซึ่งหมายถึงขอบที่ไม่ได้อยู่ในเส้นทางที่สั้นที่สุดที่เชื่อมต่อจุดยอดคู่กับuและw "ข้ามขอบ" ถูกสร้างขึ้นจากvถึงh ( w )ในP ( G ) ที่มีความยาวδ ( h ( w ) จุดยอดทุกอันใน P ( G )มีระดับการออกสูงสุด 4สูงสุดเท่านั้น
เส้นทาง 's เริ่มต้นจาก Rที่ควรจะเป็นอย่างใดอย่างหนึ่งต่อหนึ่งระยะเวลาในการติดต่อระหว่าง s -เสื้อ -paths ในG
ในที่สุดกองใหม่สั่ง 4-Heap คือการสร้าง แต่ละจุดสุดยอดสอดคล้องกับเส้นทางในP ( G )ที่ฝังรากที่R พาเรนต์ของจุดสุดยอดใด ๆ มีขอบที่น้อยกว่าหนึ่ง น้ำหนักของจุดยอดคือความยาวของเส้นทางที่สอดคล้องกัน
เพื่อหาสิ่งที่เส้นทางที่สั้นที่สุดที่ผมใช้ BFS เพื่อP ( G )และ "แปล" ผลการค้นหาเพื่อเส้นทางโดยใช้H ( G )
น่าเสียดายที่ฉันไม่เข้าใจว่าฉันสามารถ "อ่าน" แล้ว "แปล" ผ่านH ( G )เพื่อรับเส้นทางที่สั้นที่สุดk