การค้นหาเส้นทางที่สั้นที่สุดด้วยอัลกอริทึมของ Eppstein


16

ฉันพยายามที่จะหาว่ากราฟเส้นทางP(G)ตามอัลกอริทึมของ Eppstein ในบทความนี้ทำงานอย่างไรและฉันสามารถสร้างเส้นทางที่สั้นที่สุดkจากsถึงtด้วยการสร้างฮีปที่สอดคล้องกันH(G)ได้อย่างไร

จนถึงตอนนี้:

out(v)มีขอบทั้งหมดออกจากจุดสุดยอดvในกราฟGที่ไม่ได้เป็นส่วนหนึ่งของเส้นทางที่สั้นที่สุดในGGพวกเขาจะได้รับคำสั่งจากกอง "เสียเวลา" ที่เรียกว่าδ(e)เมื่อใช้ขอบนี้แทนที่จะเป็นหนึ่งในเส้นทางที่สั้นที่สุด โดยใช้ Dijkstra ฉันหาเส้นทางที่สั้นที่สุดเพื่อทุกจุดสุดยอดจากเสื้อt

ฉันสามารถคำนวณโดยการใช้ความยาวของขอบ + (ค่าของจุดสุดยอดหัว (ที่ขอบกำกับชี้) ที่ -. ค่าของยอดหาง (ที่ขอบกำกับจะเริ่มต้น) ถ้าเป็นมัน ไม่ได้อยู่ในเส้นทางที่สั้นที่สุดหากเป็น= 0มันอยู่ในเส้นทางที่สั้นที่สุด>0=0

ตอนนี้ผมสร้าง 2 นาทีกองโดย heapifying ชุดของขอบo ยูที( วี)ตามที่พวกเขาδ ( E )สำหรับการใด ๆวีVที่รากo U T r o o t ( v )มีลูกเพียงคนเดียว (= ทรีย่อย)Hout(v)out(v)δ(e)vVoutroot(v)

เพื่อที่จะสร้างผมแทรกo ยูทีR o o T ( โวลต์)ในH T ( n E x เสื้อT ( วี) )เริ่มต้นที่จุดสุดยอดมินัลตัน ทุกยอดสัมผัสอย่างใดขณะที่ใส่มันจะมีเครื่องหมาย*HT(v)outroot(v)HT(nextT(v))t

ตอนนี้ฉันสามารถสร้างโดยการใส่ส่วนที่เหลือของH o ยูที ( W )ในH T ( วี ) จุดยอดทุกอันในH G ( v )ประกอบด้วยเด็ก2คนจากH T ( v )และ1จากH o u t ( w )หรือ0จากที่หนึ่งและที่2จากที่สองและเป็น 3 กองHG(v)Hout(w)HT(v)HG(v)2HT(v)1Hout(w)02

ด้วยฉันสามารถสร้าง DAG เรียกว่าD ( G )ที่มีจุดสุดยอดสำหรับแต่ละ*จุดสุดยอดที่มีตำหนิจากH T ( V )และสำหรับแต่ละจุดสุดยอดที่ไม่ใช่รากจากH o ยูที ( วี )HG(v)D(G)HT(v)Hout(v)

รากของในD ( G )จะเรียกว่าเอช( วี)และพวกเขาจะเชื่อมต่อไปยังจุดที่พวกเขาอยู่ตามo ยูที( V )ด้วย "การทำแผนที่"HG(v)D(G)h(v)out(v)

จนถึงตอนนี้ดีมาก

กระดาษกล่าวว่าฉันสามารถสร้างโดยการใส่รากR = R ( s )และการเชื่อมต่อนี้ไปยังเอช( s )โดยขอบ inital กับδ ( H ( s ) ) จุดยอดของD ( G )เหมือนกันในP ( G )แต่ไม่มีการถ่วงน้ำหนัก ขอบมีความยาว จากนั้นสำหรับแต่ละขอบชี้นำ( u , v ) D ( G )P(G)r=r(s)h(s)δ(h(s))D(G)P(G)(u,v)D(G)ขอบที่สอดคล้องกันในมีการสร้างและถ่วงน้ำหนักด้วยδ ( วี) - δ ( U ) พวกเขาเรียกว่า Heap Edges จากนั้นสำหรับแต่ละจุดยอดv P ( G )ซึ่งหมายถึงขอบที่ไม่ได้อยู่ในเส้นทางที่สั้นที่สุดที่เชื่อมต่อจุดยอดคู่กับuและw "ข้ามขอบ" ถูกสร้างขึ้นจากvถึงh ( w )ในP ( G ) ที่มีความยาวδ ( h ( wP(G)δ(v)δ(u)vP(G)uwvh(w)P(G) ) จุดยอดทุกอันใน P ( G )มีระดับการออกสูงสุด 4สูงสุดเท่านั้นδ(h(w))P(G)4

เส้นทาง 's เริ่มต้นจาก Rที่ควรจะเป็นอย่างใดอย่างหนึ่งต่อหนึ่งระยะเวลาในการติดต่อระหว่าง s -เสื้อ -paths ในGP(G)rstG

ในที่สุดกองใหม่สั่ง 4-Heap คือการสร้าง แต่ละจุดสุดยอดสอดคล้องกับเส้นทางในP ( G )ที่ฝังรากที่R พาเรนต์ของจุดสุดยอดใด ๆ มีขอบที่น้อยกว่าหนึ่ง น้ำหนักของจุดยอดคือความยาวของเส้นทางที่สอดคล้องกันH(G)P(G)r

เพื่อหาสิ่งที่เส้นทางที่สั้นที่สุดที่ผมใช้ BFS เพื่อP ( G )และ "แปล" ผลการค้นหาเพื่อเส้นทางโดยใช้H ( G )kP(G)H(G)

น่าเสียดายที่ฉันไม่เข้าใจว่าฉันสามารถ "อ่าน" แล้ว "แปล" ผ่านH ( G )เพื่อรับเส้นทางที่สั้นที่สุดkP(G)H(G)k


6
คุณตรวจสอบการใช้งานต่างๆที่ics.uci.edu/~eppstein/pubs/p-kpath.htmlหรือไม่
Radu GRIGore

คำตอบ:


25

มันนานพอแล้วที่ฉันเขียนว่าตอนนี้การตีความของฉันเกี่ยวกับสิ่งที่อยู่ในนั้นอาจไม่ได้รับการบอกเล่ามากไปกว่าผู้อ่านคนอื่น ๆ แต่ถึงอย่างไร:

ฉันเชื่อว่าคำอธิบายที่คุณกำลังมองหาคือย่อหน้าสุดท้ายของการพิสูจน์เล็มม่า 5 โดยทั่วไปขอบบางส่วนใน P (G) ("ข้ามขอบ") สอดคล้องกับ sidetracks ใน G (นั่นคือขอบที่ แตกต่างจากแผนผังเส้นทางที่สั้นที่สุด) เส้นทางใน G เกิดจากการติดตามทรีทรีที่สั้นที่สุดไปยังจุดเริ่มต้นของซิดแทร็คแรกตามขอบซิดแทร็คตัวเองตามหลังทรีพา ธ ที่สั้นที่สุดอีกครั้งไปยังจุดเริ่มต้นของไซด์แทรคถัดไปเป็นต้น


1
อัลกอรึทึมนี้ดูเหมือนจะมีประสิทธิภาพสูงกว่าเมื่อเร็ว ๆ นี้ รายละเอียดสามารถพบได้ที่นี่
Carlos Linares López

เดวิดฉันต้องการการนำอัลกอริทึมของคุณไปใช้จริงดีที่สุดใน Java คุณช่วยชี้ฉันที่ฉันหาได้ที่ไหน
Tina J

1
การใช้งานที่ฉันรู้เกี่ยวกับมีการเชื่อมโยงจากด้านล่างของics.uci.edu/~eppstein/pubs/p-kpath.html - แต่ฉันไม่ได้ตรวจสอบคนนอกไซต์เมื่อเร็ว ๆ นี้ดังนั้นอาจมีการเชื่อมโยงบางส่วน
David Eppstein

ขอบคุณ แต่ที่สำคัญคุณมีรหัสหลอกของอัลกอริทึมของคุณที่มีอยู่หรือไม่?
Tina J

@DavidEppstein สิ่งที่คล้ายกับ Dijkstra's ที่ Wikipedia: en.wikipedia.org/wiki/K_shortest_path_routing
Tina J

4

Pseudocode สำหรับอัลกอริธึมของ Eppstein (และรุ่นขี้เกียจของผู้เขียน) มีให้ใน: VM Jiménez, A. Marzal, รุ่นขี้เกียจของอัลกอริทึมเส้นทางที่สั้นที่สุดของ Eppstein ใน: การประชุมเชิงปฏิบัติการระดับนานาชาติครั้งที่ 2 เกี่ยวกับขั้นตอนการทดลองและประสิทธิภาพ ใน: บันทึกการบรรยายในวิทยาการคอมพิวเตอร์, บทที่. 2647, Springer, 2003, pp. 179–190 https://pdfs.semanticscholar.org/3a31/5a14a2fc773d2d800186121905016de31705.pdf

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.