Algorithm 找到最可靠的路径-Dijkstra’;s算法
给出了一个有向图G=(V,E),其中每一条边(u,V)∈ E有一个关联的 值r(u,v),是范围为0的实数≤ r(u,v)≤ 1表示从顶点u到顶点v的通信信道的可靠性。我们将r(u,v)解释为 从u到的信道不会失败的概率,我们假设这些概率 他们是独立的。给出了一种在给定的两条路径之间寻找最可靠路径的有效算法 顶点Algorithm 找到最可靠的路径-Dijkstra’;s算法,algorithm,data-structures,graph,computer-science,dijkstra,Algorithm,Data Structures,Graph,Computer Science,Dijkstra,给出了一个有向图G=(V,E),其中每一条边(u,V)∈ E有一个关联的 值r(u,v),是范围为0的实数≤ r(u,v)≤ 1表示从顶点u到顶点v的通信信道的可靠性。我们将r(u,v)解释为 从u到的信道不会失败的概率,我们假设这些概率 他们是独立的。给出了一种在给定的两条路径之间寻找最可靠路径的有效算法 顶点 a / \ b<--c a directed to c; c directed to b; b directed to a a / \
a
/ \
b<--c a directed to c; c directed to b; b directed to a
a
/ \
B
我们将r(u,v)解释为信道从u到
不会失败,我们假设这些概率是独立的
由此可以推断,给定路径不会失败的概率等于构成该路径的所有边的(u,v)
的乘积
你想最大限度地利用这个产品
这与最短路径问题完全相同,对于最短路径问题,你肯定知道一个算法,除了不是最小化一个和,而是试图最大化一个乘积
从乘积到和有一个很酷的工具:对数。对数是一个递增函数,因此最大化乘积与最大化该乘积的对数是相同的。但对数还有另外一个很酷的特性,即乘积的对数等于对数之和:
log(a * b * c * d * ...) = log(a) + log(b) + log(c) + log(d) + ...
因此,最大化可靠性的乘积r(u,v)
与最大化日志可靠性的总和log(r(u,v))
是相同的
由于可靠性是边的概率,因此它们是介于0(排除)和1(包括)之间的值。可以排除0,因为如果某条边的可靠性为0,则可以从图形中删除该边。因为0log(a * b * c * d * ...) = log(a) + log(b) + log(c) + log(d) + ...