T(1)= 1
T(n)= T(n ^ 1/3)+ 1
我该如何解决?通过“解决”我的意思是发现它的“复杂性”(我真的不知道怎么用英语说),比如O(nlogn)ecc。
我无法猜测替换方法;我没有使用迭代方法,我无法应用主定理。
我到了这里,但我不确定:
T(n)= T(n ^(1/3 ^ k)))+ k
你能给我一些建议吗?
答案 0 :(得分:5)
我会尝试制定一些可能的解决方案。您可以根据进一步的限制选择一个。
递归将一直运行到n
变为1
。这是:
1 = n^(1/3^k)
或更一般地
b = n^(1/3^k)
其中k
是递归深度。解决k
的问题得出:
ln(b) = 1/3^k * ln(n)
ln(ln(b) / ln(n)) = k * ln(1/3)
-ln(ln(b) / ln(n)) / ln(3) = k
如果我们将b
设置为1,则等式变得无法解析,因为未指定ln(0)
。这相当于无休止的递归。
但是,我们可以说在最后一次递归中n
应该是“大约1”。所以我们实际上有一个b != 1
。然后k是:
k = -ln(ln(b) / ln(n)) / ln(3)
= -ln(c1 / ln(n)) / c2
= -(ln(c1) - lnln(n)) / c2
= (-c3 + lnln(n)) / c2
这应该是O(log log n)
。
如果要将n
截断为整数部分,计算会变得非常混乱,因为每个步骤后都有特殊情况。但是,我们可以通过指定b = 1.999999
来估算结果。这将产生与上述相同的复杂性。
答案 1 :(得分:1)
如果这是一个递归函数,那么我所理解的是 T(n)= T(integerpart(cubicsquare(n))+1;
在这种情况下:
S=0;
if (n>=1){
S++;
N= n;
while (N>1){
N=integerpart(N^1/3);
S++;
}
}
T(n)= S ;
这意味着T(n)是一个简单函数:具有整数绑定,并且keme间隔的宽度为2 ^(3 ^ k) - 2 ^(3 ^(k-1))
你可以看到,第一个区间是n in] 1,8 [T(n)= 2;如果n在[8,252 [,T(n)= 3 ... 所以,我们可以说t(2 ^(3 ^ k))= k + 1; 那么t(n)~O(ln(ln(n))/ ln(3))(考虑套房2 ^ 3 ^ k)