首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加权图算法

加权图算法
EN

Stack Overflow用户
提问于 2011-02-10 04:43:15
回答 4查看 3.4K关注 0票数 2

我有一个加权的有向图,有多条边从相同节点的结尾处开始。例如。从节点A到节点B的多条边。

要获得到某个节点的所有路径以及这些路径的相关成本,最佳搜索算法是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-10 04:58:43

因为您想要所有的路径,所以我将使用简单的广度优先搜索。但是,我也建议您将所有平行边折叠为具有权重列表的单个边。

一旦您获得了所有不同的路径(即,访问的节点都不同的所有路径),您就可以为每条路径计算所有可能的替代并行路由。

因此,如果你有以下几条边:

代码语言:javascript
复制
A -> C  (5)
A -> C  (3)
A -> B  (7)
B -> C  (1)
B -> C  (4)

第一步是将其转换为:

代码语言:javascript
复制
A -> C (5,3)
A -> B (7)
B -> C (1,4)

对此图的广度优先搜索将产生A和B之间的以下路径:

代码语言:javascript
复制
A -> B (7)
A -> C -> B (5,3) + (1,4)

因此,对于第二条路径,您将获得以下开销:

代码语言:javascript
复制
5 + 1 
5 + 4
3 + 1
3 + 4

这本身不会比在原始图上执行BFS更快,但更简单的图更容易处理。

票数 2
EN

Stack Overflow用户

发布于 2011-02-10 04:57:58

如果您必须输出每条路径的开销,那么没有什么比普通的DFS (或BFS)更好的了。由于该问题是输出敏感的,并且您可能只有O(E + V)路径,因此在大O表示法方面,您无法完成任何更好的工作。

票数 0
EN

Stack Overflow用户

发布于 2011-02-10 05:15:33

如前所述,您可以使用深度优先搜索等进行强制/回溯。

不要期望为此找到任何捷径--如果你的图足够密集,可能会有很多路径,甚至仅仅是找出其中有多少路径就是#P-complete (即:不可处理)。

(如果您的问题不同-可能允许重复的节点,或者您只想找到最短路径或类似的东西,那么可能会有易于处理的解决方案)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4950222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档