如何根据立方根来定义步骤的复杂性?

时间:2013-06-20 13:32:02

标签: algorithm time-complexity

T(1)= 1

T(n)= T(n ^ 1/3)+ 1

我该如何解决?通过“解决”我的意思是发现它的“复杂性”(我真的不知道怎么用英语说),比如O(nlogn)ecc。

我无法猜测替换方法;我没有使用迭代方法,我无法应用主定理。

我到了这里,但我不确定:

T(n)= T(n ^(1/3 ^ k)))+ k

你能给我一些建议吗?

2 个答案:

答案 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)