我們有一個針對通信的有向圖G = (V, E)
。網絡,每個邊緣的概率不存在於區間[0,1]內的r(u, v)
(定義爲邊緣權重)。概率是獨立的,所以從一個頂點到另一個頂點,如果我們乘以所有的概率,我們就可以得到整個路徑不失敗的概率。我需要一個有效的算法來找到從一個給定頂點到另一個給定頂點(即,從第一個頂點到第二個最不可能失敗的路徑)的最可靠路徑。我認爲log(r · s) = log r + log s
會有所幫助。Dijkstra在網絡圖建模上的算法
這是我迄今爲止 - :
DIJKSTRA-VARIANT (G, s, t)
for v in V:
val[v] ← ∞
A ← ∅
Q ← V to initialize Q with vertices in V.
val[s] ← 0
while Q is not ∅ and t is not in A
do x ← EXTRACT-MIN (Q)
A ← A ∪ {x}
for each vertex y ∈ Adj[x]
do if val[x] + p(x, y) < val[y]:
val[y] = val[x] + p(x, y)
s
是源頂點和t
是目標頂點。當然,我還沒有利用log
屬性,因爲我無法理解如何使用它。需要修改底部算法的部分弛豫,並且val
數組將捕獲結果。沒有日誌,它可能會存儲下一個最高的概率。我應該如何修改算法以使用log
?
你對Dijkstra有多瞭解?你知道它解決了什麼問題嗎?你是否看到了這個問題和你給出的問題之間的區別? *現在*您是否看到日誌屬性可能有用? – Beta
1.「你對Dijkstra的理解程度如何?」 - 一點點。 2.「你知道它解決了什麼問題嗎?」 - 它解決了尋找單一來源的最短路徑的問題。 3.「問題之間有什麼區別?」 - 邊權重是在[0,1]範圍內的概率。要找到從一個頂點到另一個頂點的最可靠路徑,我必須乘以概率並獲得最高路徑。 4.「你看到'log'可以用來做什麼嗎?」 - 這是我不明白。 – PritishC
哦,等等...因爲我必須乘以概率,我應該使用'log'來保持總和嗎? – PritishC