Yönlendirilmemiş bir grafikte uzunluğu sınırlı basit st yollarının parçası olan tüm düğümleri ve kenarları içeren alt grafik


12

Önceden gönderdiğim soruya oldukça benzer . Ancak bu sefer grafik yönlendirilmez.

verilmiş

  • Bir yönsüz grafik bir çoklu kenarlar veya halkalar ile,G
  • Kaynak köşe noktası ,s
  • Hedef tepe noktası ,t
  • Maksimum yol uzunluğu ,l

arıyorum - herhangi bir tepe noktası ve (ve sadece bu) herhangi bir kenar içeren , en uzunluk ile en az bir basit yolun bir parçası olan bir alt . G G s t lGGGstl

Notlar:

  • Yolları numaralandırmam gerekmiyor.
  • Çok büyük grafikler (10 ^ 8 köşe, 10 ^ 9 kenar) üzerinden yürütmek gerekiyor gibi verimli bir algoritma (hem zaman hem de bellek) arıyorum.

şuna bir bak. Bulunan bu benzer dk maliyet akış azalması yapmak gibi görünüyor, ama daha hızlı daha sonra genel MCF algoritmaları çözmek için ağın özel karakteristiklerini kullanır kağıtları,.
RB

Yanıtlar:


6

Sonuçta sorun . Ben devam edeceğiz önceki cevabı öyle de (diğer soru üzerine cevap olarak, NPC olan) yönlendirilmiş durumda çalışıyor gibi ve gösteriler F P T bakımından l .PFPTl

Yönlendirilmemiş durumda, minimum maliyet akışı ile belirleyici olarak çözülebilir (bu, soruda bahsettiğiniz ölçeklerde işe yaramayabilir, ancak üstel algoritmadan daha iyidir.

Aşağıdaki prosedür bazı kenarlarının çıktı grafiğinin bir parçası olup olmayacağına karar verecektir . Orijinal sorunu cevaplamak için tüm kenarların üzerinden geçmeniz yeterlidir.e=(u,v)E

Akış ağını oluşturmak için aşağıdakileri yapın:

Adım 1: Expand bir köşe için X e ve değiştirme e kenarlı ( U , X , e ) , ( x , e , u ) , ( v , X e ) , ( x , e , h ) (bir şekilde yönlendirilir akış ağının bir parçası), maliyetlerini 0 olarak ayarlayın.exee(u,xe),(xe,u),(v,xe),(xe,v)

Adım 2: x e hariç her köşe iki t - ve t + köşesi ile değiştirin ve bir kenar ( t - , t + ) ekleyin . Bu kenarların maliyetini 1 olarak ayarlayın.txett+(t,t+)

Adım 3: Her kenarın kenarlarını ( a + , b - ) , ( b + , a - ) ile değiştirin . Bu kenarların maliyetini 0 olarak ayarlayın.{a,b}E(a+,b),(b+,a)

Adım 4: Yeni bir köşe ekleyin ve kenarları ( s , y e ) , ( t , y e ) 0 maliyetiyle ekleyin .ye(s,ye),(t,ye)

Adım 5: Tüm kapasiteleri 1 olarak ayarlayın.

Şimdi gelen değeri 2 akışı ararken dakika maliyetli akış algoritması çalıştırmak kadar y e .xeye


Analiz:

  • Her 2-değerli akış kadar y e bir yol bir birleşmedir x es y e ve bir yolu x et y e .xeyexesyexetye
  • Yollar ayrıktır, çünkü her köşe için ( t - , t + ) yayında sadece 1 kapasite vardır .t(t,t+)
  • Döndürülen yollar, mesafeleri toplamı minimum olan iki yoldur ve bu da bulunan akışın maliyeti. Bu , çıkış grafiğine eklememize veya başka türlü silmemize olanak tanır .e

1
Yönlendirilmiş akıştaki azalmayı ortadan kaldırarak yukarıdaki cevaptaki argümanı anlamak daha kolaydır. Basit bir yolu yoktur için t bir düğüm içeren v bir yol vardır ancak ve ancak p den v için s ve bir yol S den v için t öyle ki p ve Q'nun hariç düğüm ayrÛktÛr v . Bu, yöneltilmemişliği çok önemlidir. Bu, akış yoluyla kontrol edilebilir ve maliyet versiyonu da minimum maliyet akışı ile yapılabilir. Bir basit bir yol olup olmadığını kontrol edebilir s için t ihtiva estvPvsSvtPSvste ortasına bir düğüm sokarak . e
Chandra Chekuri

@ChandraChekuri - bu doğru, ancak sorunun uzunluk kısıtlaması yoksa, karar vermek için çok daha basit bir algoritma olduğunu unutmayın - buraya bakın
RB

Elbette, bu çözümün de farkındayım - kavramsal olarak, kesik köşeleri ve iki bağlantılı bileşenleri doğrudan DFS aracılığıyla bulabilse bile, iki bağlantılı bileşenleri ayrık yollarla anlamak iyidir.
Chandra Chekuri

@RB: Teşekkür ederim. Önerilen algoritma, l nispeten büyük olduğunda etkili olabilir, ancak muhtemelen l'nin nispeten küçük değerleri için yetersizdir. Sanırım ilk önce G'den zeminden (l / 2) ve tavandan (l / 2) başka bir tepe noktasını kaldırarak G'yi düzeltebilirim.
Lior Kogan

1
Arka arkaya en kısa yol algoritmasını uyarlamayı deneyin (burada ilgilenilen 2 yol için Surballe algoritması da denir). Her x e için en kısa 2 yolunu bulmak istersiniz ( y e yerine y olarak adlandırmak daha iyidir ) . Bunun önce y'den en kısa yol ağacını hesaplayıp sonra ikinci yol hesaplamasını biraz özenle uygulayarak verimli bir şekilde yapılabileceğini düşünüyorum . yyyexey
Chandra Chekuri

1

İşte olan yanlış cevap: bazı olmayan basit yolları parçası olan köşe çıkarır için t ve önceliğiniz herhangi basit yolunun bir parçası s için t uzunluğunun . Cevap hala sorucunun başvurusu ile ilgili olabilir, bu yüzden burada bırakıyorum.stst

İşte zamanında çalışan bir algoritma (ve küçük olduğunda aslında bundan daha hızlıdır ).Ö(|V|+|E|)

Algoritma bir BFS arama çalışır o sonlandırır derinlikte . Bu tabaklama grubu veren V in her köşe erişilebilir s en uzunlukta bir yol ile , ve aynı zamanda mesafeler hesaplar d i'nin s t ( s , v ) her biri için v V s . Sonra aynı yapardım t ve seti almak V t den ve mesafeleri t . Son olarak, aradığınız köşeler tam olarak V s o l usVssdbenst(s,v)vVstVtt. KenarlarE[ V s o l u t i o n ](=(v,u)VsÖlutbenÖn={v:vVsVt,dbenst(s,v)+dbenst(t,v)}E[VsÖlutbenÖn] ).=(v,u)E:u,vVsÖlutbenÖn

Bu algoritmanın çalışma süresi kesinlikle çünkü sadece iki BFS yapar. Ancak çalışma süresi aslında O ( | V s | + | V T | + | e [ V s ] | + | e [ V t ] | ) grafik boyutundan daha küçük olduğu zaman -radius s ve t mahalleleriÖ(|V|+|E|)Ö(|Vs|+|Vt|+|E[Vs]|+|E[Vt]|)st küçükler.

Düzenleme: Bir BFS'ye yaptığı uygulamada biraz daha hızlı algoritma muhtemelen orada ve t derinliği sadece / 2 ziyade . Bu, tüm yolları keşfeder ve daha sonra biraz defter tutma ile tüm köşeleri bulabilirsiniz. Bu, küçük olduğunda büyük rasgele görünümlü bir grafik olması için çalışma süresini karekök ile keser .st/2


3
Bu, yolu basit olmaya zorlamaz. ve l = 4 basit yol grafiğini düşünün . Sen dönecektir v geçer basit st yolu var olmasına rağmen, çıkış parçası olarak v ...t-u-s-v-xl=4vv
RB

@RB düzeltmesi için teşekkürler. Cevabımı yanlış olduğunu not etmek için düzenledim.
mobius günberi

1

Bu bir yorum olarak tasarlanmıştır, ancak yorum olarak yayınlamak çok uzun.

Ayrıca, amaçlarınız için grafik somun anahtarları veya emülatörlerle de ilgilenebilirsiniz. Grafiğin G = ( V , E ) bir somun anahtarı , birkaç kenarı, ancak yaklaşık olarak korunmuş mesafeleri olan bir H = ( V , E ) alt çizgisidir . Bir emülatör, kenarlarının ağırlıklandırılmasına izin verilen bir H = ( V , E , w ) grafiğidir .G,=(V,E)'H=(V,E')'H=(V,E',w)

Somun anahtarları için en sonuç kenarları ve grafikte mesafe tahminlerine +6 arasında olan bir katkı hatası. Taklitleri en iyi sonucu O ( n, 4 / 3 ) kenarları ve +4 bir katkı hatası. Biz yenebilir Ya için bilinmemektedir O ( n, 4 / 3 ) hata polylogarithmic izin bile.Ö(n4/3)Ö(n4/3)Ö(n4/3)

Bu faydalı görünüyorsa, sizin için ilgili yapıları kazmaya çalışabilirim.

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.