Python 以下算法的运行时复杂度(以a和b为单位)是多少?

Python 以下算法的运行时复杂度(以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)

我想知道这个函数在两个变量中的时间复杂度是多少。我猜应该是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)

            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)
次。