以下代码的时间复杂度是多少?
Posted
技术标签:
【中文标题】以下代码的时间复杂度是多少?【英文标题】:What's the time complexity of the following code? 【发布时间】:2016-09-10 15:39:45 【问题描述】:
a = 2;
while (a <= n)
for (k=1; k <= n; k++)
b = n;
while (b > 1)
b = b / 2;
a = a * a * a;
我正在努力处理外部 while 循环,即 loglogn
,我不明白为什么。如果最后一行是a = a * a * a * a;
,时间复杂度会如何变化?
for循环是O(n)
,内部循环是O(logn)
。
所以总的来说,O(n*logn*loglogn)
【问题讨论】:
【参考方案1】:a 值将是:
a = 2 2^3 2^9 2^27 2^81 ...
等等。
现在假设a的最后一个值为2^(3^k)
其中 k 是外部 while 循环的迭代次数。
为简单起见,我们假设a = n^3
,所以2^(3^k) = n^3
所以3^k = 3*log_2(n) => k = log_3(3log_2(n)) = ?(loglogn)
如果最后一行是a = a * a * a * a
,则时间复杂度将保持为?(loglogn)
,因为k = log_4(4log_2(n)) = ?(loglogn)
。
【讨论】:
【参考方案2】:循环运行 n 次,内部循环的时间复杂度为 log n,因此总时间复杂度为 O(n log n)
【讨论】:
以上是关于以下代码的时间复杂度是多少?的主要内容,如果未能解决你的问题,请参考以下文章