【问题标题】:How to find path with maximum cost如何找到成本最高的路径
【发布时间】:2012-03-29 08:25:19
【问题描述】:

我有一个顶点有成本的有向图。我想找到两个顶点之间成本最高的路径,但我只找到了解决成本最低的路径的算法。

另外,我正在使用 Java。

【问题讨论】:

  • 你的图有负边权重吗?还是零成本的边权重?

标签: java graph-algorithm


【解决方案1】:
  1. 标准化所有成本,使最小成本大于 0。
  2. 将所有成本更改为 (1/cost)。
  3. 运行最低成本算法。

生成的路径是原始图上的最大成本路径。

【讨论】:

  • 如果边缘成本都不是负数或 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 有关。

    【讨论】:

      猜你喜欢
      • 2015-07-21
      • 2016-12-05
      • 2016-07-20
      • 2021-12-14
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多