我刚刚开始学习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)?
答案 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表示法忽略了时间复杂度的确切公式中的常量。如果您计算j
在i
增加时运行的次数,则会得到此模式。
i: 0 1 2 3 ...
j: n n-1 n-2 n-3 ...
总的来说,操作次数约为1/2 n^2
。由于Big-O表示法忽略常量,因此仍然是O(n^2)