了解这个python函数的运行时

时间:2017-01-28 21:35:58

标签: python runtime

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表示法表达运行时。是否有一套可以帮助我获得这些特定代码片段的算法?

1 个答案:

答案 0 :(得分:2)

外部循环运行n次。

内部循环运行sqrt(i)次(因为当i给出j**2i到达i}但n增长(大致){ {1}}(n//2平均值)

复杂度为O(n**1.5)nn的平方根

更准确的估算:

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)