假设有一个简单的嵌套for循环:
for i in range(0, n):
for j in range(0, n):
print(i*j)
几乎每个人都可以很容易地将其视为O(n^2)
。现在,如果我们修改嵌套的for循环:
for i in range(0, n):
for j in range(i, n):
print(i*j)
它会沿n x n-1 x n-2 ... x 1
的方向前进,对吗?这将是相同的n!
,应该是一个可怕的上限。那我在这里想念什么?为什么使用for循环的较小版本(明显跳过了循环的几次迭代)却导致了更大的o表示,更糟的是?
答案 0 :(得分:4)
该计算应为n + n-1 + n-2 ... + 1
,即O(n²)。
答案 1 :(得分:2)
for i in range(0, n):
for j in range(i, n):
print(i*j)
n + n-1 + n-2 + ... + 1 = O(n ^ 2),乘法从哪里来?
请注意,在书呆子意义上,O(n ^ 2)也是O(n!)。也就是说,O(n!)包含的函数是O(n ^ 2)(然后是一些)。
答案 2 :(得分:0)
我也是新来的。根据我的理解,我认为
对于范围在(0,n)-> n的i 对于范围(i,n)-> n-i次的j
因为只有2个循环,对于整个操作而言,这意味着n *(n-i)。应该只有O(n ^ 2)。