就a和b而言,以下算法的运行时复杂度是多少?

时间:2018-07-17 05:29:45

标签: python time-complexity

我想知道此函数的时间复杂度是两个变量。由于使用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

2 个答案:

答案 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)的定义,也没有告诉我们ab的值是什么。

  • 如果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)