2

该块是:

    i=2  
    while(i<n){  
        i=i*i;  
        x=x+1;  
    }  

我需要找到 x=x+1 执行次数的 theta 符号。我创建了一个包含一些示例值的表格,但我不知道如何从那里继续前进。这是我的示例值:

(n) - (# times looped)  
  3 - 1  
  5 - 2  
 20 - 3  
400 - 4
4

1 回答 1

4

考虑这一点的一种方法是跟踪循环中 i 的值。在第一次迭代之前,该值为 2 = 2 1。在第二次迭代之后,它是 4 = 2 2。第三次迭代后,它是 16 = 2 4。在第四次迭代之后,它是 256 = 2 8。在第五个之后,它是 65,536 = 2 16

如您所见,经过 k 次循环迭代后, i 的值为 2 2 k。这意味着迭代次数将(大致)对应于 k 的最小值,使得

2 2 k ≥ n

两边取对数两次,我们得到

2 2 k ≥ n

2 k ≥ 对数2 n

k ≥ log 2 log 2 n

所以循环迭代的次数大致是log 2 log 2 n。因此,循环运行 O(log log n) 次。更准确地说,循环运行 Θ(log log n) 次,因为循环在 k 次迭代结束之前不会停止。

希望这可以帮助!

于 2013-01-30T00:18:19.810 回答