以下代码必须根据给定的字典从字符串(没有空格)中识别单独的单词。它尝试在每个字符之后放置一个空格,并检查到目前为止该单词是否在字典中,然后尝试形成一个新单词。如果新词不成功,它会尝试扩展前一个词。你如何计算这样一个程序的内存复杂度?它是指数/阶乘吗?记忆化对复杂性有什么影响吗?(假设如果单词在字典中以恒定时间出现,则 is_word() 返回)
def word_break(string, dictionary, cache, i = 0):
if i == len(string):
return []
else:
for j in xrange(i+1, len(string)+1):
chunk = string[i:j]
if (i, len(chunk)) in cache:
return cache[(i, len(chunk)]
if is_word(chunk, dictionary):
done = word_break(string, dictionary, cache, j)
if done == False:
cache[(i, len(chunk))] = False
continue
else:
done.insert(0, chunk)
return done
return False