稀疏循环图中最长的简单路径

时间:2016-10-22 10:38:55

标签: algorithm graph depth-first-search longest-path

给定:未加权的有向图(G =(E,V)),它可以包含任意数量的周期。

目标:对于所有顶点,我想要最长的简单路径到V

中的某个目标顶点X.

算法理念:

For each v in V
  v.distanceToTarget = DepthFirstSearch(v)
Next

DepthFirstSearch(v as Vertex)
  if v = target then
    'Distance towards target is 0 for target itself
    return 0
  elseif v.isVisitedInCurrentDFSPath then
    'Cycle found -> I wont find the target when I go around in cycles -> abort
    return -infinity
  else
    'Return the maximum Distance of all Successors + 1
    return max(v.Successors.ForEach(Function(v) DepthFirstSearch(v) )) + 1
  end if

这适用于所有情况吗? (假设,可以从每个顶点到达目标)

我的图表中的边数非常小。 假设| E | < = 3 * | V |成立。我如何计算平均时间复杂度?

谢谢!

1 个答案:

答案 0 :(得分:0)

时间复杂性是关于哪些值最能影响运行时的。在您的情况下,您评估v和目标之间的所有可能路径。这基本上是O(路线数)。现在你需要弄清楚如何用E和V表示所有可能路线的数量。

最有可能产生类似于O(exp(E))或O(exp(V))的结果,因为当您添加新的可能路线时,通过每个节点/顶点的路线数量会呈指数级增长。

编辑:我错过了一个细节,你要求的平均时间复杂度意味着摊销的复杂性。但是,由于您的算法始终评估所有可能的路由,因此最坏情况复杂度与平均复杂度相同。