所以我在循环中嵌入了一个循环:
int a,b,n;
for (a = 1; a <=n; a++) {
for (b = 0; b < n; b+=a)
cout << "hey" << endl;
}
n是2的幂
我试图了解如何计算时间复杂度,但是我很难弄清楚Big-theta符号。
我知道outter循环在O(n)时间运行,但由于b + = a,我不确定内循环。我知道如果我有时间进行两个循环,我可以将它们相乘以获得函数的Big-theta时间,但我不确定内循环在运行的是什么。
当我插入样本n(即2,4,8,16)时,内环分别循环3次,9次,24次,61次。我不明白这些价值观是如何相关的。
编辑:
好的,我看到你在说什么,但我试图将它与这个功能进行比较。这个功能的时间是多少?然后我可以比较两者的速度:
int a,b,n;
int z = 1;
for (a = 0; a <n; a++) {
for (b = 0; b < n; b=b+z)
cout << "hey" << endl;
z = z * 2;
}
答案 0 :(得分:3)
你可以看到内部循环运行a包含在n中的次数,即满足的最大整数k:
它对应于天花板功能。所以内循环的迭代总数是:
第二个总和是Divisor summatory function,可以写成:
因此整个代码的时间复杂度为O(nlogn)。
修改强>
关于您发布的第二段代码,计算更简单。如果n=2^k
,则迭代次数为:
所以第二个更快,因为它是O(n)。