Python 为什么分词需要动态编程?

Python 为什么分词需要动态编程?,python,dynamic-programming,Python,Dynamic Programming,我指的是这个问题: 给定一个字典,即一组字符串和一个字符串s,设计一个 检查s是否为 字典单词的顺序。如果存在这样的连接,您的 算法应该输出它 以下是我在不使用DP的情况下解决问题的方法: def getwords(s, start = 0): # Find a valid word as a prefix, and try to made the rest work for i in range(start + 1, len(s) + 1): prefix = s[start:

我指的是这个问题:

给定一个字典,即一组字符串和一个字符串s,设计一个 检查s是否为 字典单词的顺序。如果存在这样的连接,您的 算法应该输出它

以下是我在不使用DP的情况下解决问题的方法:

def getwords(s, start = 0):
  # Find a valid word as a prefix, and try to made the rest work
  for i in range(start + 1, len(s) + 1):
    prefix = s[start:i]
    if isind(prefix):
      # We used the whole thing, but it's a word!
      if i == len(s):
        return [prefix]
      words = getwords(s, i)
      if words:
        return [prefix] + words

  # We made it to the end without finding a word configuration
  return False
DP算法被记录在《编程面试要素》一书中。我的问题是:为什么?

我找不到任何非DP解决方案重新计算相同子问题的实例。有人能解释为什么这个算法不如DP算法吗

  • (副词)
  • 广告,动词,(qqqqq)
  • 副词,(qqqqq)
  • 会有两个getwords(‘副词’,6)电话,不是吗

    如果你有以下情况,情况会变得非常糟糕:


    据我所知,如果你有一个带有
    n
    字母的单词
    w
    ,并且在
    w[0:n-1]
    中有
    k
    有效的单词组合(即
    w[0:n-1]
    可以在不同的地方拆分成有效的单词,
    k
    次),您将在字典
    k
    次中查找
    w[n]
    (当然,假设
    w[n]
    不是有效单词)。这就是奥桑兹在回答中所表现出来的

    使用动态规划方法,因为您只跟踪字符串有效(可以拆分为单词)之前的索引,所以只需查找一次
    w(n)


    在您发布的链接中查找TulsiRam和geekyandgirly的评论,它们有助于理解问题的两面。

    谢谢您的回答。证明某人错了的最好方法总是拿出一个病态的例子。我很感激!这是一个非常愉快和亲切的回应。贴士帽