繁体   English   中英

我应该使用什么算法来获得有向加权图中所有可能的路径,权重为正?

[英]What algorithm should I use to get all possible paths in a directed weighted graph, with positive weights?

我有一个有向加权图,权重为正,看起来像这样:- 在此处输入图像描述

我想做的是:-

  1. 找到两个节点之间的所有可能路径。
  2. 根据路径长度(由边缘权重给出)以升序排列路径,至少前 5 个。
  3. 使用最优的方式来做到这一点,这样即使在节点数量较多的情况下,程序也不会花费太多时间计算。

例如:-假设我的初始节点是 d,最终节点是 c。 所以 output 应该是这样的

d to c = 11
d to e to c = 17
d to b to c = 25
d to b to a to c = 31
d to b to a to f to c = 38

我怎样才能做到这一点?

查找两个节点之间的所有可能路径

你可以在这里使用蛮力,但有可能你会得到很多路径,而且对于更大的图(>100 个节点,取决于很多因素)确实需要数年时间。

根据路径长度(由边缘权重给出)以升序排列路径,至少前 5 个。

只需对它们进行排序,然后先取 5 个。 (您可以使用边列表和整数/双精度的组合作为路径长度)。

使用最优的方式来做到这一点,这样即使在节点数量较多的情况下,程序也不会花费太多时间计算。

即使找到两个节点之间的所有可能路径也是 NP-Hard ( Source ,它用于无向图,但仍然有效)。 您将不得不使用启发式方法

更多节点是什么意思? 你是说100还是1亿? 这取决于您的上下文。

最好的方法是采用Dijkstra's shortest path算法,我们可以在O(E + VLogV)时间内得到最短路径。

采用这种基本方法来帮助您找到可能的最短路径:

查看与起始节点直接相邻的所有节点。 连接起点和这些相邻节点的边携带的值是到每个相应节点的最短距离。

在节点上记录这些距离 - 覆盖无穷大 - 并划掉节点,这意味着它们的最短路径已经找到。

Select 计算出最短路径的节点之一,我们将其称为 pivot。 查看与它相邻的节点(我们将这些节点称为目标节点)以及它们之间的距离。

对于每个结束(目标节点):如果 pivot 中的值加上连接它的边值的总和小于目标节点的值,则更新其值,因为找到了新的较短路径。 如果到该目的地节点的所有路线都已探索,则可以将其划掉。

重复步骤 2,直到所有节点都被划掉。 我们现在有一个图表,其中任何节点中保存的值都是从起始节点到它的最短距离。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM