所以我有这个递归函数: T(n)= T(log(n))+ T(n-log(n))+ n
我已多次尝试解决它,但我没有成功。 (找到Theta) 基本上,如果它的欧米茄为n ^ 1,5(Ω(n ^ 1.5)),我就足以证明或反驳
提前感谢帮助,我们将不胜感激!
TL; DR:
给定T(n)= T(log(n))+ T(n-log(n))+ n证明或反驳:T(n)=Ω(n ^ 1.5)
答案 0 :(得分:2)
假设T(n)
在n
的某个值处突然变为负值,如果我们忽略第一项,我们可以给出左侧的下限:
我们定义了一个新函数S(n)
,以便:
我们可以立即看到它有个术语(忽略一个等等)。因此,如果我们继续扩大:
在此阶段,由于我们知道任何大log(n) << n
n
,我们可以在递归调用S(n)
时将泰勒展开应用于第三项:
我们也可以现实地忽略第二个词。将此近似值应用于每个S(n)
调用:
现在,我们知道:
b
显然可以是1.5;因此:
编辑:一些数值测试来确认这个结果 -
代码:
uint64_t T(int n) {
return n <= 1 ? 0 : T(n - log(n)) + T(log(n)) + (uint64_t)n;
}
结果:
N T(N)
--------------------------
2 2
4 6
8 18
16 60
32 181
64 578
128 1911
256 6331
512 22011
1024 79304
2048 279719
4096 1016217
8192 3814210
16384 13902832
32768 51540129
65536 195366441
131072 732435510
262144 2744988819
524288 10457580914
1048576 39910628826
N^2/log(N)
针对T(N)
:
这种关系是线性的,意思是
...确认给定的结果。