【问题标题】:Running Time of Random Sort随机排序的运行时间
【发布时间】:2008-11-14 01:24:55
【问题描述】:

如果给定一个函数sorted,如果在 O(n) 中运行的列表排序后返回 True,你会如何描述这种排序的运行时间:

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

假设洗牌是完全随机的。

这会写成大 O 符号吗?或者是否有其他方法可以对具有随机分量的算法进行分类?

【问题讨论】:

    标签: algorithm language-agnostic random list sorting


    【解决方案1】:

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

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

    【讨论】:

    • 所以它是多项式的?这至少不是指数级的吗?
    • Shinzou n*n!n^2 大得多。它大于指数。所以,其中n^2 表示n\*n;这里的等式n * n! 表示n * (n * (n-1) * (n-2) * (n-3) * (n-4) * ... * (n-(n-1)))
    【解决方案2】:

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

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

    【讨论】:

    • 但最坏情况的概率为 0,这对平均值来说是个好消息 :-)
    • 不过,最坏的情况不太可能发生。但是平均情况仍然很糟糕:-)
    【解决方案3】:

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

    观察正好有 N 个! N个元素的排列。选择正确的概率正好是 1/N!。因此,根据大数的强定律,洗牌的预期次数是 N!。

    另一个因素 N 来自哪里?您必须在每一步检查您选择的排列。这可以通过比较相邻元素来线性完成。因此有一个额外的因子 N。

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

    1) 这不是真的。 O(g(n)) 的定义是: 如果存在一些 c,d 使得 f(n)

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

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

    【讨论】:

    • “它们实际上是不可能观察到的。” - 例如,除了关于随机生成器是否保证最终产生其范围内的每个输出的哲学讨论之外,因为你会先死;-)
    • 但该算法不会检查以前的排列,因此它们可以无限重复。
    • 大 O 是最常用的渐近符号,这意味着当 n 接近无穷大时。诚然,当 n 接近无穷大时,第一次洗牌仍有可能对牌组进行排序……但实际上,n 越大,返回 n*n 的可能性就越小!时间。我认为它是O(无穷大)。也就是说,拉斯维加斯算法没有标准的 Bachmann-Landau 表示法。
    【解决方案4】:

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

    【讨论】:

    • 它最终会终止,因为随机洗牌是真正随机的(根据问题描述),它最终会导致正确的洗牌。
    • 不,SoapBox,为了保证这个算法终止,随机函数必须保证产生一个特定的顺序(排序的那个)。但如果它可以保证产生那个订单,那么它就不是真正的随机。
    • 如果洗牌真的是随机的,那么总会有一种情况比给定的情况更糟。有一个案例需要十亿个周期;有一种情况需要 10^10^10^10^10 个周期。 “最坏”的情况比这两种情况都要糟糕!因此,它永远不会结束。
    • 这个从不终止的概率为零。所以你可以说你几乎可以保证它会完成:-)。
    • 哦,它保证会完成 - 除非你几周后感到无聊,然后按 Ctrl-C。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多