如何以最大成本限制最短路径 - dijkstra 算法?

Posted

技术标签:

【中文标题】如何以最大成本限制最短路径 - dijkstra 算法?【英文标题】:How to restrict shortest path - dijkstra algorithm with maximum cost? 【发布时间】:2011-03-14 17:16:37 【问题描述】:

我想知道如何为最短路径问题分配最大成本值。在我的问题中,我有与节点相关的风险。所以我想将风险降到最低,但同时我希望它找到一个节点数量有限的解决方案。(例如,找到从节点 A 到节点 B 的最小风险,同时确保解决方案不超过 n 个节点)谢谢很多。

【问题讨论】:

【参考方案1】:

Dijkstra 是最佳优先搜索,即我们应该确定,到最佳节点的距离永远不会变得更好。它适用于具有非负边缘的最小 Dijkstra。一般情况下,您可以使用Ford-Bellman。如果您想使用不超过 n 个顶点,我可以建议您动态编程 dp[vertex][used_vertex_count] 复杂度为 O(|V| * n) 状态和内存以及 O(|E| * n) 时间。或者创建图的邻接矩阵,主对角线上为零,并且无穷大插入不存在的边,并计算它的 n 指数。 a_ij 将是从 i 到 j 的最小路径,使用不超过 n 个顶点。

【讨论】:

【参考方案2】:

我认为一些涉及启发式的算法最适合这里,启发式是关于您在每一步中与目标的“接近程度”的概念,以及哪个节点将使您更接近目标。如果没有这个,我认为我们需要在最坏的情况下运行指数算法(即仅使用n 节点无法达到目标。在这种情况下,我们将查看所有使用n 节点的路径在我们断定问题无法解决之前)。

使用非启发式算法的一个示例是:以常规方式运行 Dijkstra,选择风险最小的节点。在此过程中,跟踪您访问过的节点数量。如果节点数量超过n,则放弃当前路线并回溯到前一个节点,并使用风险下一个最低的节点。当然,您不能只回溯到n 上方的一个级别,因为如果目标在下一个级别,它就会被选中。因此,您回溯到级别n-2 并继续。这也将是指数级的,因为没有一种真正的方法可以在不检查所有路径的情况下确定不存在。

也可能是我遗漏了一些东西。

【讨论】:

【参考方案3】:

您想使用 Prim 算法,因为它会在给定图中找到所有最小生成树。然后很容易选择具有所需约束的mst。

【讨论】:

以上是关于如何以最大成本限制最短路径 - dijkstra 算法?的主要内容,如果未能解决你的问题,请参考以下文章

图最短路径?

对于 Dijkstra 的算法,有啥方法可以跟踪和存储每条最短路径包含的顶点?

多个未加权图上的 Dijkstra 最短路径?

最短路径(Dijkstra算法)

Dijkstra 的最短路径算法不返回权重最小的最短路径

图中所有节点到特定节点的最短路径成本