如何找到成本最高的路径

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 有关。

【讨论】:

以上是关于如何找到成本最高的路径的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中通过网格/矩阵找到成本优化路径

在具有特定成本的无向图中查找路径

如何在 Floyd-Warshall 算法中找到最短路径和最短成本

使用基于 Avg 的 Max 和 Min 来确定最低平均成本和最高平均成本时出错(MySQL)

如何在EXCEL中筛选出工资最高和最低的两个人信息

双11特刊 | 全面云原生化,数据库实例独共享混部 最高降低30%成本