Senin problemin olduğunu görünüyor . İşte bir algoritma.NL
Birincisi, nondeterministically bir yolunu tahmin için t . Yanlış tahmin ederseniz, reddedin . Bu algoritmaya A deyin .stA
En az iki yol olup olmadığını belirleyen aşağıdaki belirleyici olmayan algoritmayı düşünün . Bir grafik ve verilen s , t belirgin kenarları çiftleri için, e , f , bir yolu tahmin s için T içerir , e , ancak f , daha sonra bir yol tahmin s için T içerir f değil e . Tahminler doğruysa kabul edin . E ve f'nin tüm seçenekleri için kabul olmazsa , reddedin . Not BBs,te,fstefstfeefB belirleyici olmayan günlük alanında uygulanabilir.
Şimdi, resim grubu grubu olduğu s - T en az iki yolları ile grafikler s için t . Çünkü K L = C O , N , L , tamamlayıcı B olarak da K , L , yani, biz belirleyebilir s ve t sahip az nondeterministic logspace olarak, iki yolu.L(B)ststNL=coNLBNLst
Nihai algoritma şudur: "Run edin. A kabul eder daha sonra tamamlayıcı çalıştırmak B ve çıkış onun cevabını."AAB
Bir referans bilmiyorum.
GÜNCELLEME: Gerçekten bir referans istiyorsanız, bu makalenin 3. Bölümünün ilk paragrafına bakın . Ancak bu muhtemelen bu sonuca atıfta bulunan birçok referanstan sadece biridir. Sonuçtan bahsetmekte olan bir makaleye atıf yapmak yerine sonucu "folklor" olarak adlandırmak daha mantıklı olacaktır.
GÜNCELLEME 2: Benzersiz bir basit yol olup olmadığını belirlemek istediğinizi varsayalım. Bu durumda, algoritmasının değişmesi gerekmez: eğer bir yol varsa, o zaman basit bir yol vardır. Aşağıdaki modifikasyonun B algoritması için çalışacağına inanıyorum .AB
En az iki basit yol varsa, algoritmasını yeniden yazmak istiyoruz .B
Öncelikle sorun için aşağıdaki polinom-zaman algoritmasını göz önünde bulundurun. Bir en kısa yol ile ilgili s için t . Her kenar için e de P başka varsa, kontrol s - t geçmez yol e . Böyle bir yol bulursanız kabul edin . Asla başka bir yol bulamazsanız reddedin . Çünkü p kısa, bu bir devri sahip değildir ve bazı kenar kullanmayan başka bir yol olup olmadığını P , daha sonra basit ve bazı kenar kullanmayan bir yol yoktur PPstePstePPP. (Bu algoritma "ikinci en kısa yollar" sorunu için kullanılır.)
Bu algoritmayı de uygulayacağız . Biz olsaydı K L kenarları sorgulamak için bir algoritma e sabit bir yol içinde , P , biz nondeterministic logspace yukarıda uygulamak: tüm kenarları yineleme e de P , bir tahmin s - T yolu boyunca ve ziyaret edilen her kenar için kontrol hiçbiri e'ye eşit değildir .NLNLePePste
Yani ihtiyacımız olan bir "yol kâhin", şu özelliklere sahip bir algoritmasıdır: verilen i = 1 , … , n , her hesaplama yolunda algoritma ya belirli bir sabit s - t yolundaki i kenarını rapor eder ya da reddetmek . Sözlükbilimsel olarak ilk yolu izole etmek için N L = c o N L kullanarak bir yol kehaneti elde edebiliriz .NLi=1,…,nistNL=coNL
İşte yol kâhininin bir taslağı.
Bul , en kısa yolun uzunluğuna s için t deneyerek, her k = 1 , ... , n izlenerek ve N- L = c O , N , L .kstk=1,…,nNL=coNL
, x : = 1 , j : = k değişkenlerini ayarlayın .u:=sx:=1j:=k
Tüm komşularının için ait u sözlük sırasını içinde,vu
Bir yol olup olmadığını ya da belirleme için t uzunluğu j - 1 (sonuç kullanılarak K L = C O , N , L ). Daha kesin olarak, s - t bağlantısı için belirsiz olmayan algoritmayı ( j - 1 uzunluğunda ) ve tamamlayıcı algoritmasını aynı anda çalıştırın. Bunlardan biri kabul ettiğinde cevabı ile gidin (doğru olmalı; ikisi de kabul edemez). Her ikisi de reddederse reddedin .vtj−1NL=coNLstj−1
Yol yoksa, bir sonraki komşuya geçin. Tüm komşuları tükettiğinde reddet .
Bir yol ise, o zaman, eğer , çıkış ( u , v ) olarak ı den yola inci kenar s için t . Aksi takdirde , x'i artırın, j'yi azaltın , u : = v olarak ayarlayın ve v ≠ t ise for döngüsünü yeniden başlatın .x=i(u,v)istxju:=vv≠t
Eğer t çıkışına ulaştıktan sonra kötü i (verilen i çok büyüktü).x<itii
Verilen , bu algoritma ya çıktılar i sözlük sırasında en kısa yol üzerindeki inci kenar P arasından s için t ya da ıskarta.iiPst