【问题标题】:Computational complexity for DFSDFS 的计算复杂度
【发布时间】:2021-10-15 02:16:45
【问题描述】:

我正在做 dfs,想知道如何比较两种过滤方法的 c 复杂度?

方法一:访问过就跳过。添加到队列然后删除似乎是一种浪费。

while queue
current = queue.deque
if visited current then continue //skip loop if visited
...

添加前对比过滤

while queue
current = queue.deque
foreach neighbor:
 if(not Visited && not queued) add //this seems like a lot of checking.

很想知道你是如何通过这个选择进行推理的。

【问题讨论】:

    标签: data-structures time-complexity


    【解决方案1】:

    两种方法的算法复杂度相同:O(m * n),其中m 是要访问的元素总数,n 是邻居数(假设每个元素都相同) .

    在第一种情况下,复杂性的“n”部分归因于向队列添加和删除元素+检查元素的访问状态。每个元素将被添加到队列中恰好 n+1 次。

    在第二种情况下,复杂性的“n”部分来自已访问 + 排队检查。这些检查将针对每个元素执行n 次。

    算法复杂度的这种差异是不变的,而 O 表示法省略了常数。

    【讨论】:

      猜你喜欢
      • 2022-06-14
      • 2017-11-04
      • 2012-12-31
      • 2019-03-11
      • 2023-03-04
      • 1970-01-01
      • 2013-11-01
      • 2013-04-30
      • 1970-01-01
      相关资源
      最近更新 更多