#Recurrence T(n)= 3T(n / 3)+Ѳ(log 3n)

时间:2017-08-16 19:50:05

标签: recurrence

对不起,我已经尝试了很多来解决这个递推方程 T(n)= 3T(n / 3)+Ѳ(log3n)  使用替换方法但我无法获得所需的结果:

1)T(n)= O(nlogn)

2)归纳      基数:对于每个n = 1 - > 1log1 + 1 = 1 = T(1)

  Inductive step: T (k) = klogk + k for each k <n

 Use k = n / 3

T(n)= 3T(n / 3)+Ѳ(log 3n)

1)T(n)= O(nlogn)

2)归纳

 Base: for every n = 1 -> 1log1 + 1 = 1 = T (1)

  Inductive step: T (k) = klogk + k for each k <n

 Use k = n / 3

T(n)= 3T(n / 3)+Ѳ(log 3n)

= 3 [n / 3logn / 3 + n / 3] +(log 3n)

= nlogn / 3 + n +(log 3n)

= n(logn-log3)+ n +(log 3n)

= nlogn-nlog3 + n +(log3n)

1 个答案:

答案 0 :(得分:2)

首先,我们可以(最终)忽略Theta-notation中的基数3,因为它相当于乘法因子,因此无关紧要。然后我们可以尝试以下方法:

1。通过检查假设:

如果我们多次将T重新替换为自己,我们会得到:

enter image description here

上限m是多少?我们需要假设T(n)有一个停止条件,即某些值n停止递归。假设它是n = 1(它确实无关紧要,只要它是一个远小于n的常数)。继续(并简要恢复基础3):

enter image description here

令人惊讶的是答案不是Ө(n log n)

2。感应基础案例

我们不会使用归纳来证明最终结果,但我们通过检查扩展的行为推断出系列结果。

对于基本案例n / 3 = 1,我们有:

enter image description here

这是一致的。

3。诱导复发

enter image description here

再次,一致。因此,通过归纳,求​​和结果是正确的,T(n)确实是Ө(n)

4。数值测试:

万一你仍然不能相信它是Ө(n),这是一个证明结果的数值测试。

Javascript代码:

function T(n) {
   return n <= 1 ? 0 : 3*T(floor(n/3)) + log(n);
}

结果:

n           T(n)
--------------------------
10          5.598421959
100         66.33828212
1000        702.3597066
10000       6450.185742
100000      63745.45154
1000000     580674.1886
10000000    8924162.276
100000000   81068207.64

图表:

enter image description here

线性关系很明确。