Big-O / Big-Oh表示法

时间:2011-05-06 13:19:04

标签: algorithm big-o

我正在尝试计算以下算法的Big-O,但我很困惑,需要一些帮助:

Algorithm 1. DFS(G,n)
Input: G- the graph
       n- the current node
1) Visit(n)
2) Mark(n)
3) For every edge nm (from n to m) in G do
4)     If m is not marked then
5)         Dfs(G,m)
6)     End If
7) End For
Output: Depends on the purpose of the search...

我甚至不会开始说我(错误地)计算出的解决方案。有人可以帮助我并向我解释一下吗?

谢谢。

编辑:显然我对O(n+m)的计算是正确的......有人可以验证这个吗?

编辑2:或者是O(|n|+|m|)

3 个答案:

答案 0 :(得分:1)

其成本为O(n + e),其中n是节点数,e是边数。

答案 1 :(得分:0)

这看起来像图上的一个简单的DFS,尝试做一些简单的算法示例,并计算出你需要做多少次迭代,看看它与输入值的关系(n个节点数和m)边数)

答案 2 :(得分:0)

让我们在G

中的所有节点上进行集成
  • 第1行和第2行为G中的每个节点调用一次;即O(N),其中N是节点数
  • 第4行为G中的每个边被调用一次;即O(E),其中E是边数。
  • 第5行为G中的每个节点调用一次(除了我们开始使用的节点);即O(N)。

这使得计算O(N + E)O(E)开始可以减少到E >= N

这假设我们只是将步数统计为相等。在实践中,我们不知道不同步骤的相对成本。当插入时,复杂性可能会有所不同。