显示递归关系为O(n log n)

时间:2011-09-28 07:21:01

标签: algorithm

T (n) = T (xn) + T ((1 − x)n) + n = O(n log n)

其中x是范围0 < x < 1中的常量。 x = 0.5, 0.1 and 0.001时渐近复杂度是否相同? 隐藏在O()符号中的常量会发生什么。使用替代方法。

我正在尝试使用~page 15上的示例,但我觉得奇怪的是,在该示例中,日志从默认基础更改为基础2。 我也不太明白为什么需要简化它以便从左侧删除cnlog2n,这是不是在第一步中完成,而左侧只有"stuff-cnlog2n<=0"然后为任何c和n喜欢so

根据我的尝试,它无法证明T(n)=O(n)

3 个答案:

答案 0 :(得分:1)

好吧,如果你使用Master's定理将其分解为一棵树,那么每次计算时都会有一个恒定的“数量”。你知道这是因为x + 1 - x = 1。

因此,时间取决于树的水平,这是对数的,因为碎片每次都减少一些恒定的量。由于每个级别都进行O(n)计算,因此总体复杂度为O(n log n)。

我希望“证明”会有点复杂。请记住,日志的基础并不重要,它们只是一些不变因素。请参阅对数关系。

PS:看起来像家庭作业。自己想一想!

答案 1 :(得分:0)

在我看来,这恰好是Quicksort平均情况的递推方程式。

您应该查看CLRS explanation of "Balanced Partitioning"

答案 2 :(得分:0)

  

但我觉得奇怪的是,在该示例中,日志从默认基础更改为基础2

这确实很奇怪。简单的事实是,使用基础2来证明比使用基础未知x更容易。例如,基数2中的log(2n) = 1+log(n),这更容易一些。您不必使用基础2,您可以选择所需的任何基础,或使用基础x。为了绝对正确,归纳假设必须具有基础:T(K) <= c K log_2(K)。你以后不能改变IH,所以现在发生的事情在严格意义上是不正确的。您可以自由选择任何您喜欢的IH,因此,只需选择一个使证明更容易的方法:在这种情况下,使用基数为2的日志。

  

左侧只有“stuff-cnlog2n&lt; = 0”,然后对任何c和n进行评估

对'任何c和n'进行评估,你的意思是什么? stuff-cnlog2n<=0是正确的,但您如何证明c是否适用于所有n?好的,c=2是一个很好的猜测。要在WolframAlpha中证明这一点,你需要stuff <= 0 where c=2, n=1确定!,stuff <=0 where c=2, n=2确定!,stuff <= 0 where c=2, n=3确定!,......等等n一路走来到无穷远。嗯,它将花费你无限的时间来检查所有这些......解决这个问题的唯一实用方法(我现在可以想到)是简化stuff-cnlog2n<=0。或许你更喜欢这个论点:你的考试中没有WolframAlpha,所以你必须简化。