如何找到成本最高的路径
Posted
技术标签:
【中文标题】如何找到成本最高的路径【英文标题】:How to find path with maximum cost 【发布时间】:2012-03-29 08:25:19 【问题描述】:我有一个顶点有成本的有向图。我想找到两个顶点之间成本最高的路径,但我只找到了解决成本最低的路径的算法。
另外,我正在使用 Java。
【问题讨论】:
你的图有负边权重吗?还是零成本的边权重? 【参考方案1】:-
标准化所有成本,使最小成本大于 0。
将所有成本更改为 (1/cost)。
运行最低成本算法。
生成的路径是原始图上的最大成本路径。
【讨论】:
如果边缘成本都不是负数或 0,这应该可以工作 @user396089 这就是第 1 步的用途 这将增加 O(n) 复杂性以标准化成本。算法修改(如果可能)会更有效。 线性复杂度很便宜。为什么要打扰? 我认为这是不正确的。考虑一个具有节点 A、B、C、D 以及以下边和边成本的图:A->D (1), A->B (2), B->C (2), C->D (2 )。假设我们正在寻找从节点 A->D 的路径;有两种选择:A->D 成本为 1 或 A->B->C->D 最大成本为 6。您的算法仍会输出 A->D 作为其结果(因为 1/1=1)而不是 A->B->C->D(因为 1/2+1/2+1/2=1.5)。【参考方案2】:只需修改所用算法的评估函数即可。如果对于最短路径,该函数为较短的路径返回较大的值,在您的情况下,您可能希望为较短的路径返回较小的值。
【讨论】:
【参考方案3】:这是Longest path problem,它(假设您正在寻找简单路径,即没有节点被多次访问的路径)是NP-hard,这意味着没有计算它的算法在多项式时间内存在,除非 P = NP。证明与Hamiltonian path problem 相关,这也是NP 难的。寻找不简单的路径没有多大意义,因为您可以一直循环通过具有正成本的循环,从而导致总成本无限。
如果您对这个事实感到难过,请听this。
但是,您有一个有向无环图 (DAG),有一种使用拓扑排序的方法,在链接的 Wikipedia 文章中对此进行了说明。这个问题与用于安排一组项目活动的Critical path method 有关。
【讨论】:
以上是关于如何找到成本最高的路径的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Floyd-Warshall 算法中找到最短路径和最短成本