Ağırlıklı tek yönlü grafikte en kısa yolları bulun


12

Bir çizge olduğu söylenir unipathic herhangi iki köşe için eğer u ve v grafikte G=(V,E) , en basit bir yolu olarak var olduğu u için v .

Her bir kenarın pozitif veya negatif ağırlığa sahip olacağı, ancak negatif ağırlık çevrimleri içermeyeceği şekilde, tek yönlü bir grafiği verildiğini varsayalım G.

Bundan kaynak düğüm s tüm düğümlere tüm en kısa yolları bulur bir algoritması bulmak istiyorum .O(|V|)s

Bu soruna nasıl yaklaşacağımı bilmiyorum. Bunu daha ne kadar düğüm arasındaki en basit yolda hiçbir olumsuz ağırlık döngülerini ve tabii içerdiğini gerçeğini kullanabilirsiniz görmek çalışıyorum için v .uv


1
Şimdiye kadar ne denedin? Tamamen sıkışmışsanız, küçük başlayın: tek yönlü grafikler gerçekten neye benziyor? Örneğin, her bir tek noktalı grafiği bir tepe noktası, iki köşe noktası, üç köşe noktası vb. İle çizin. Yararlı bir desen görebilirsiniz. Buna ek olarak, negatif ağırlık döngüleri olmadığını belirtiyorsunuz - hatta herhangi bir ağırlıkta döngü olabilir mi?
Juho

@mrm Hangi modeli düşünüyorsun? Unipatik grafiklerin, ifade etmenin kolay bir yolunu bulamadığım kısıtlı bir şekilde döngüleri olabilir.
Gilles 'SO- kötü olmayı bırak'

Bir kenar en fazla bir döngüye ait olabilir. Bir düğüm herhangi bir sayıda döngüye ait olabilir: -noktalı-yıldız şekilli grafik E = i n { ( a , b i ) , ( b i , a ) } tek yönlü (ve daha da yükseltebilirsiniz ) düğüm başına temel döngülerin oranı). nE=in{(a,bi),(bi,a)}
Gilles 'SO

Yanıtlar:


10

Bir veri temsili seçin

İlk olarak, sonucun boyutuna bakın. Sen en kısa yolları toplanmasını istiyoruz her düğüme. Bir yolun ortalama uzunluğu olmayan bir sabiti (sınırlanmış sürece: Herhangi liste Unipath olduğunu ve kök alırsak için s yolların toplam uzunluğu olan n ( n - 1 ) / 2 nerede n ise listenin uzunluğu), veri sunumunuzda dikkatli olmanız gerekir: yolları içeren yapının yollar arasındaki paylaşımı kullanması gerekir.ssn(n1)/2n

Döngüler hariç tutulursa, başka bir u düğümüne tek bir yol vardır . Bu yol bir ara düğüm aracılığıyla giderse t , o yolun ilk parça istenilen yolu s için t . sutst

Sonucu ile | arasında numaralandırılmış düğümlerle dizinlenmiş bir dizide saklamayı öneririm. E | - 1 , s = 0 ile . Dizideki her öğe, önceki düğümün dizinini o düğüme giden yolda saklar ( s'den erişilemeyen düğümler için özel bir işaretçi olarak örn. - 1 kullanın ). Den yol s için t olacaktır ( s = R [ ... R [ t ] ... ] , ... , R [ R, [ t0|E|1s=01sst .(s=R[R[t]],,R[R[t]],R[t],t)

Grafiği hareket ettirin

herkese sıfırla - 1 .R1

İtibaren grafiğin bir derinlik ilk ya da genişliği birinci geçişi gerçekleştirmek . Bir düğüme u her ulaşıldığında, R [ u ] ' yu öncekine ayarlayın.suR[u]

Döngüler olduğundan bir düğüme birden fazla kez ulaşılabilir. Having olduğunu gösterir u önce ziyaret edilmiştir.R[u]1u

Doğruluğunu kanıtlayın

Unipatik özellik nedeniyle, bir döngüyü tamamlamadığımız sürece her bir düğüme nasıl ulaştığımız önemli değildir. Sadece tek bir basit yol var.

Karmaşıklığı kanıtlayın

O(|V|)Θ(|E0|)V0

İyi o zaman. Unipatik bir grafikte, temel döngü sayısının en fazla düğüm sayısı ile doğrusal olarak büyüdüğünü kanıtlayalım. (Bir temel döngü, daha kısa bir döngü içermeyen bir döngüdür.) Aşağıdaki tartışmada, grafiğin kendinden kenarı olmadığını varsayalım (bir düğümden kendine kenarı yok; bu kenarlar yine de yol yapımı için önemsizdir) ).

Unipatik grafiklerin döngüleri olabilir, ancak çok kısıtlı bir şekilde. Her döngüyü bir şekilde ayrı bir düğüme (ya da en azından düğüm başına sınırlı sayıda döngüye) ilişkilendirebilmemiz iyi olurdu. Döngüler bir düğümü paylaşabilir mi? Maalesef evet.

maabii,abi

Bu yüzden daha çok çalışmamız gerekecek. Peki, bunu endüktif olarak kanıtlamaya çalışalım. Let bir grafik düğüm sayısı, , kenarları ve sayısı kendi kendine kenarları olan temel döngü sayısı. tek yönlü ve boş değilse olduğunu iddia ediyorum .#V(G)G#E(G)#C(G)G#C(G)#V(G)1

Bir veya iki düğümü olan bir grafik için bu açıktır. tüm grafikler için olacak şekilde tutulduğunu ve düğümlü tek yönlü bir grafik olmasına izin verdiğinizi varsayalım . Eğer bir dönüşe sahiptir, , durum kapattı. Aksi takdirde, temel bir döngü olsun.#V(G)<nGnG0=#C(G)<#V(G)(a1,,am)

Döngüsü kapa izin düğümleri arasında olanlardır grafik olarak eksi artı bir düğüm , kenarları tüm kenarları ve kapsamayan ' nin, ayrıca her ve zaman . Her yol bir yol indükleyen yolu içeriyorsa ( , daha sonra bu yerineGG{a1,,am}aGaiaGbi,aiGbbGai,bGaiGGbacbaiai+1ajc ) ). Bu nedenle tek yönlüdür. Ayrıca, döngüler kenarları paylaşmadığından, , elimine ettiğimiz hariç tüm döngülere sahiptir : . İndüksiyonla, . Yana , elimizdeki .GGGGG#C(G)=#C(G)1#C(G)#V(G)1#V(G)=#V(G)m+1#C(G)=#C(G)+1#V(G)m=nmn1

Bu, kanıtı sonuçlandırır. Geçiş en fazla kenarı takip eder.2|V|2

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.