การดึงเส้นทางที่สั้นที่สุดของกราฟแบบไดนามิก


24

ฉันกำลังศึกษาเส้นทางที่สั้นที่สุดในกราฟกำกับ มีอัลกอริธึมที่มีประสิทธิภาพมากมายสำหรับการค้นหาเส้นทางที่สั้นที่สุดในเครือข่ายเช่น dijkstra's หรือ bellman-ford's แต่ถ้ากราฟเป็นไดนามิก? โดยการพูดแบบไดนามิกฉันหมายความว่าเราสามารถแทรกหรือลบจุดยอดในระหว่างการดำเนินการของโปรแกรม ฉันพยายามที่จะหาขั้นตอนวิธีการที่มีประสิทธิภาพสำหรับการปรับปรุงเส้นทางที่สั้นที่สุดจากจุดสุดยอดทุกจุดสุดยอดอื่น ๆUหลังจากการใส่ขอบอีโดยไม่จำเป็นต้องเรียกใช้อัลกอริทึมเส้นทางที่สั้นที่สุดในกราฟใหม่อีกครั้ง ฉันจะทำสิ่งนี้ได้อย่างไร ขอบคุณล่วงหน้า.vue

  • หมายเหตุ:การเปลี่ยนแปลงสามารถทำได้หลังจากการวนซ้ำครั้งแรกของอัลกอริทึม
  • หมายเหตุ [2]: ให้สองโหนดคือต้นทางและtเป้าหมาย ฉันต้องการค้นหาเส้นทางที่สั้นที่สุดระหว่างโหนดเหล่านี้ เมื่อกราฟมีการปรับปรุงฉันมีเพียงแค่การปรับปรุงπ ( s , T )ซึ่งเป็นเส้นทางที่สั้นที่สุดระหว่างsและเสื้อstπ(s,t)st
  • หมายเหตุ [3]:ฉันสนใจเฉพาะเคสใส่ขอบเท่านั้น

ความหมายอย่างเป็นทางการ : ให้กราฟ ) กำหนดดำเนินการปรับปรุงเป็น 1) แทรกของขอบอีเพื่อEหรือ 2) การลบขอบ AA อีจากE วัตถุประสงค์คือการหาค่าใช้จ่ายของเส้นทางที่สั้นที่สุดของคู่ทั้งหมดอย่างมีประสิทธิภาพหลังจากการดำเนินการอัพเดท อย่างมีประสิทธิภาพเราหมายถึงอย่างน้อยก็ดีกว่าดำเนินการอัลกอริทึม All-Pairs-Shortest-Path เช่นอัลกอรึทึมของ Bellman-Ford หลังจากการดำเนินการอัพเดทแต่ละครั้งG=(V,E)eEeE


แก้ไข:ด้านล่างมีปัญหาในเวอร์ชันที่ง่ายขึ้น:

กราฟถ่วงน้ำหนักจะได้รับประกอบด้วยขอบทิศทางเดียวและสองจุดสำคัญsและเสื้อ ชุดของขอบสองทิศทางของผู้สมัครจะได้รับเช่นกัน ฉันจะต้องสร้างขอบเพื่อลดระยะทางจากไปทีG(V,E)stC(u,v)Cst


คำถามชี้แจงเพิ่มเติม: จุดสิ้นสุดของเส้นทางของคุณรับการแก้ไขทุกครั้งหรือไม่ คุณสนใจเฉพาะกรณีที่มีการแทรกขอบหรือในการเปลี่ยนแปลงกราฟหรือไม่? ฉันคิดว่ามีงานวิจัยตอบคำถามของคุณ แต่น่าเสียดายที่ฉันไม่รู้ว่าจะต้องดูที่ไหน การค้นหาโดย Google อย่างรวดเร็วทำให้สไลด์เหล่านี้ดูเหมือนจะมีประโยชน์มากและบทความนี้: "เส้นทางที่สั้นที่สุดในกราฟแบบไดนามิก" (หวังว่าลิงก์จะใช้งานได้) (ยู,โวลต์)
usul

คำตอบ:


14

ปัญหาที่คุณอาจสังเกตเห็นเป็นปัญหาที่ค่อนข้างยาก การตรวจสอบเว็บจะนำไปสู่อินสแตนซ์ที่ซับซ้อนบางอย่างที่คุณอาจไม่ต้องการ นี่คือวิธีแก้ปัญหา - ตามที่ต้องการ (เช่นคุณไม่จำเป็นต้องคำนวณทุกอย่างใหม่ตั้งแต่ต้น)

สำหรับกรณีของการเพิ่มขอบ - จากนั้นใช้เมทริกซ์ระยะทางที่มีอยู่แล้วของคุณ(ยู,โวลต์)

สำหรับทุก ๆ คู่ของโหนดและyตรวจสอบว่าd ( ( x , u ) ) + c ( ( u , v ) ) + d ( ( v , y ) ) < d ( ( x , y ) ) - สิ่งนี้สามารถทำได้ ในO ( n 2 )เนื่องจากคุณกำลังเปรียบเทียบโหนดทุกคู่xYd((x,u))+c((u,v))+d((v,y))<d((x,y))O(n2)

สำหรับกรณีของการลบขอบ: ให้เมทริกซ์ระยะทางที่สร้างขึ้นแล้วจากนั้นคุณสามารถมีสำหรับทุกโหนดต้นไม้ที่สั้นที่สุดเส้นทางที่หยั่งรากที่ยู หากขอบที่ถูกลบeไม่ได้อยู่ในทรีนั้นแสดงว่าเส้นทางที่สั้นที่สุดจากuถึงกันและกันไม่ได้รับผลกระทบ - (มันยังคงเหมือนเดิม)uueu

หากอยู่ในแผนผังเส้นทางที่สั้นที่สุดของuดังนั้นสำหรับทุกโหนดvเช่นนั้นเส้นทางที่สั้นที่สุดπ ( u , v )รวมถึงeเส้นทางจะเปลี่ยนไป ดังนั้นการคำนวณเส้นทางที่สั้นที่สุดจากยูจะวี ตอนนี้ทำซ้ำก่อนหน้านี้สำหรับทุกโหนด - นี่ไม่ใช่ทางออกที่ดีที่สุด ในความเป็นจริงในกรณีที่เลวร้ายที่สุดมันเทียบเท่ากับการทำทุกสิ่งตั้งแต่เริ่มต้น แต่สามารถทำได้ดีกว่าโดยเฉลี่ย euvπ(u,v)euv

หากคุณต้องการผลลัพธ์ที่ดีกว่านี้ให้ดูที่:

  1. Demetrescu, Camil และ Giuseppe F. Italiano "วิธีการใหม่ในการสร้างเส้นทางที่สั้นที่สุดสำหรับคู่ทั้งหมด" วารสาร ACM (JACM) 51.6 (2004): 968-992 (สามารถพบได้อย่างอิสระจาก Google)

  2. หรือดูที่การสำรวจเป็นลายลักษณ์อักษรอย่างนี้


17

ปัญหาที่คุณขอเป็นปัญหาอัลกอริทึมที่รู้จักกันดี จริงๆแล้วมันยังเปิดอยู่ว่าปัญหานี้หนักแค่ไหน นอกจากนี้คุณควรรู้ว่ามีสาขาที่แตกต่างกันของปัญหานี้ ในทางตรงกันข้ามสิ่งที่คุณขอมักจะกลับเฉพาะระยะทางในขณะที่คุณขอเส้นทางที่สั้นที่สุดที่เกิดขึ้นจริง โปรดสังเกตว่าเส้นทางเหล่านี้อาจมีความยาวมากแล้ว อัลกอริธึมกราฟแบบไดนามิกแยกความแตกต่างระหว่างการลบขอบเท่านั้น (อัลกอริทึม dg ที่ลดลง), การแทรกขอบเท่านั้น (อัลกอริทึม dg ที่เพิ่มขึ้น) และการแทรกและการลบขอบ (อัลกอริทึม dg เต็มไดนามิก) ดังนั้นคุณมีความสนใจในอัลกอริทึมที่เพิ่มขึ้น

อัลกอริทึมที่กล่าวถึงในโพสต์ของ AJed ล้าสมัยเล็กน้อย Thorup มีผลลัพธ์ที่ใหม่กว่าดูที่นี่ในหน้า 8สำหรับแบบสำรวจสั้น ๆ อัลกอริทึม APSP ที่แน่นอนแบบไดนามิกที่ดีที่สุดในปัจจุบันโดย Thorup (สำหรับการค้นหาระยะทางไม่ใช่พา ธ ) ต้องการเวลาอัปเดตการตัดจำหน่ายในขณะที่สนับสนุนO ( 1 )เวลาสอบถามกรณีที่แย่ที่สุดสังเกตว่าถ้าคุณมีO ( n log n )O(n2(logn+log2(1+m/n))O(1)O(nlogn)ขอบจากนั้นคุณสามารถคำนวณใหม่ได้ตั้งแต่เริ่มต้นด้วย Dijkstra และ Fibonacci-heaps และรับเวลาทำงานเหมือนในอัลกอริทึมของ Thorup ดังนั้นหากกราฟของคุณไม่หนาแน่นฉันขอแนะนำให้ใช้ Dijkstra

ฉันไม่ได้ตระหนักถึงอัลกอริทึมที่เพิ่มขึ้นใด ๆ ที่ดีกว่า แต่คุณควรทำการค้นหาทางเว็บหากมีผลลัพธ์ที่ใหม่กว่าสำหรับปัญหาเฉพาะนี้


ฉันไม่ต้องการอัปเดตเส้นทางที่สั้นที่สุดทั้งหมดในกราฟ แต่ระหว่างคู่ที่กำหนดเท่านั้น มีอะไรที่ดีไปกว่านี้อีกแล้ว? (s,t)
Rontogiannis Aristofanis

@RondogiannisAristophanes ในความเป็นจริงสิ่งที่ได้รับการเสนอเพื่อให้ห่างไกลเป็นอย่างใดที่ดีที่สุด ลองดูที่บทความนี้ซึ่งอ้างว่า: "ปัญหาที่เพิ่มขึ้นและลดลงแหล่งเดียวที่สั้นที่สุด - เส้นทางเส้นทางสำหรับกราฟน้ำหนักกำกับหรือไม่ได้บอกทิศทางเป็นอย่างน้อยที่สุดเท่าที่ยากที่สุดเท่าที่ทุกคู่เส้นทางที่สั้นที่สุดคงที่ ปัญหา." (พูดตามตรงฉันได้อ่านเฉพาะคำนำ) - การอ้างอิง: "ในปัญหาของเส้นทางที่สั้นที่สุดแบบไดนามิก", Roditty & Zwick - แต่คุณช่วยบอกเราหน่อยได้ไหมว่าปัญหาที่คุณมีคืออะไร? สถานการณ์เฉพาะอะไร จนถึงตอนนี้คุณมีอะไรบ้าง - บางทีเราสามารถช่วยคุณได้ดีขึ้น
AJed

@RondogiannisAristophanes ประสิทธิภาพที่ดีกว่าก็ยากที่จะใช้ (ในกรณีส่วนใหญ่) และบางครั้งในการใช้งานจริงคุณไม่จำเป็นต้องปรับปรุงประสิทธิภาพมากนัก
AJed

@AJed ฉันแก้ไขโพสต์ของฉันเพื่อรวมคำอธิบายที่ง่ายของปัญหา
Rontogiannis Aristofanis

5

ฉันเชื่อว่าอัลกอริธึม AD * อาจช่วยคุณได้

http://www.cs.cmu.edu/~ggordon/likhachev-etal.anytime-dstar.pdf

เมื่อได้รับข้อมูลที่อัปเดตเกี่ยวกับกราฟที่ขีดเส้นใต้แล้วอัลกอริทึมจะซ่อมแซมโซลูชันก่อนหน้าแบบค่อยเป็นค่อยไป ผลที่ได้คือวิธีการที่ผสมผสานประโยชน์ของนักวางแผนที่เพิ่มขึ้นทุกที่ทุกเวลาเพื่อมอบโซลูชั่นที่มีประสิทธิภาพให้กับปัญหาการค้นหาที่ซับซ้อนและมีพลวัต

ไฮไลต์ AD *: มันคือ "ทุกเวลา" ซึ่งหมายความว่ามันจะช่วยให้คุณมี "วิธีแก้ปัญหาย่อยที่ดีที่สุด" ได้อย่างรวดเร็วแม้ว่ามันอาจจะไม่ดีที่สุดก็ตาม ให้เวลาพอ แต่มันจะกลับทางออกที่ดีที่สุด นอกจากนี้คุณสามารถ จำกัด การแก้ปัญหาย่อยที่ดีที่สุดให้ไม่แย่ไปกว่าโซลูชันที่ดีที่สุดโดยค่าคงที่ที่ผู้ใช้กำหนด สิ่งนี้ช่วยให้คุณสามารถใช้สิ่งนี้ในสถานการณ์การวางแผนแบบเรียลไทม์ที่มีวิธีการแก้ปัญหาที่โอเค (ที่ 'โอเค' มีขอบเขตทางทฤษฎี) ดีกว่าไม่มีวิธีแก้ปัญหาเลย

http://www.cs.cmu.edu/~maxim/software.html

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