n和m的运行时复杂度是多少



这是一个编码面试问题。根据n和m,以下算法的运行时复杂性是多少?

def print_all_codes(n, m):

def print_01_codes(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('', n)

if upper_bound > m:

break

upper_bound += 1
while True:
for i in range(upper_bound):
print_01_codes('', n)
if upper_bound > m:
break
upper_bound += 1

这个循环与这个循环相同:

for i in range(m):
for j in range(i):
#Function

这种循环时间复杂性如下所示:1 + 2 + 3 + 4 + ... + m-1 => (m-1)*(m) / 2 => O(m^2)关于你的#功能:


if num_digits == 0:
print(current)
else:
print_01_codes('0' + current, num_digits - 1)
print_01_codes('1' + current, num_digits - 1)

这是一个递归函数,就像一个完整的二叉树。所以它是O(2^n)。您的代码时间复杂性为O(m^2 * 2^n)

最新更新