求助:使用Θ符号计算给定算法的运行时间
分析该算法的Θ运行时间
没问题,我来帮你拆解这个算法的Θ复杂度计算~
首先先把算法逻辑用代码块清晰呈现:
输入:自然数n i = 2 while i ≤ n do i = i^2 end while
核心思路:计算循环迭代次数
这个算法的循环体是常数时间操作(i = i^2只需要固定步数),所以整体运行时间的Θ复杂度完全由循环迭代次数决定。
我们先列出每次迭代后i的取值规律:
- 初始值:
i₀ = 2(进入循环前的初始状态) - 第1次迭代后:
i₁ = i₀² = 2² = 4 - 第2次迭代后:
i₂ = i₁² = (2²)² = 2^(2²) = 16 - 第3次迭代后:
i₃ = i₂² = (2^(2²))² = 2^(2³) = 256 - ...
- 第k次迭代后:
i_k = 2^(2^k)
循环终止的条件是i > n,也就是当某次迭代后i超过n时停止。我们需要找到最大的整数k,使得进入第k次循环前的i值 ≤ n。
推导迭代次数的Θ复杂度
根据上面的规律,进入第k次循环前的i值是i_{k-1} = 2^(2^{k-1}),循环继续的条件是:
2(2{k-1}) ≤ n
我们对不等式两边逐层取以2为底的对数:
- 第一次取log₂:
2^{k-1} ≤ log₂ n - 第二次取log₂:
k-1 ≤ log₂(log₂ n)
整理后得到:k ≤ log₂(log₂ n) + 1
因为k是整数,实际迭代次数是floor(log₂(log₂ n)) + 1。在Θ符号的定义里,常数项和取整操作可以忽略,所以迭代次数的Θ复杂度是Θ(log log n)。
由于每次循环体是O(1)操作,因此整个算法的运行时间就是Θ(log log n)。
实例验证
- 当n=4时:
log₂(log₂4)=log₂2=1,迭代次数=1+1=2(实际执行:i从2→4→16,两次循环) - 当n=16时:
log₂(log₂16)=log₂4=2,迭代次数=2+1=3(实际执行:2→4→16→256,三次循环) - 当n=100时:
log₂(log₂100)≈2.73,取整后+1得3次迭代(实际执行:2→4→16→256>100,三次循环)
内容的提问来源于stack exchange,提问作者anita
相关产品推荐
相关产品推荐

