迭代函数

时间:2012-03-10 11:53:18

标签: data-structures complexity-theory

坚持我HW - 需要尝试复杂性

time=0;
for (i=n; i>=1; i = sqrt(i))
 for (j=1; j<=i; j++)
 time++;

我做了什么 - 第一次循环是这样的: i = n,n ^(1/2),n ^(1/4)... 1 比我们得到的:

n ^(1/2)^ k = 1 如果我记录双方一边得到0 ......我该怎么办?

1 个答案:

答案 0 :(得分:0)

我认为某处存在拼写错误,否则如果输入n不小于1,则为Θ(∞)。对于i == 1,更新i = sqrt(i)不会更改i,这是一个无限循环。)

所以让我们假设它实际上是

time = 0;
for (i = n; i > 1; i = sqrt(i))
    for (j = 1; j <= i; j++)
        time++;

然后,为了获得嵌套循环的复杂性,您需要为外循环的每次迭代求和内循环的复杂性。在这里,内部循环显然运行i次,因此我们需要对外部循环中运行的值i求和。这些值为n, n^0.5, n^0.25, ..., n^(1/2^k),其中k的特征为

n^(1/2^(k+1)) < 2 <= n^(1/2^k)

或等同地

2^(2^k) <= n < 2^(2^(k+1))
2^k <= lg n < 2^(k+1)
k <= lg (lg n) < k+1
k = floor(lg(lg n))

现在仍需要估算从上到下的总和来得到算法的Θ。如果您开始记下n的几个(大)值的总和,则此估算非常简单。