随机排序的运行时间

时间:2008-11-14 01:24:56

标签: algorithm language-agnostic random list sorting

如果列表按O(n)运行排序,函数sorted将返回True,您将如何描述此类运行时间:

def sort(l):
    while not sorted(l): random.shuffle(l)

假设洗牌是完全随机的。

这是用big-O表示法写的吗?或者是否有其他方法使用随机组件对算法进行分类?

4 个答案:

答案 0 :(得分:6)

信不信由你,这里有一个wiki条目: http://en.wikipedia.org/wiki/Bogosort

平均情况:O(N * N!)

答案 1 :(得分:6)

此算法称为Bogosort。它是一类名为Las Vegas Algorithms的算法实例。拉斯维加斯算法Randomized Algorithms始终保证正确的结果,但不保证计算资源。

Bogosort的时间复杂性不能直接用Bachmann-Landau Notation来表达,因为它具有概率性质。但是,我们可以对其expected时间复杂度做出声明。 Bogosort的预期时间复杂度为O(n·n!)

答案 2 :(得分:2)

平均情况确实是O(N N!):

观察到确切的N! N元素的排列。选择正确的概率恰好是1 / N!因此,通过强大的大数定律,预期的洗牌次数为N!。

其他因素N来自哪里?您必须在每个步骤检查您选择的排列。这可以线性地完成,比较相邻元素。因此,额外的因素N。

上述评论表明O(g(n))表示法是“最坏情况”:

1)那不是真的。 O(g(n))的定义是: 如果存在一些c,d,则f(n)是O(g(n)),使得f(n)<对于足够大的n,c * g(n)+ d。 “最糟糕的情况”并没有什么。碰巧g(n)是一个比f(n)更大的函数,但纯粹的数学定义没有说明“case”。

2)对于随机算法,无论如何都要进行“最坏情况”分析是没有意义的。你可以提出一些非常糟糕的执行。

3)真正糟糕的执行发生在一组测量0上(概率论者会说他们“几乎肯定”不会发生)。他们实际上是不可能观察到的。

答案 3 :(得分:0)

Big-O表示法假定最坏的情况。在最坏的情况下,该算法永远不会终止。

相关问题