问题描述
为什么是O(n ^ 6)?而不是O(n ^ 9)?
def fa1(n):
k = 0
for i in range(1,(n ** 6) + 1) :
for j in range(i * 3,(n ** 3) + 1):
k += 1
谢谢。
解决方法
首先,通过定义big O notation,O(n^6)
的计算也是O(n^9)
(n >= 0
)。后者只是一个较差的近似值。
第二,如果您这样重写函数,那就太简单了:
def fa1(n):
k = 0
for i in range(1,((n ** 3) + 1)//3 + 1) :
for j in range(i * 3,(n ** 3) + 1):
k += 1
for i in range(((n ** 3) + 1)//3 + 1,(n ** 6) + 1) :
for j in range(i * 3,(n ** 3) + 1):
k += 1
第二个循环始终为i * 3 >= (n ** 3) + 1
,因此跳过内部循环,因为range
为空。因此,该功能等效于:
def fa1(n):
k = 0
for i in range(1,(n ** 3) + 1):
k += 1
这显然是O(n^6)
甚至是θ(n^6)
(大Theta)。
您可以更直接地计算k
,但我想k += 1
只是一个占位符。