我想知道如何为最短路径问题分配最大成本值。在我的问题中,我有与节点相关的风险。所以我想尽量降低风险,但是我希望它能找到一个节点数量有限的解决方案。(例如,找到从节点A到节点B的最小风险,同时确保解决方案不超过n个节点)谢谢很多。
答案 0 :(得分:3)
Dijkstra是Best First Search,即我们应该确定,与最佳节点的距离永远不会变得更好。它适用于具有非负边缘的最小Dijkstra。一般情况下,您可以使用Ford-Bellman。如果你想使用不超过n个顶点,我建议你动态编程dp [vertex] [used_vertex_count]复杂度为O(| V | * n)状态和内存以及O(| E | * n)时间。或者创建图的邻接矩阵,主对角线上的零点和缺少边缘的无穷大,并计算它的n指数。 a_ {ij}将是使用不超过n个顶点的从i到j的最小路径。
答案 1 :(得分:0)
我认为一些涉及启发式算法的算法最适合这里,启发式算法是关于你在每一步“接近”目标的概念,以及哪个节点会让你更接近目标。如果没有这个,我认为我们需要在最坏的情况下运行指数算法(这将是仅使用n
个节点无法达到目标的情况。在这种情况下,我们将查看使用{{{}的所有路径。 1}}节点之后我们得出结论,问题无法解决)。
使用非启发式算法的一个例子是:以常规方式运行Dijkstra,选择风险最小的节点。一路上,跟踪您访问过的节点数量。如果节点数超过n
,则放弃当前路由并回溯到上一个节点,并使用风险次高的节点。当然,你不能只回溯n
以上的一个等级,因为如果目标是在下一个等级,它就会被选中。因此,您回溯到n
级别并继续。这也是指数级的,因为没有真正的方法来确定不存在而不检查所有路径。
也可能是我遗漏了一些东西。
答案 2 :(得分:-1)
您想使用Prim的算法,因为它在给定的图中找到所有最小的生成树。然后很容易选择具有所需约束的mst。