def loopy_loop(n):
for i in range(n):
for j in range(i):
if j*j > i:
break
其中n是正整数。
我们说我采取n = 10
外环肯定会运行n次(n = 10次) 内循环将根据值运行。
n = 0,内循环运行0次
n = 1,内循环运行一次
n = 2,内循环运行3次
n = 3,内循环运行4次(直到j = 3,且9> 3)
n = 4,内循环也运行4次
依此类推,直到n = 9,它将运行5次
我很难将所有内容放在一起以使用大O表示法表达运行时。是否有一套可以帮助我获得这些特定代码片段的算法?
答案 0 :(得分:2)
外部循环运行n
次。
内部循环运行sqrt(i)
次(因为当i
给出j**2
时i
到达i
}但n
增长(大致){ {1}}(n//2
平均值)
复杂度为O(n**1.5)
(n
倍n
的平方根
更准确的估算:
def loopy_loop(n):
counter=0
for i in range(n):
for j in range(i):
counter+=1
if j*j > i:
break
return counter,int((n)*(n//2)**0.5)
print(loopy_loop(5))
print(loopy_loop(10))
print(loopy_loop(100))
print(loopy_loop(1000))
print(loopy_loop(15000))
结果(计数与估计):
(10, 7)
(31, 22)
(810, 707)
(22579, 22360)
(1247250, 1299038)