计数步骤和O符号

时间:2017-12-11 10:59:44

标签: java time-complexity big-o

这两种方法各有几个步骤,当我在两种方法中遇到最坏的情况时,如何计算它们?我已经阅读了很多关于如何计算O符号的文章(在这种情况下最小的O符号量),但不知道它是如何工作的。我得到了程序的功能,但有人可以帮助我计算其步数并在最坏的情况下计算O符号吗?

static int methode1(int[] arr) { 
    int min = 100; 
    int minidx = 0; 
    for(int i = 0; i<arr.length; i++) { 
        if(arr[i]<min) { 
            minidx = i; 
        } 
    } 
    return minidx; 
}

static int methode2(int n) { 
    int count = 2; 
    for(int i = 1; i<=n; i++) { 
        for(int j=n; j>i; j--) { 
            count++; 
        } 
    }
    return count; 
}

3 个答案:

答案 0 :(得分:1)

  1. 方法1
  2. 如果我用 n 表示数组的长度(其中的元素数), 这个循环将进行 n 迭代。在每次迭代时,执行“if”,有时执行赋值。在任何情况下都会有一个额外的东西来到表中的下一个项目。所以我们每个元素有2-3个操作。复杂性为O( n )。 (这意味着存在一个自然数 p ,因此对于所有,操作数小于 p * n n 。在我们的例子中,像 p = 5这样的东西肯定会有用。)

    编辑:更多地阐明这个想法:这就像在每次迭代中都有一个复杂的操作,最多消耗 p 时间单位。 O( n )表示算法最多只执行 n 这些复杂的操作。因此,算法的运行时间仅取决于 n

    1. 方法2
    2. 在这种情况下,您有一个从1到 n 的循环计数。这些是 n 操作。对于每个步骤,您都有另一个从 n 计数到1的循环,它们也是 n 操作。在第二个循环中,只有一个递增操作。

      所以我们在内部循环中有 n * n 增量操作, n * n 减少操作到执行内部循环,以及另一个 n 增量操作来执行外部循环。这使得O( n ^ 2)的复杂性。

答案 1 :(得分:0)

首先,对于这两种方法都没有最坏的情况需要考虑,因为两种方法都没有条件退出。

接下来,第一个,当你在数组中寻找它们的最小元素(很可能没有排序)时,你必须考虑检查每个元素以找到最小元素,因此复杂性将是{{1} }。

关于第二个,你有两个嵌套循环,对于外循环的第一次迭代,你在内部进行O(n)迭代,第二次你正在进行n等等......例如< / p>

n - 1

变为算术系列,总和为n, n - 1, n - 2, ..., 1,in-big-O表示法为n*(n+1)/2

答案 2 :(得分:0)

它将是methode1-O(arr.length),methode2-O(n ^ 2)。

方法中有for个循环。您可以计算(计算)循环内部代码执行的次数。在第二种情况下,有一个嵌套在另一个循环中的循环。在这种情况下,执行次数等于第一次循环中的执行次数乘以第二次循环中的执行次数。