如何解决我如何正确计算这个时间复杂度
我正在检查这段代码,为我的测试做准备,但在确定正确的时间复杂度时遇到了一些问题:
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 循环的分析是正确的。我们可以用一张小表格来证明这一点:
这基本上是一个几何级数的总和: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 中的数学解释:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。