DFS 的计算复杂度
Computational complexity for DFS
我正在做一个 dfs,想知道我将如何比较两种过滤方法的 c 复杂度?
方法一:访问过则跳过。添加到队列然后删除似乎是一种浪费。
while queue
current = queue.deque
if visited current then continue //skip loop if visited
...
VS 添加前过滤[=12=]
while queue
current = queue.deque
foreach neighbor:
if(not Visited && not queued) add //this seems like a lot of checking.
很想知道你是如何通过这个选择推理的。
两种方法的算法复杂度相同:O(m * n),其中m
是要访问的元素总数,n
是邻居数(假设是每个元素都相同)。
在第一种情况下,复杂性的“n”部分归因于向队列添加和删除元素+检查元素的访问状态。每个元素将恰好添加到队列中 n+1 次。
在第二种情况下,复杂度的“n”部分来自访问+排队检查。这些检查将对每个元素精确执行 n
次。
这种算法复杂度的差异是常量,O 表示法省略了常量。
我正在做一个 dfs,想知道我将如何比较两种过滤方法的 c 复杂度?
方法一:访问过则跳过。添加到队列然后删除似乎是一种浪费。
while queue
current = queue.deque
if visited current then continue //skip loop if visited
...
VS 添加前过滤[=12=]
while queue
current = queue.deque
foreach neighbor:
if(not Visited && not queued) add //this seems like a lot of checking.
很想知道你是如何通过这个选择推理的。
两种方法的算法复杂度相同:O(m * n),其中m
是要访问的元素总数,n
是邻居数(假设是每个元素都相同)。
在第一种情况下,复杂性的“n”部分归因于向队列添加和删除元素+检查元素的访问状态。每个元素将恰好添加到队列中 n+1 次。
在第二种情况下,复杂度的“n”部分来自访问+排队检查。这些检查将对每个元素精确执行 n
次。
这种算法复杂度的差异是常量,O 表示法省略了常量。