变长队列BFS的算法复杂度分析

时间:2016-09-21 19:36:58

标签: python algorithm time-complexity analysis

我开发了一种算法,它是树上BFS的一种变体,但它包含一个概率因子。要检查节点是否是我正在寻找的节点,将执行统计测试(我不会详细讨论这个问题)。如果测试结果为肯定,则将节点添加到另一个队列(称为tested)。但是当节点未通过测试时,tested中的节点需要再次进行测试,因此该队列将附加到尚未测试的节点上。

在Python中,考虑到队列q以根节点开始:

...
tested = []
while q:
    curr = q.pop(0)
    p = statistical_test(curr)
    if p:
        tested.append(curr)
    else:
        q.extend(curr.children())
        q.extend(tested)
        tested = []
return tested

由于算法是概率性的,搜索后tested中可能有多个节点,但这是预期的。我面临的问题是试图估计这个算法的复杂性,因为我不能简单地使用BFS的复杂性qtested的长度可变。

我不需要一个封闭而明确的答案。我需要的是如何处理这种情况的一些见解。

1 个答案:

答案 0 :(得分:0)

最糟糕的情况是以下过程:

  
      
  1. 所有元素 1:n-1 都会通过测试并附加到tested队列。
  2.   
  3. 元素 n 未通过测试,已从q移除,tested中的 n-1 元素被推回{{1 }}。
  4.   
  5. 使用 n = n-1
  6. 返回步骤1   

这是一个经典的O(n 2 )过程。