【问题标题】:Im having trouble finding the Big O notation for these code segments我很难找到这些代码段的大 O 表示法
【发布时间】:2020-03-27 09:25:08
【问题描述】:
1. 

    for(i=0; i<N, i+=2)
    for(j=0; j<i; j+=2)
     a[i] += i*j;
    printf("Elements: ");
    for(i=N; i>0; i--)
     printf("%d ", a[i]);

2. while(N) {
 printf("%d ", N);
 N /= 2;
}

在第一个问题中,我知道因为它是一个嵌套的 for 循环,所以我会得到 O(n^2),但由于还有另一个 for 循环,我不太确定。 对于第二个循环,我无法理解 N/2 时会发生什么。

【问题讨论】:

  • 你真的应该修正你的缩进,为了可读性..
  • 重复乘法是指数,重复除法是对数(指数的反函数)。
  • 使用大括号和缩进重新格式化代码。没有它们,很难确定哪些语句在哪些循环中。
  • 不要只记住“嵌套循环是 O(n^2)”之类的东西,因为这并不总是正确的。如果内部循环中的条件是j &lt; 100,那么嵌套循环对的复杂度就是 O(n)。

标签: c++ c data-structures big-o


【解决方案1】:

对于第一个问题,第二个循环是O(N)。因此,嵌套循环的复杂性 O(N^2) 占主导地位。

对于第二个问题,您在每次迭代中将 N 除以 2。它的复杂度将是O(log(N))

【讨论】:

    猜你喜欢
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 2018-07-16
    • 2022-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多