【发布时间】:2020-07-25 12:36:48
【问题描述】:
我编写了这段代码,它返回所提供字符串的所有排列。现在我想计算运行时复杂度并需要帮助。
代码递归调用permutationRecursively函数N次(对于字符串的每个字符,即st),然后有两个for循环,一个循环遍历从递归调用返回的所有排列(即a它将是 ['a'] 或 ab 它将是 ['ab', 'ba'] 等等),然后是每对排列。我真的对这部分感到困惑。这个特定部分的复杂性是多少?
我假设对于所有递归调用,它将是O(N),然后对于内部循环,它将是O(A*B)。所以总数是O(N*A*B)。对吗?
def permutationRecursively(st):
if(len(st) < 2):
return [st]
else:
permutations = permutationRecursively(st[0:-1])
newPermutations = []
wordToInsert = st[-1]
for permutationPair in permutations:
for index in range(len(permutationPair)+1):
newPermutations.append(permutationPair[0:index]+wordToInsert+permutationPair[index:])
return newPermutations
start_time = time.time()
permutationRecursively("abbc")
print("--- %s seconds ---" % (time.time() - start_time))
【问题讨论】:
-
请不要接受我的回答。 @Mo.B 提供的答案是正确的答案。
标签: algorithm recursion data-structures time-complexity permutation