Python-如何计算此递归函数的时间复杂度?
我想用尽可能多的方法来解决塔式料斗问题,并计算每种方法的时间复杂度(只是为了自我练习)。 解决方案之一是:Python-如何计算此递归函数的时间复杂度?,python,time-complexity,big-o,Python,Time Complexity,Big O,我想用尽可能多的方法来解决塔式料斗问题,并计算每种方法的时间复杂度(只是为了自我练习)。 解决方案之一是: def is_hopable(arr): if len(arr) < 1 or arr[0] == 0: return False if arr[0] >= len(arr): return True res = False for i in range(1,arr[0]+1): res = res
def is_hopable(arr):
if len(arr) < 1 or arr[0] == 0:
return False
if arr[0] >= len(arr):
return True
res = False
for i in range(1,arr[0]+1):
res = res or is_hopable(arr[i:]) # This line
return res
def是可编程的(arr):
如果len(arr)<1或arr[0]==0:
返回错误
如果arr[0]>=len(arr):
返回真值
res=False
对于范围(1,arr[0]+1)内的i:
res=res或是(arr[i:])#这行
返回res
我知道递归时间复杂度计算的一般思想,但是我很难分析注释行(在for循环中)。通常我用
T(n)=C+T(那条线)
来计算时间复杂度,并用一个通用表达式(例如T(n-k))来减少它,直到我达到基本情况,并且可以用n来表示k,但是for循环的时间复杂度是多少?for循环的的复杂度可以达到O(n^2)
因为循环的每次迭代(最多n次迭代)都会执行一个切片arr[i::
,该切片返回arr
的副本,而不首先返回i
元素O(n)
。考虑到这一点,总时间是O(n^3)
上面提到的上限很紧。
示例:arr=[n-1,n-2,n-3,…,1,1]
替代形式:arr[i]=n-1-i
适用于所有i
,0