Algorithm 合并排序比较

Algorithm 合并排序比较,algorithm,Algorithm,我正在阅读Sedgewick和Flajolet的“算法分析”。在第7页theoren 1.1中给出: 证明如下: 有人能解释O(N)的去向吗?因为它证明了Cn是O(NlogN)。你是对的;出于我无法理解的原因,他们陈述的定理比实际证明的要多。这里有一种方法来填补剩余的部分 引理设整数n>=1的T(n)由 T(n) = 0, for n = 1; T(floor(n/2)) + T(ceil(n/2)) + n, for

我正在阅读Sedgewick和Flajolet的“算法分析”。在第7页theoren 1.1中给出:

证明如下:


有人能解释O(N)的去向吗?因为它证明了Cn是O(NlogN)。

你是对的;出于我无法理解的原因,他们陈述的定理比实际证明的要多。这里有一种方法来填补剩余的部分

引理设整数n>=1的T(n)由

T(n) = 0,                                for n = 1;
       T(floor(n/2)) + T(ceil(n/2)) + n, for n > 1.
那么T(n)=1

通过归纳法证明。对于n=1,T(1)=0=1lg1+1-1。对于n>1,有两种情况。如果n是偶数,那么

T(n)  = 2T(n/2) + n
     <= 2(n/2) lg(n/2) + 2n/2 - 2 + n
      = n (lg n - 1) + 2n - 2
     <  n lg n + n - 1.
T(n)=2T(n/2)+n

我不确定您所询问的O(N)到底是错误的还是丢失的,但是他们的分析对于特殊情况下的N=2^N是正确的

(1)后面的第一行数学只是重新说明了特殊情况下的重复性。接下来是一长串的数学题

C_{2^n} = (2^n) n
现在我们知道了
2^n=n
,所以
n=lgn
。用这两个替换我们得到

C_N = N lg N

正如他们所说。如果我没有正确理解你的问题,请发表评论。

在没有进行严格分析的情况下,我认为当N≠2^n。在这种情况下,比较的数量是C_N+R,其中R是剩余比较的数量,即N和下一个较小的2^N之间的差值,因此以O(N)为界(事实上,0区分精确公式和渐近界很重要。O(N)必须在其他精确公式中说明“N lg N+O(N)”。当只说明O(N lg N)界时,可以删除它。这个问题似乎是离题的,因为它是关于数学的。它是关于一个非常常用的算法的时间界,算法是公平的游戏。我认为关闭它比在SO中找到答案会损失更多。
T(n) <    n lg n + n - 2
        + 0
        + 1
      = n lg n + n - 1.
C_{2^n} = (2^n) n
C_N = N lg N