使用渐近符号时出错


10

我试图了解以下重复发生的以下证明有什么问题

T(n)=2T(⌊n2⌋)+n
T(n)≤2(c⌊n2⌋)+n≤cn+n=n(c+1)=O(n)

文档说,因为归纳假设它的错误是

T(n)≤cn
我在想什么?

2
使用Master定理也可以解决这种形式的重复情况。
— Juho 2012年

2
@冉:我认为主定理不是解决这个问题的合适方法。问题不是关于如何解决它,而是指出特定论点中的谬误。此外,主定理可能过于具体,可能不应该拥有自己的标签。通常,我们应该基于问题而不是可能的答案进行标记。例如,您会标记这个akra-bazzi吗?
— Aryabhata'3

“以下证明有什么问题”-我看不到任何证明。写下完整的证明(即明确归纳)以发现错误通常是有帮助的。
— 拉斐尔

一个相关的更普遍的问题是求解或近似数字序列的递归关系。
— Juho 2012年

Answers:


12

假设最终目标是证明。您从归纳假设开始:T(n)=O(n)

对所有我< Ñ。T(i)≤cii<n

并完成了证明,你必须表明为好。T(n)≤cn

但是,您可以推断出,这对完成证明没有帮助;对于(几乎)全部n,您需要一个常数c。因此,我们无法得出任何结论,也无法证明T (n )= O(n )。T(n)≤(c+1)ncnT(n)=O(n)

请注意,您在结果和证明过程之间感到困惑。还有一点,在这种情况下,实际上是Θ (n log n ),因此您可以考虑使用适当的归纳假设来证明这一点。T(n)Θ(nlog⁡n)


如果我们替换c'= c + 1,它将进行任何更改吗?
— Erb 2012年

@erb:不,不会。您必须证明所选择的常数。如果替换,则最终得到 T (n )≤ (c ' + 1 )n(或T (n )≤ (c + 2 )n),那么结果是相同的。c′=c+1T(n)≤(c′+1)nT(n)≤(c+2)n
— 填充

8

您已经省略了一些步骤。看起来您正在尝试通过归纳证明,您的证明就可以了:T(n)=O(n)

假设对于k < n,。这意味着Ť (ķ )≤ ÇT(k)=O(k)k<n代表 c。然后 Ť (Ñ )= 2 Ť (⌊ ñ / 2 ⌋ )+ ñ ≤ 2 ç ⌊ Ñ / 2 ⌋ + Ñ ≤ (C ^ + 1 )T(k)≤ckc,因此 T (n )= O (n )。T(n)=2T(⌊n/2⌋)+n≤2c⌊n/2⌋+n≤(c+1)nT(n)=O(n)

该证明从一开始就错了:“ 对于k < n, ”是没有意义的。大哦是渐近概念:Ť (ķ )= Ô (ķ )手段,有一些恒定Ç和阈值n使得∀ ķ ≥ Ñ ,Ť (ķ )≤ ÇT(k)=O(k)k<nT(k)=O(k)c 。最后,您不能得出结论“ T (n )= O (n ) ”,因为这说明了有关函数 T的整体情况,而您仅证明了有关特定值 T (n )的情况。。∀k≥N,T(k)≤ckT(n)=O(n)TT(n)

您需要明确说明含义。所以也许您的证明去了:O

假设所有 ķ < Ñ。然后 Ť (Ñ )= 2 Ť (⌊ ñ / 2 ⌋ )+ ñ ≤ 2 ç ⌊ Ñ / 2 ⌋ + Ñ ≤ (C ^ + 1 )T(k)≤ckk<n。T(n)=2T(⌊n/2⌋)+n≤2c⌊n/2⌋+n≤(c+1)n

这并不能证明一个归纳步:从你开始,您证明了对于 k = n, T (k )≤ (c + 1 )T(k)≤ckk=n。这是一个较弱的界限。看看这意味着什么:牛逼(ķ )≤ ÇT(k)≤(c+1)k表示 c是 T的增长率的约束。但是你的速度 ç时长 ķ增长。这不是线性增长!T(k)≤ckcTck

如果仔细观察,您会发现,每当k加倍时,比率就会增加1。因此,非正式地,如果m = 2 p k,则c m = c k + p;换句话说,c k = c 0 log 2 k。c1km=2pkcm=ck+pck=c0log2⁡k

这可以很精确。通过感应证明了对,Ť (ķ )≤ Ç 日志2(ķ )。k≥1T(k)≤clog2⁡(k)

递归关系是分而治之算法的典型特征,该算法在线性时间内将数据分为两个相等的部分。此类算法以时间(不是 O (n ))。Θ(nlog(n))O(n)

要查看预期的结果,您可以对照主定理检验递归关系。除法是,完成的额外功是n ; 日志2(2 )= 1,所以这是在第二种情况下的量,生长是Θ (Ñ2T(n/2)nlog2⁡(2)=1。Θ(nlog⁡(n))


7

我正在扩展已经给出的答案,也许只是通过更详细地解释我的评论。

由于猜测显然是困难且乏味的,因此有时存在更好的方法。一种这样的方法是主定理。现在我们的复发形式的,其中一个≥ 1并且b > 1是常数,˚F (Ñ )的功能。请注意,在我们的例子⌊ ñ / 2 ⌋可以被解释为ñ / 2T(n)=aT(n/b)+f(n)a≥1b>1f(n)⌊n/2⌋n/2。从技术上讲,由于可能不是整数,因此递归的定义可能不明确。但是,这是允许的,因为它不会影响复发的渐近行为。因此,我们经常发现放下地板和天花板很方便。正式的证明有点繁琐,但是有兴趣的读者可以从例如Cormen等人的文章中找到。书。n/2

在我们的情况下,我们有,b = 2,f (n )= Θ (n )。这意味着我们有n log b a = n log 2 2 = n。由于f (n )= Θ (n ),因此适用了Master定理的第二种情况,并且我们有解T (n )= Θ (n loga=2b=2f(n)=Θ(n)nlogb⁡a=nlog2⁡2=nf(n)=Θ(n)。T(n)=Θ(nlog⁡n)


谢谢!可以注意到的是“滴落地板和ceils”对应于假设其通常完成。基本观察是,对于非递减函数,子序列的渐近增长等于整个序列的渐近增长。n=2k
— 拉斐尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.