【发布时间】:2016-04-02 05:43:54
【问题描述】:
目前我正在学习图论,在此期间我陷入了以下与图相关的问题。让我们从一个例子开始。这听起来像是一个纯粹的数学问题。
例如:要实现的加权图:
上面显示了一个简化图(它是从更复杂的网络中提取的)。
有 5 条简单路径,14 条具有各自权重的边,以及 11 个节点(不同路径中的蓝色节点可以相同,但在单个路径中节点完全不同)。我正在尝试找到节点 s 和节点 t (均着色为黑色)之间的最佳路径满足以下条件:
- 路径应尽可能短;
- 路径上每条边的权重应尽可能大。
或者我什至可以根据一些方法对所有简单路径进行排名?
更具体地说,让我们将节点视为社交网络中的用户,而将边视为每对用户之间的关联。权重与关联的可靠性成比例(10 是最可靠的,1 是最不可靠的)。
那么,有没有一种好的方法来定义和计算间接关联的权重(节点 s 和节点 t 之间的路径em> 在示例中)?正如我们所知,单条路径在 s 和 t 之间的连接(边)越多,它的可靠性趋于下降;而且,这条单一路径的每个连接的可靠性下降也会导致其可靠性的下降。这就是为什么上述条件需要更短的路径,并且在路径的每个边缘具有更大的权重。
谢谢你们的时间,伙计们!
【问题讨论】:
-
这不是简单的倒序关系的Dijkstra吗?
-
@Maikel 这有点不清楚,因为我没有看到优先级之间的定义优先级,但你不能只是反转 Djikstra 的算法并突然找到最长的路径。 (Djikstra 的逻辑依赖于路径只会在您向它们添加更多边时变得“更糟”;如果探索看不见的边可以得到更好的结果,那么 Djikstra 会失败。)
-
啊,由于未来路径增加的权重可以使另一条路径更好,它失败了。我明白了。
-
请澄清 - 1)路径的长度(要最小化)是路径中的边数(蓝色节点+1)吗? 2)你的意思是沿着路径的权重总和应该最大化吗?如果是这样,一个“节点”值多少钱?例如,哪个“更好”,一条只有 2 段且总权重为 15 的路径,还是一条有 4 段且总权重为 36 的路径?也许您想最大化平均段权重?在示例中,第一条路径的平均权重为 7.5,而第二条路径的平均权重为 9,因此第二条路径会“更好”。
-
@amdn 1) 是的。 2)不是真的。考虑到第二个条件,权重之和应该更大,但是权重之和达到最大值的情况并不一定表示最佳路径,因为很可能无法满足第一个条件。让我换一种说法。我已经在主帖中更新了它。你可以检查一下。谢谢。 :)
标签: python c++ algorithm graph