【问题标题】:Finding the Big-theta notation of a Function查找函数的 Big-theta 符号
【发布时间】:2014-09-17 09:50:55
【问题描述】:

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

int a,b,n;
for (a = 1; a <=n; a++) {
    for (b = 0; b < n; b+=a)
        cout << "hey" << endl;
}

n 是 2 的幂

我正在尝试了解如何计算其时间复杂度,但是我无法为此计算出 Big-theta 符号。

我知道外循环在 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;
}

【问题讨论】:

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


    【解决方案1】:

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

    它对应一个天花板函数。所以内循环的总迭代次数为:

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

    所以整个代码的时间复杂度是O(nlogn)。

    编辑

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      相关资源
      最近更新 更多