【问题标题】:algorithm - Path finding given vertex constraintsalgorithm - 给定顶点约束的路径查找
【发布时间】:2013-10-13 04:27:32
【问题描述】:

我将给出这个问题的一般情况,因为这是我第二次看到可以简化为这种情况的东西,而且我找不到比检查每条路径更好的东西了。

假设我们有一个顶点为 V 的有向图 G,使得没有环和自边。此外,每个顶点都有一种颜色。找到从给定顶点开始的最长路径,使得该路径最多经过每种颜色的 1 个顶点。

我已经通过在递归步骤中删除添加的顶点颜色的所有顶点来实现本质上是深度优先搜索,我想知道是否有更好的方法来做到这一点。我一直遇到的问题是,由于颜色限制,存储过去的结果很困难,所以像 Dijkstra 的最短路径算法不能给出正确的结果。

【问题讨论】:

  • 我可以提出O(n*2^k) 算法,其中n = max { |E|, |V|}k = #colors。请注意,这个问题与最短路径有很大不同,因为在这里您谈论的是最长路径(通常是 NP-Hard 问题,但图是 DAG,因此可能有有效的解决方案)。
  • 回溯 (DFS) 听起来不错。不需要存储过去的状态,只需存储当前分支访问的颜色。回溯需要颜色和顶点排序,以了解当前顶点的访问顺序。当当前分支有颜色长度时找到解决方案。

标签: algorithm graph graph-theory


【解决方案1】:

您的问题的答案是

如果您为每个顶点分配不同的颜色,您的问题将减少到Hamiltonian path problem,这是 NP-hard。

【讨论】:

  • 这是有道理的。为了记录,我最终做的是深度优先搜索,具有全局更新的最高分数和上限函数以避免遍历某些节点。它并没有提高时间复杂度,但在实践中它的速度提高了大约 3 倍。
猜你喜欢
  • 2020-05-03
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2012-07-11
  • 2021-03-04
  • 1970-01-01
相关资源
最近更新 更多