如何通过查看循环来确定Big O性能?

时间:2016-09-08 23:30:50

标签: java algorithm big-o

我刚刚开始学习Big O Notation,老实说我不认为我有它,我不太确定如何通过查看for循环来确定O()性能。我列举了几个例子,然后我认为一些答案是正确的!如果他们错了,请告诉我,我们将非常感谢任何解释!

for (int i = 0; i <1000; i++) {
        count ++;

我相信这将是O(n),因为除了恒定时间打印之外,for循环中没有其他任何内容。我们迭代'n'次,或者在这种情况下1000?

for (int i = 0; i < n; i++) {
    for(int j = 0; j < n; j++)
       count ++;

这个是否有一个O(n ^ 2),因为循环是嵌套的,它迭代n两次,n * n?

for (int i = 0; i < n; i++) {
    for( int j = i; j < n; j++)
       count++;

这是另一个O(n ^ 2),但在最坏的情况下?或者这是O(n log n)?

1 个答案:

答案 0 :(得分:0)

Big-O表示法应该是帮助用户了解运行时如何随输入增加的指南。

对于第一个示例,无论n是什么,循环都会运行1000次,因此它是O(1000) = O(1)时间。

对于第二个示例,每次外部循环运行时,嵌套循环运行n次,运行n次。这是n*n = n^2次操作的总计。因此,操作次数与n的平方成比例增加,因此我们说它是O(n^2)

对于第三个例子,它仍然是O(n^2)。这是因为Big-O表示法忽略了时间复杂度的确切公式中的常量。如果您计算ji增加时运行的次数,则会得到此模式。

i: 0  1   2   3 ...
j: n n-1 n-2 n-3 ...

总的来说,操作次数约为1/2 n^2。由于Big-O表示法忽略常量,因此仍然是O(n^2)