【问题标题】:Computational complexity of DFS over the worst case DAG最坏情况 DAG 上 DFS 的计算复杂度
【发布时间】:2022-06-14 13:42:30
【问题描述】:

当您从一个节点到另一个节点执行 Naive DFS 时,计算最坏情况的 DAG 复杂度让我感到困惑。

例如在下面的 DAG 中, 节点 A 作为起始节点,如果我们总是选择最后一个节点,在这种情况下,节点 D 作为结束节点,使用 DFS 计算从 A 到 D 的所有路径。

在这种情况下,我们让 DFS 通过路径:

path 1st:  A -> B -> C -> D
path 2nd:  A -> B -> D
path 3rd:  A -> C -> D
path 4th:  A -> D

计算复杂度为 8,因为第一个路径需要 3 次迭代,第二个需要 2 个,第三个需要 2 个,最后一个需要 1 个。

现在如果我们扩展这个图,在后面添加更多节点。

假设我们有 N 个节点,那么 O(N) 是多少?

我计算总路径数的方法是,每次我们向 N-node-DAG 添加一个新节点时,为了将节点 A 替换为新的开始节点,我们在此处添加 N 个新边。因为我们需要添加边以从新的起始节点到所有存在的节点。

If we assume P as total paths, we have
P(N) = P(N-1) + P(N-2) + P(N-3) + .... + P(1)

then you have 
P(N) = 2 * P(N-1)

then
P(N) = O(2^N)

但是,如果我们考虑并非所有路径都使用 O(1) 的计算复杂度,例如,通过所有节点的最长路径,我们将 O(N) 用于该单一路径,即实际成本高于 O(2^N)。

那会是什么呢?

【问题讨论】:

  • 在第一条路径之后,不应该也通过路径A --> B --> D吗?或者您是否存储访问过的顶点以避免多次访问同一个顶点?如果是这种情况,则不会有第二条和第三条路径。你能澄清一下这些观点吗?
  • 是的,很好,已修改

标签: time-complexity big-o complexity-theory depth-first-search directed-acyclic-graphs


猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多