我想知道此函数的时间复杂度是两个变量。由于使用a和b的while循环,我的猜测是O(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)
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
答案 0 :(得分:0)
由于从未使用a
来确定循环的迭代次数,因此复杂度应为O(b^2)
,因为内部循环将迭代b^2/2
次。
答案 1 :(得分:0)
您的外部while True:
循环实际上更模糊地编写了for upper_bound in range(b+1):
,因此显然运行了b+1
次。
您的内部循环为for i in range(upper_bound):
,并且upper_bound
的平均值为(b+1)/2
,因此,每个外部循环都运行(b+1)/2
次,或总共(b+1) * (b+1)/2
次。
您没有向我们显示print_01_codes('', a)
的定义,也没有告诉我们a
和b
的值是什么。
a
是某种集合,并且print_01_codes
遍历a
中的值(就像print('', a)
那样),则该循环运行{每个内部循环{1}}次,或总计a
。(b+1) * (b+1)/2 * a
只是一个数字并且只是打印(例如a
那样打印),则需要print('', a)
的时间。与此同时,log(a, 10)
中的所有代码都是不相关的,因为该函数永远不会被调用。
因此,您的时间不是anotherfunc
,而是O(a * b)
或O(a * b**2)
。