【问题标题】:Mergesort running time BigO合并排序运行时间 BigO
【发布时间】:2010-10-31 00:55:34
【问题描述】:

Snape 的“巫师不友好算法”教科书声称合并的运行时间 排序是 O(n^4)。这种说法正确吗?

解决方案:是的。这个说法在技术上是正确的,因为 O(n^4) 只给出了一个上限 限制算法需要多长时间。然而,这是一个令人讨厌的无用答案, 因为紧界是Θ(n log n).

我不太明白解决方案在说明什么。 O(n^4) 怎么可能是正确的?

【问题讨论】:

    标签: algorithm big-o discrete-mathematics mergesort


    【解决方案1】:

    大 O 表示法是算法运行时最坏情况的上限。

    由于 O(n^4) 高于合并排序的最坏情况时间,因此它在技术上是正确的,因为它确实提供了一个界限 - 即。合并排序的性能永远不会比 O(n^4) 差。

    但是,它没有帮助,因为运行时间的更好表达是 O(n log n),这是归并排序的“最严格”界限

    【讨论】:

    • 啊,好吧,我明白了..所以 O(n^1000) 在“技术上”也是正确的?
    • 是的,因为您确实不会从合并排序中获得比 O(n^1000) 更差的性能
    • 是的,O(n^1000) 是另一个更没有帮助的上限。
    • 好吧,当我们谈到这个话题时,如果我们说归并排序是 (x) 的 BigOmega,那么“英语”的思考方式是什么? BigTheta呢? BigTheta是否意味着它的函数的最大运行时间?
    • BigOmega - 它不会运行得比这更快。 BigTheta - 这是 Big O 和 Big Omega 的组合,没有“特殊”输入可以让它运行得更快或更慢。
    【解决方案2】:

    Big-O 是一个集合,其中包括运行速度与 (foo) 或更快的所有内容。 Little-O 是一组运行速度严格快于 (foo) 的东西。虽然说归并排序是 O(n^4) 是正确的,但它并不是很有用,因为它是 Theta(n log n)。说归并排序是 o(n^4) 稍微有用一些,因为 little-o 表示法从不用于暗示 big-theta 运行时。

    更复杂的是,当 big-theta 更合适时,通常使用 big-O,因为大多数键盘没有 theta。

    【讨论】:

    • 是的,写 f(n) = O(n^2) 或类似内容实际上只是一个(根深蒂固的、制度化的)CS 习惯——从一开始就应该使用集合来编写会员符号而不是等号,但现在看来为时已晚。
    猜你喜欢
    • 2018-03-08
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    相关资源
    最近更新 更多