找到函数的Big-theta符号

时间:2014-09-16 03:45:32

标签: complexity-theory time-complexity big-theta

所以我在循环中嵌入了一个循环:

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;
}

1 个答案:

答案 0 :(得分:3)

你可以看到内部循环运行a包含在n中的次数,即满足的最大整数k:

它对应于天花板功能。所以内循环的迭代总数是:

第二个总和是Divisor summatory function,可以写成:

因此整个代码的时间复杂度为O(nlogn)。

修改

关于您发布的第二段代码,计算更简单。如果n=2^k,则迭代次数为:

所以第二个更快,因为它是O(n)。