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)
答案 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,所以你必须简化。