如何确定以下算法的运行时间

问题描述

for n in range (1,n):
   for j in range(1,n+1):
       k = 1
       while k <= j:
           sumfunc()
           k *= 42

(Python代码,从1到n) 如果somefunc()是影响因素,如何确定somefunc()调用次数以及由此算法的运行时间?

我只是将这种类型的其他问题转换为一些总和并加以解决,但这有点棘手。

我注意到直到n = 41都是线性的,但是之后log42(n)才涉及到,但是我不知道如何使用这个事实。

解决方法

从技术上讲,您只需要在代码执行前后获得一个时间戳,然后从after时间戳中减去before即可获得代码段的执行时间:

import time

t0 = time.time()

for n in range (1,n):
   for j in range(1,n+1):
      k = 1
      while k <= j:
         sumfunc()
         k *= 42

t1 = time.time()

total = t1-t0