这个问题可以通过将问题简化为
最短路径问题来解决,假设我们确实在讨论概率(也就是说每个权重都在
[0,1]
范围内)。让图形为
G=(V,E)
,两个顶点之间的概率表示为
w(u,v)
。定义:
w'(u,v) =-log(w(u,v))
。从某个节点
s
到某个节点
t
的最短路径是使用
w'
作为权重函数时图中的最短路径。您可以使用
Dijkstra算法或
Bellman-Ford算法找到最短路径。证明如下:对于路径
v1->v2->...->vn
,它的概率是
w(v1,v2) * w(v2,v3) * ... * w(vn-1,vn)
。当使用
w'
作为权重时,使用任何最短路径算法计算这条路径的成本为:
d(v1,vn) = w'(v1,v2) + w'(v2,v3) + ... + w'(vn-1,vn) =
d(v1,vn) = -log(w(v1,v2)) + -log(w(v2,v3) + ... + -log(w(vn-1,vn)) =
d(v1,vn) = -1* [ log(w(v1,v2)) + log(w(v2,v3)) + ... + log(w(vn-1,vn)) =
d(v1,vn) = -1* log(w(v1,v2) * w(v2,v3) * ... * w(vn-1,vn))
这显然也适用于从
s
到
t
找到的最小路径。
这意味着该路径具有最小值:
s(s,t) = -1* log(w(s,v2) * w(v2,v3) * ... * w(vn-1,t))
由于对数是单调函数,因此它也是-1 * w(s,v2) * w(v2,v3) * ... * w(vn-1,t)
的最小值,即w(s,v2) * w(v2,v3) * ... * w(vn-1,t)
的最大值,而这正是概率。