回文字符串分解的代码效率+时间成本澄清

时间:2018-07-25 14:34:03

标签: python string recursion time-complexity

问题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的来源吗?

1 个答案:

答案 0 :(得分:0)

对于Q1:list()是多余的,因为partial_partition + [prefix]也会进行复制。否则,如果没有result,将使用指向同一基础对象的指针填充。