Python 以下算法的运行时复杂度(以a和b为单位)是多少?
我想知道这个函数在两个变量中的时间复杂度是多少。我猜应该是O(a*b),因为while循环使用a和bPython 以下算法的运行时复杂度(以a和b为单位)是多少?,python,time-complexity,Python,Time Complexity,我想知道这个函数在两个变量中的时间复杂度是多少。我猜应该是O(a*b),因为while循环使用a和b def somefunc(a, b): def anotherfunc(current, num_digits): if num_digits == 0: print(current) else: print_01_codes('0' + current, num_digits - 1)
def somefunc(a, b):
def anotherfunc(current, num_digits):
if num_digits == 0:
print(current)
else:
print_01_codes('0' + current, num_digits - 1)
print_01_codes('1' + current, num_digits - 1)
upper_bound = 0
while True:
for i in range(upper_bound):
print_01_codes('', a)
if upper_bound > b:
break
upper_bound += 1
由于
a
从未用于确定循环的迭代次数,因此复杂度应该是O(b^2)
,因为内部循环将迭代b^2/2次。外部,而True:
循环有效地用于范围(b+1)的上限:
写得更模糊,所以它显然运行了b+1
次
您的内循环是范围内i的(上限):
,而上限
平均(b+1)/2
,因此它每个外循环运行(b+1)/2次,或(b+1)*(b+1)/2次
您没有向我们展示print\u 01\u code(“”,a)
的定义,也没有告诉我们a
和b
的值是什么
- 如果
a
是某种类型的集合,并且print\u 01\u code
在a
中的值上循环(就像print(“”,a)
那样),则该循环在每个内部循环中运行a
次,或(b+1)*(b+1)/2*a
次
- 如果
a
只是一个数字,并且它只是被打印出来的(例如,print(“”,a)
将需要log(a,10)
时间
同时,anotherfunc
中的所有代码都是无关的,因为该函数从未被调用过
所以,你的时间不是O(a*b)
,而是O(a*b**2)
或O(log a*b**2)
什么是打印\u 01\u代码
?它从来没有定义过。还有,什么是a
和b
?显然b
是一个正整数,但是a
可以是任何给定的代码。另一个函数是print\u 01\u codes
吗?如果是这样,我认为您的总运行时间是O(a*2^a*b^2)
,但我不能完全确定我是否正确地分析了递归函数。为串联复制字符串类似于O(a)
,对于外部函数的单个调用,您将递归O(2^a)
次。外部函数中的两个循环运行O(b^2)
次。