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(n−1)/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=0−1sst .(s=R[…R[t]…],…,R[R[t]],R[t],t)
Grafiği hareket ettirin
herkese sıfırla - 1 .R−1
İ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.
maabi∀i,a⇆bi
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 yerineG′G{a1,…,am}aGaia→G′b∃i,ai→Gbb→G′a∃i,b→GaiG′Gb→a→cb→ai→ai+1→…→aj→c ) ). 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 .GG′GG′G#C(G′)=#C(G)−1#C(G′)≤#V(G′)−1#V(G′)=#V(G)−m+1#C(G)=#C(G′)+1≤#V(G)−m=n−m≤n−1
Bu, kanıtı sonuçlandırır. Geçiş en fazla kenarı takip eder.2|V|−2