Python 为什么分词需要动态编程?
我指的是这个问题: 给定一个字典,即一组字符串和一个字符串s,设计一个 检查s是否为 字典单词的顺序。如果存在这样的连接,您的 算法应该输出它 以下是我在不使用DP的情况下解决问题的方法: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:
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算法吗
据我所知,如果你有一个带有
n
字母的单词w
,并且在w[0:n-1]
中有k
有效的单词组合(即w[0:n-1]
可以在不同的地方拆分成有效的单词,k
次),您将在字典k
次中查找w[n]
(当然,假设w[n]
不是有效单词)。这就是奥桑兹在回答中所表现出来的
使用动态规划方法,因为您只跟踪字符串有效(可以拆分为单词)之前的索引,所以只需查找一次w(n)
在您发布的链接中查找TulsiRam和geekyandgirly的评论,它们有助于理解问题的两面。谢谢您的回答。证明某人错了的最好方法总是拿出一个病态的例子。我很感激!这是一个非常愉快和亲切的回应。贴士帽