对不起,我已经尝试了很多来解决这个递推方程 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)
答案 0 :(得分:2)
首先,我们可以(最终)忽略Theta-notation中的基数3,因为它相当于乘法因子,因此无关紧要。然后我们可以尝试以下方法:
1。通过检查假设:
如果我们多次将T
重新替换为自己,我们会得到:
上限m
是多少?我们需要假设T(n)
有一个停止条件,即某些值n
停止递归。假设它是n = 1
(它确实无关紧要,只要它是一个远小于n
的常数)。继续(并简要恢复基础3):
令人惊讶的是答案不是Ө(n log n)
。
2。感应基础案例
我们不会使用归纳来证明最终结果,但我们通过检查扩展的行为推断出系列结果。
对于基本案例n / 3 = 1
,我们有:
这是一致的。
3。诱导复发
再次,一致。因此,通过归纳,求和结果是正确的,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
图表:
线性关系很明确。