我开发了一种算法,它是树上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的复杂性q
而tested
的长度可变。
我不需要一个封闭而明确的答案。我需要的是如何处理这种情况的一些见解。
答案 0 :(得分:0)
最糟糕的情况是以下过程:
- 所有元素 1:n-1 都会通过测试并附加到
tested
队列。- 元素 n 未通过测试,已从
q
移除,tested
中的 n-1 元素被推回{{1 }}。- 使用 n = n-1
返回步骤1 醇>
这是一个经典的O(n 2 )过程。