Seyrek bir grafikteki en kısa yolları bulmak için en hızlı algoritma nedir?


24

2 olacak şekilde köşeleri ve kenarları olan, ağırlıklandırılmamış, yönlendirilmemiş bir grafikte, grafikteki en kısa yolları bulmanın en hızlı yolu nedir? olan Floyd-Warshall'den daha hızlı ancak yineleme başına çok hızlı yapılabilir mi?E 2 V > E O ( V 3 )VE2V>EO(V3)

Grafik ağırlıklı ise?

Yanıtlar:


32

Bu bir ağırlıksız grafik olduğundan, bir çalıştırabilir Genişlik İlk Search her köşe dan (BFS) grafikte. Her BFS çalıştırması size başlangıç ​​tepe noktasından diğer tüm köşe noktalarına en kısa mesafeleri (ve yolları) verir. Bir BFS için zaman karmaşıklığı itibaren daki seyrek grafikte. kere çalıştırmak size zaman karmaşıklığı verir.O ( V + e ) = O ( V ) e = O ( V ) V O ( V 2 )vO(V+E)=O(V)E=O(V)VO(V2)

Ağırlıklı yönlendirilmiş bir grafik için, Yuval tarafından önerilen Johnson algoritması seyrek grafikler için en hızlı olandır. O alır sizin durumunuzda olarak çıkıyor . Ağırlıklandırılmış, yönlendirilmemiş bir grafik için, Dijkstra'nın algoritmasını her bir düğümden çalıştırabilir ya da her bir yönlendirilmemiş kenarı iki zıt yönlendirilmiş kenarla değiştirebilir ve Johnson algoritmasını çalıştırabilirsiniz. Her ikisi de, seyrek durumunuz için yukarıdaki Johnson algoritmasıyla aynı aysmptotik süreleri verecektir. Ayrıca yukarıda bahsettiğim BFS yaklaşımının hem yönlendirilmiş hem de yönlendirilmemiş grafikler için işe yaradığını unutmayın.O ( V 2 günlüğü V )O(V2günlükV+VE)O(V2günlükV)



7

Seyrek matrislerde daha hızlı olan Floyd-Warshall versiyonunu yapmaya çalışabilirsiniz.

İlk önce, bu algoritmanın ne yaptığını hatırlayalım:

bir mesafeler matrisi olsun . Algoritmanın başında , kenarının ağırlığıdır . Bu kenar yoksa .M i , j i j M i , j = MMben,jbenjMben,j=

Algoritma adımlıdır. Algoritmanın aşamasında , düğümlerinin her çifti için belirlediğimizk i , jVkben,j

Mben,jmin{Mben,j,Mben,k+Mk,j}.

Açıkça, veya güncelleme yapılması gerekmez. Böylece, algoritmanın ilk adımlarında, sadece kabaca gerçekleştirmek için gereken karşılaştırmalar nerede ve göstermek sırasıyla nodunun gelen ve giden kenarlarının sayısı . Algoritma ilerledikçe, matrisinin gittikçe daha fazla girişi doldurulur. Bu nedenle, son adımlar daha uzun sürebilir.M k , J = d , e g ı n ( k ) d , e g O u t ( k ) d e g ı n ( k ) d e g O u t ( k ) K EMben,k=Mk,j=degbenn(k)degOut(k)degbenn(k)degOut(k)kM

Not biz yineleme için sadece üzerinde olmayan sonsuz hücrelerini etkili bir yola ihtiyaç duyduklarını matrisinin-inci satır ve sütunun. Bu, her düğüm için bir dizi gelen ve giden kenar tutularak yapılabilir.k

Algoritmanın ilk adımlarının seyreklikten büyük ölçüde yararlanabileceği anlaşılmaktadır. Örneğin, ile rastgele oluşturulmuş bir grafik , ilk yinelemenin ( ) yalnızca adım olduğunu gösterir. Eğer grafik birçok bağlı bileşene bölünürse, o zaman matrisi algoritma boyunca nispeten seyrek kalır ve toplam çalışma zamanı kadar düşük olabilir . Öte yandan, grafik sadece bir bağlı bileşen içeriyorsa, son yineleme adım atması bekleniyor . Bu durumda toplam çalışma zamanı . Seyrek olmayan sürümü kadar büyük.k = 0 O ( 1 ) M O ( V ) k = | V | O ( V 2 ) O ( V 3 )E=O(V)k=0O(1)MO(V)k=|V|O(V2)O(V3)

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.