Dinamik bir grafiğin en kısa yolunu alma


24

Şu anda yönlendirilmiş grafiklerde en kısa yolları inceliyorum. Dijkstra veya bellman-ford's gibi bir ağdaki en kısa yolu bulmak için birçok etkili algoritma vardır. Peki ya grafik dinamikse? Dinamik derken, programın çalışması sırasında köşeleri ekleyebileceğimizi veya çıkarabileceğimizi kastediyorum. Bir köşe gelen kısa yolları güncellemek için etkin bir algoritma bulmaya çalışıyorum her köşe için u bir kenar taktıktan sonra, e tekrar yeni grafikte en kısa yol algoritması çalıştırılmasına gerek olmadan,. Bunu nasıl yapabilirim? Şimdiden teşekkürler.vue

  • Not: Değişiklikler algoritmanın ilk yinelemesinden sonra yapılabilir.
  • Not: [2]: iki düğüm verilir, , kaynak ve t hedef. Bu düğümler arasındaki en kısa yolu bulmam gerekiyor. Grafik güncellendiğinde sadece s ve t arasındaki en kısa yol olan π ( s , t ) ' yi güncellemem gerekiyor .stπ(s,t)st
  • Not [3]: Sadece kenar yerleştirme durumuyla ilgileniyorum.

Resmi bir tanım : Bir grafik . Bir tanımlama güncelleştirme işlemi ) bir kenar bölgesinin bir ekleme 1 olarak e kadar ya da 2) bir kenar aa silme dan . Amaç, bir güncelleme işleminden sonra en kısa yoldaki tüm çiftlerin maliyetini verimli bir şekilde bulmaktır. Verimli bir şekilde, en azından her güncelleme işleminden sonra Bellman-Ford algoritması gibi bir All-Pairs-En Kısa Yol algoritması uygulamaktan daha iyisi kastediyoruz.G,=(V,E)ee eEeE


Düzenleme: Aşağıda sorunun basitleştirilmiş bir sürümü var:

Ağırlıklı bir grafiktir iki kritik noktalar tek yönlü kenarlarının oluşan verilir vesG,(V,E)s ve . Ayrıca , bir çift ​​yönlü kenar aday kümesi C de verilmiştir. Bir kenar oluşturmak zorunda ( u , v ) mesafeyi en aza indirmek için s için t .tC(u,v)Cst


Daha fazla açıklama sorusu: Yolunuzun bitiş noktaları her zaman sabit kalır mı? Yalnızca kenar ekleme durumuyla mı, yoksa grafikteki rastgele değişikliklerle mi ilgileniyorsunuz? Sorunuza cevap veren bir araştırma olduğunu düşünürdüm, fakat ne yazık ki nereye bakacağımı bilmiyorum. Hızlı bir Google araması, çok yararlı görünen bu slaytları ve bu makaleyi açar: "dinamik grafiklerdeki en kısa yollar" (bağlantının işe yaramasını umarız). (u,v)
usul

Yanıtlar:


14

Muhtemelen fark ettiğiniz gibi sorun oldukça zor bir sorundur. Web'i kontrol etmek, muhtemelen ihtiyacınız olmayacak bazı karmaşık durumlara yol açacaktır. İşte bir çözüm - gerektiği gibi (yani her şeyi sıfırdan yeniden hesaplamanıza gerek yok).

kenar eklemek için - o zaman zaten yerleşik mesafe matrisini kullanarak - şunları yapın:(u,v)

Düğümlerin her çifti için, ve y kontrol durumunda d ( ( x , u ) ) + c ( ( u , v ) ) + d ( ( v , y ) ) < d ( ( x , y ) ) - bu yapılabilir içerisinde , O ( n, 2 ) Eğer düğüm her çifti karşılaştırılması çünkü.xyd((x,u))+c((u,v))+d((v,y))<d((x,y))O(n2)

Kenar silme durum için: çoktan inşa mesafe matris göz önüne alındığında, o zaman her düğüm için olabilir en köklü bir kısa yol ağacı u . Silinen kenar e bu ağaçta değilse, u'dan diğerine giden en kısa yollar etkilenmez - (aynı kalırlar).uueu

Eğer arasında en kısa yol ağacının olan u her düğüm daha sonra, v gibi kısa yol olduğu π ( u , v ) içerir , e , yollar değişecektir. Bu nedenle, bir kısa yol hesaplamak u için v . Şimdi, her düğüm için bir önceki adımı tekrarlayın - bu en iyi çözüm değildir. Aslında, en kötü durumda, sıfırdan her şeyi yapmaya asimptotik olarak eşittir, ancak ortalama olarak daha iyi olabilir. euvπ(u,v)euv

Bundan daha iyi sonuç almak istiyorsanız, o zaman bir göz atın:

  1. Demetrescu, Camil ve Giuseppe F. Italiano. "Tüm çiftlerin en kısa yolları dinlemeye yeni bir yaklaşım." ACM Dergisi (JACM) 51.6 (2004): 968-992. (Google’dan serbestçe bulunabilir)

  2. veya bu güzel yazılı ankete bir göz atın


17

İstediğiniz sorun, iyi bilinen bir algoritmik problemdir. Aslında hala açık, bu sorunun ne kadar zor olduğu. Ayrıca, bu sorunun farklı enkarnasyonlarının olduğunu bilmelisiniz. Bunun aksine, ne istediğinizi, genellikle yalnızca mesafeler döndürülür, oysa gerçek en kısa yolları istersiniz. Bu yolların zaten çok uzun olabileceğine dikkat edin. Dinamik grafik algoritmaları, yalnızca kenar silmeleri (ondalık dg algoritmaları), yalnızca kenar eklemeleri (artımlı dg algoritmaları) ve kenar eklemeleri ve silmeleri (tam dinamik dg algoritmaları) arasında ayrım yapar. Böylece artımlı algoritmalara ilgi duyuyorsunuz .

AJed sonrası belirtilen algoritmalar, biraz modası geçmiş. Kısa bir anket için Thorup'tan yeni sonuçlar var, buraya bakın , sayfa 8 . Şu anda Thorup tarafından en iyi tam dinamik tam APSP algoritması (yol sorguları için değil yolu), O ( 1 ) 'i desteklerken itfa edilmiş güncelleme süresi gerektirir En kötü durum sorgu zamanı: Dikkat edin, eğer O ( n log n )O(n2(günlükn+günlük2(1+m/n))O(1)O(ngünlükn)kenarları, Dijkstra ve Fibonacci-yığınları ile sıfırdan hesaplayabilir ve Thorup algoritmasında olduğu gibi aynı çalışma süresini elde edebilirsiniz. Eğer grafikleriniz yoğun değilse, Dijkstra'yı kullanmanızı tavsiye ederim.

Daha iyi bir artımlı algoritmanın farkında değilim . Ancak bu özel sorun için daha yeni sonuçlar varsa, bir web araması yapmanız gerekir.


(s,t)

@RondogiannisAristophanes aslında şu ana kadar önerilen şey bir şekilde en iyisi. "Kademeli ya da yönlendirilmemiş grafikler için artımlı ve en aza indirgenmiş tek kaynaklı en kısa yollar sorunlarının, güçlü anlamda, en azından en az statik tüm çiftlerin en kısa yolları kadar sert olduğunu sorun." (dürüst olmak gerekirse, sadece th intro okudum) - referans: "Dinamik en kısa yol problemlerinde", Roditty ve Zwick - ama lütfen bize tam olarak sorunun ne olduğunu söyler misiniz? Hangi özel senaryo? şimdiye kadar ne yaptın? - belki size daha iyi yardımcı olabiliriz.
AJed

@RogogiannisAristophanes performansı ne kadar iyi olursa, uygulaması o kadar zor (çoğu durumda) ve bazen pratik uygulamalarda performansta bu kadar fazla iyileştirmeye ihtiyaç duymazsınız.
AJed

@ AJed Ben sorunun basitleştirilmiş bir açıklamasını içerecek şekilde yazımı düzenledi.
Rontogiannis Aristofanis,

5

AD * algoritmasının size yardımcı olabileceğine inanıyorum.

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

Temel grafikle ilgili güncellenmiş bilgiler alındığında, algoritma önceki çözümünü aşamalı olarak onarır. Sonuç, karmaşık, dinamik arama sorunlarına etkili çözümler sağlamak için her zaman ve artan planlayıcıların faydalarını birleştiren bir yaklaşımdır.

AD * vurgulamaktadır: Bu "her zaman" dır, yani en iyisi olmasa da, size çok hızlı bir şekilde "optimal altı bir çözüm" verebilir. Yine de yeterince zaman verildiğinde, en uygun çözümü getirecektir. Ayrıca, bazı kullanıcı tanımlı bir sabit tarafından alt-optimal çözümü, optimal çözümden daha kötü olmayacak şekilde kısıtlayabilirsiniz. Bu size bunu, gerçek bir planlama senaryosunda kullanma imkanı verir (burada 'tamam' teorik olarak sınırlandırılmıştır) tam bir çözüme sahip olmak hiç bir çözüme sahip olmaktan daha iyidir.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.