问题1 :
对于生成给定字符串的所有回文分解的问题,作者提供了以下解决方案:
def palindromic_decompositions(input):
def directed_palindrome_partitioning(offset, partial_partition):
if offset == len(input):
result.append(list(partial_partition))
return
for i in range(offset + 1, len(input) + 1):
prefix = input[offset:i]
if prefix == prefix[::-1]:
directed_palindrome_partitioning(i, partial_partition + [prefix])
result = []
directed_palindrome_partitioning(0, [])
return result
在第4行,您将看到partial_partition
包装在list()
函数中,该函数实际上只是复制partial partition
并将其附加到结果中。
但是,由于我们从不更改partial_partition,因此我认为这是partial_partition
的浪费重复。每个函数调用仅将partial_partition重新分配给参数。我的理解在这里正确吗?
我运行了这段代码,并在以下输入情况下运行了没有list()
的代码副本:(palindromic_decompositions('0204451881')
,并得到了相同的输出。
问题2:
问题提供的时间成本为n x(2 ^ n),但是没有提供解释。我了解n
部分是由于list(partial_partition)
->有人可以解释(2^n
的来源吗?
答案 0 :(得分:0)
对于Q1:list()
是多余的,因为partial_partition + [prefix]
也会进行复制。否则,如果没有result
,将使用指向同一基础对象的指针填充。