我正在寻找一种算法,以在无向加权完整图中给出最大成本的最小成本和最大长度来找到两个节点之间的路径。权重是非负的。
正如我现在所说的那样,我正在使用DFS,而且速度非常慢(节点数量和最大长度也是如此)。我已经在DFS的每次迭代中丢弃了所有不可能的节点。
有人能指出一个已知的算法来更好地处理这个问题吗?
澄清:理想情况下,算法应搜索最低成本的路径,但如果这意味着访问更多节点,则允许增加成本。当它得出结论认为在不超过成本限制的情况下达不到n个节点并且不可能以更低的成本到达n个节点时,它应该结束。
更新
图表示例。我们必须从A到B.成本限制设置为5:
此路径(红色)没问题,但算法应继续搜索更好的解决方案
这样做更好,因为虽然成本增加到4,但它还包含1个节点
此处路径包含3个节点,因此它比以前好很多,而且成本是可接受的5
最后这个解决方案甚至更好,因为路径还包含3个节点,但成本为4,比以前少。
希望图像比文字更好地解释
答案 0 :(得分:2)
创意1:
在我看来,您的问题是pareto optimal最短路径搜索问题的变体。因为您引用了两种不同的最优度指标:
当然,一些侧面约束只会使问题更容易计算。
您必须为帕累托最优结果实施多标准dijkstra。我找到了两篇有用的英文论文:
不幸的是我无法找到那些论文的pdf文件以及我之前在德语中读到的论文:( 然而,这应该是您的切入点,并将引导您使用算法来顺利地解决您的问题。
创意2:
解决这个问题的另一种方法可能在于hamilton path的计算,因为完整图中的最长路径确实是汉密尔顿路径。计算完所有这些路径后,您仍然需要找到总边缘重量成本最小的路径。如果路径的长度在每种情况下都比成本更相关,则此方案非常有用。
创意3:
如果边缘成本更重要,则应计算给定最大长度的两个节点之间的所有路径,并搜索具有最多边缘的节点。
<强>结论:强>
我认为通过使用创意1可以获得最好的结果。但我不了解您的情况,因此其他想法可能是选项二。
答案 1 :(得分:1)
此问题可以优先考虑为多目标约束满足问题:
此问题很难解决。因此,没有确切的多项式时间算法可以解决此问题。但是简单的本地搜索算法可能会帮助您: