【发布时间】:2016-09-22 04:10:35
【问题描述】:
我开发了一种算法,它是树上 BFS 的一种变体,但它包含一个概率因素。为了检查一个节点是否是我正在寻找的节点,执行了一个统计测试(我不会对此进行太多详细说明)。如果测试结果是肯定的,则将该节点添加到另一个队列(称为tested)。但是当一个节点测试失败时,tested 中的节点需要重新测试,所以这个队列被附加到有待测试节点的队列中。
在 Python 中,考虑到队列 @987654323@ 从根节点开始:
...
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 的长度是可变的。
我不需要一个封闭的和明确的答案。我需要一些关于如何处理这种情况的见解。
【问题讨论】:
-
在最坏的情况下程序永远不会终止。
-
队列的大小无关紧要;问题是统计部分的错误率是多少
-
如何不终止?除非测试可以为相同的输入给出不同的结果,否则我看不出它是如何终止的。
-
statistical_test与这里的时间复杂度计算非常相关,因此在不知道这一点的情况下实际上不可能做任何事情。阅读随机算法以及如何计算它们的时间复杂度。这会给你一些方向。 -
如果测试不能给出不同的结果,那么将成功的测试放回队列重新测试似乎没有任何意义。
标签: python algorithm time-complexity analysis