【发布时间】:2015-04-04 16:56:03
【问题描述】:
我有区间数据:
A = (0,50)
B = (20,500)
C = (80,420)
....
并意识到这个数据有一个关联的图表,the interval graph
我想找到从 A 到 G 的最有效路径(假设我知道所有正顶点权重,wa、wb、wc...)。我需要从 A 开始到 G,所以最小生成树必须绑定在这些点之间。我们应用程序中的一个限制条件是,必须完全覆盖从 A 开始到 G 结束的区间(没有间隙)。我在看networkX's minspanning tree method,不明白如何指定A和G必须是起点和终点。
想到的其他一些问题是:
由于这个问题是 NP 难题,如果节点数很高,我是否应该费心寻找最小生成树?多少节点会太多?
注意区间 F 有一个独特的区域。换句话说,要完全覆盖区间 A-G,必须经过 F。因此,我的最小生成树可能应该只连接 A-F,而不是 A-G。给定一个更大的图,是否有一种标准方法可以找到所有区间不包含唯一补丁的子图?换句话说,由于所有路径都必须经过 F 才能到达 G,所以 A-F 是感兴趣的最小跨度路径,而不是 A-G。如何在不手动检查的情况下以这种方式缩小图形?
因为我必须从 A-G 走,所以我永远不会倒退或走循环路径。例如,我永远不会去 A-B-A。生成树是否包含这一点?这会让我的图表有方向吗?考虑点 C:从 C 可以到 D、E 或 F,但永远不会回到 A(对于我们的用例)。这对于图形的方向性意味着什么?
对于新手 Q 很抱歉,大部分内容都是新手。
【问题讨论】:
-
对我来说这似乎不是最小生成树问题。这似乎是一个简单的最短路径问题。此外,最小生成树不是 NP 难的。它在 P 中。根据树的定义,生成树永远不会有循环。
-
谢谢胡安。很明显,我对此很陌生。当您说最短路径时,是否考虑了节点权重。 IE C 节点/区间覆盖的距离最远,但取决于其他约束,可能会有不好的成本,因此路径 A、D、F 实际上是首选。知道在哪里可以了解有关这部分问题的更多信息吗?
-
是的,Dijkstra 算法(以及其他几种最短路径算法)考虑了边缘的权重。在您的情况下,权重由节点定义,但您可以通过使用边缘到达的节点的权重设置边缘的权重来轻松调整。
-
FWIW,你不应该自己实现 dijkstra 的算法。它已经在 networkx 中到位(我在回答中给出了针对您的案例的代码)。
-
另外,您应该注意,不能保证最小生成树在两个节点之间具有最短路径。考虑这个简单的观察:如果你发现任何有循环的东西的最小生成树,那么在一些
x和y之间一定有一条边,它已被删除。那么显然最小生成树没有最短路径。
标签: algorithm graph dynamic-programming graph-theory networkx