我正在尝试计算以下算法的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|)
?
答案 0 :(得分:1)
其成本为O(n + e),其中n是节点数,e是边数。
答案 1 :(得分:0)
这看起来像图上的一个简单的DFS,尝试做一些简单的算法示例,并计算出你需要做多少次迭代,看看它与输入值的关系(n个节点数和m)边数)
答案 2 :(得分:0)
让我们在G
中的所有节点上进行集成这使得计算O(N + E)
从O(E)
开始可以减少到E >= N
。
这假设我们只是将步数统计为相等。在实践中,我们不知道不同步骤的相对成本。当插入时,复杂性可能会有所不同。