【问题标题】:Contradiction in Cormen regarding Insertion sortCormen 中关于插入排序的矛盾
【发布时间】:2013-07-01 17:36:43
【问题描述】:

在 Cormen 定理 3.1 中说


例如,插入排序最佳情况运行时间是big-omega(n),而最坏情况 插入排序的运行时间是Big-oh(n^2)。 因此插入排序的运行时间介于 big-omega(n)Bigoh(n^2)

之间

现在如果我们看一下练习 3.1-6,它会问


证明一个算法的运行时间是Big-theta(g(n))当且仅当它的最坏情况运行时间是Big-oh(g (n)),其最佳情况运行时间为big-omega(g(n))


  • 我是唯一一个在这里看到矛盾的人吗?
  • 我的意思是,如果我们遵守必须证明的问题,我们会得出结论,对于渐近更紧密的界限 (f(n) = Big-theta(g(n))),我们需要f(n) = big-omega(g(n)) 表示算法的 最佳情况Big-oh(g(n)) 在其最坏的情况下
  • 但在插入排序的情况下,最佳情况时间复杂度是 big-omega(n)最坏情况时间复杂度是 大哦(n^2)

【问题讨论】:

    标签: algorithm sorting big-o time-complexity


    【解决方案1】:

    我觉得你在这里有点困惑。让我为你澄清几点。

    运行时间可能意味着两件事:程序的实际运行时间,或者像 theta 或 big-oh 这样的有界函数(因此调用此时间复杂度会有所帮助,以避免混淆)。下面我们将使用运行时间来表示程序的实际运行时间,并用时间复杂度来表示 Big-Oh/theta 符号。

    要拿起 Big-Oh,请阅读我的回答 here

    一旦你清楚 Big-Oh,其他函数就很容易就位了。当我们说 T(n) 是 Omega(g(n)) 时,我们的意思是在某个点 k 的右侧曲线 cg(n ) 从下方限定运行时间曲线。或者换句话说:

    T(n)>=c.g(n) for all n>=k, and for some constant c independent of input size.
    

    theta 表示法就像是在说“我只是一个函数,但使用不同的常数可以让我从上方和下方绑定运行时间曲线”

    所以当我们说 T(n) 是 theta(g(n)) 时,我们的意思是

    c1.g(n)==k

    现在我们知道了这些函数的含义,让我们看看 CLRS 是在哪里混淆的。

    例如,插入排序的最佳情况运行时间是 big-omega(n),而插入排序的最坏情况运行时间是 Big-oh(n^2)。因此插入排序的运行时间介于 big-omega(n) 和 Bigoh(n^2) 之间

    这里的运行时间CLRS是指实际运行时间T(n)。措辞不好,你误解不是你的错。事实上我会继续说他们错了。没有什么像介于之间,一个函数要么在集合 O(g(n)) 中,要么不在。所以这是一个错误。

    证明一个算法的运行时间是 Big-theta(g(n)) 当且仅当其最坏情况下的运行时间是 Big-oh(g(n)) 并且其最佳情况下的运行时间是 big-omega(g( n))

    这里的 CLRS 表示运行时间函数 T(n),他们希望您计算出时间复杂度。

    【讨论】:

    • 感谢 Aravind,这确实是关于 Big-oh 的一个了不起的答案,我知道 Big-oh 背后的概念,但我确实有 1 个问题困扰着我。为了找到渐近紧密的上界,我们是否考虑最坏情况输入,而对于渐近紧密的下界,我们是否考虑最佳情况输入???
    【解决方案2】:

    这里没有矛盾。该问题仅表明证明Big-Theta(g(n))Big-O(g(n))Big-Omega(g(n)) 逼近紧密。如果你证明这个问题,你只证明一个函数在Big-Theta(g(n)) 中运行当且仅当它在Big-O(g(n))Big-Omega(g(n)) 之间运行。

    插入排序从Big-Omega(n) 运行到Big-Oh(n^2),因此插入排序的运行时间不能与Big-Theta(n^2) 紧密绑定。

    事实上,CLRS 从不使用Big-Theta(n^2) 来进行紧密绑定的插入排序。

    【讨论】:

    • 所以让我直截了当地说,对于 Big-oh 表示法,我们看到最坏的情况,而对于 big-omega 表示法,我们看到最好的情况。对吗??
    • 不一定。没有硬性规定,最好的情况用Big-Omega表示,最坏的情况用Big-O表示。
    • 很抱歉在这里听起来有点固执,但从逻辑上讲,最好的情况复杂度会给我们下限,我的意思是在插入排序中,如果数组已经排序,则循环运行 n 次而不是n^2,所以它不会作为下限
    • Big-O、Big-Omega 等是定义函数的不同方式。算法的最佳情况和最坏情况运行时间是两个不同的函数。
    【解决方案3】:

    没有矛盾,因为 CLRS 没有提到插入类型是 theta(N^2)。

    【讨论】:

    • 但它确实说“这并不矛盾,但是说插入排序的最坏情况运行时间是大欧米茄(n^2)”,这意味着theta(n^2)在最坏的情况。
    猜你喜欢
    • 2016-02-21
    • 2012-01-02
    • 1970-01-01
    • 2021-09-30
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    相关资源
    最近更新 更多