Bir grafik düşünün , biz iki farklı yol vardır olmadığını bilmek isteyen A için B aynı uzunlukta. Ne yapalım? Basit: İki yolu bir arada kodlayın. G ′ grafiğini V × V × { 0 , 1 } köşeleriyle tanımlayın . Sen bir adım yapmak G ' iki bağımsız adımları yaparak G . Ek bit, iki yolun zaten birbirinden ayrılıp ayrılmadığını gösterir.GABG′V×V×{0,1}G′G
Resmi olarak, bir kenar var içinde G ' IFF i → i ' , J → j ' de G ve e ' = E ∨ ( i , i ' ) ≠ ( j , j ′ ) .(i,j,e)→(i′,j′,e′)G′i→i′j→j′Ge′=e∨(i,i′)≠(j,j′)
Algoritma kontrolleri bir yol olup olmadığını için ( B , B , 1 ) içinde G ' ise, O ( V 4 ) gibi, ya da bir şey O ( ( V + e ) 2 ) .(A,A,0)(B,B,1)G′O(V4)O((V+E)2)
Bu algoritma bir sonucu olarak, daha sonra doğru kabul ediyorsanız, içinde yol en fazla uzunluğu olan 2 n 2 nedenle potansiyel "yol çarpışmalar" diye uzun uzadıya son gerçekleşmelidir. Bu gözlemden bir O ( V ω log V ) algoritması alabilirsiniz, burada ω matris çarpma karmaşıklığıdır (bir spoilere ihtiyacınız olup olmadığını sorun ...).G′2n2O(VωlogV)ω
Sorunun yapısını daha fazla kullanan bir algoritması olduğunu kuvvetle hissediyorum .O(V+E)