微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何正确计算这个时间复杂度

如何解决我如何正确计算这个时间复杂度

我正在检查这段代码,为我的测试做准备,但在确定正确的时间复杂度时遇到了一些问题:

a = 1;
while (a < n) {
 b = 1;
 while (b < a^2)
  b++;
a = a*2;
}

a 的值如下:1,2,4,8,...,2^(logn) = n

因此我们有 logn 次外循环迭代。 在每个嵌套循环中,都有 a^2 次迭代,所以基本上我想出的是:

T(n) = 1 + 4 + 16 + 64 + ... + (2^logn)^2

我在查找本系列的通用术语时遇到问题,因此无法得出最终结果。 (可能是因为我的计算完全偏离了)

非常感谢您的帮助,谢谢。

解决方法

您的计算没问题,您对内部 while 循环的分析是正确的。我们可以用一张小表格来证明这一点:

enter image description here

这基本上是一个几何级数的总和:
a1 = 1,q = 4,#n = lg n + 1

其中 #n 是元素的数量。
我们有:Sn = 1 * (4^(lgn +1) - 1)/(4-3) = (4*n^2 - 1)/3

因此我们可以说您的代码运行复杂度为 Θ(n^2)

LaTeX 中的数学解释:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。