Algorithm 合并排序比较
我正在阅读Sedgewick和Flajolet的“算法分析”。在第7页theoren 1.1中给出: 证明如下: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
有人能解释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