有人可以详细解释bogosort的平均案例运行时间吗?
算法的Psuedocode:
while not isInOrder(deck):
shuffle(deck)
答案 0 :(得分:3)
有n!
个排列,其中只有一个是正确的(假设不同的元素)。因此,在挥手的意义上,您希望在大约O(n!)
次迭代后选择正确的答案。 * 但每次shuffle / check操作本身都是O(n)
。因此总体而言O(n.n!)
。
<小时/> *准确地说,您可以使用参数 p = 1 / n!建模为geometrically-distributed random variable。这个变量的期望值是 1 / p = n!。
答案 1 :(得分:1)
执行操作的平均尝试次数与每次尝试成功的概率相反。
有n!
个方法来重排n
元素。如果所有元素都是不同的,则只有一种方法产生排序输出。因此,排序随机播放的概率为1/n!
,平均尝试次数为n!
。
每次洗牌需要O(n)
次(假设Fisher-Yates洗牌或任何同样合理的事情)。
因此,时间复杂度为O(n!*n)
。