【问题标题】:What is Big O of two loops什么是两个循环的大 O
【发布时间】:2022-02-15 05:34:46
【问题描述】:

我正在尝试为求和函数找到 Big-O。我知道这两个循环通常意味着 N^2 运行时间,但这只是一个 N,但 j 运行的时间比 N 本身多得多。

int Summing( int n )
{
    int i 
    int j
    int s = 0;
    for(i=0; i < n; i++){
        for(j=0; j < i; j++) {
            s += i*i;
          }
    }

【问题讨论】:

  • 你有什么问题?
  • 您知道吗?只需在代码中添加一个计数器并运行它,然后绘制结果,您就可以凭经验确定复杂性?如果您对复杂性有预感,这是确认它的有用方法。
  • 它是 O(j*n) 并且因为 j 是一个常数,你可以去掉 j。所以,结果是 O(n)。
  • @ChengThao j - 不是常数
  • 这段代码的时间复杂度是二次。不需要在循环外声明变量 ij

标签: java performance time big-o


【解决方案1】:

您可以计算内循环作为 i 的函数所用的确切时间,然后对 i 所用的所有值求和。

这里最里面的部分运行的次数是0 + 1 + 2 + ... + (n-1) = (n-1)*n/2 = (n^2)/2 - n/2,也就是O(n^2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多