首先,我很新于Python,所以如果我做错了什么,请原谅。我们想设计一个动态规划解决方案来解决以下问题:有一个字符序列,可能是去除了所有空格的单词序列,我们想找到一种方法(如果有的话),将空格插入其中,以分隔有效的英语单词。例如,theyouthevent 可能是“the you the vent”、“the youth event”或“they out he vent”。如果输入为 theeaglehaslande,则没有这样的方法。你的任务是实现两种不同方式的动态规划解决方案:迭代自底向上版本和递归记忆化版本。假设原始单词序列没有其他标点符号(如句号),没有大写字母,也没有专有名词——所有单词都将在提供给您的字典文件中提供。所以,我有两个主要的问题:
1. 我知道这可以且应该在O(N ^ 2)内完成,但我认为我的时间复杂度不是那样。
2. 查找表似乎没有添加所有单词,因此它可以减少时间复杂度。
我想要的: 1. 任何形式的输入(更好的方法,代码中错误的地方,如何让查找表工作,如何使用布尔值表构建有效单词序列)。 2. 关于如何解决递归版本的一些思路,尽管我觉得一旦我能够解决迭代解决方案,我就能从中设计递归解决方案。
像往常一样,非常感谢任何人花费时间或精力,我们都非常感激。以下是我的尝试:
我想要的: 1. 任何形式的输入(更好的方法,代码中错误的地方,如何让查找表工作,如何使用布尔值表构建有效单词序列)。 2. 关于如何解决递归版本的一些思路,尽管我觉得一旦我能够解决迭代解决方案,我就能从中设计递归解决方案。
像往常一样,非常感谢任何人花费时间或精力,我们都非常感激。以下是我的尝试:
#dictionary function returns True if word is found in dictionary false otherwise
def dictW(s):
diction = open("diction10k.txt",'r')
for x in diction:
x = x.strip("\n \r")
if s == x:
return True
return False
def iterativeSplit(s):
n = len(s)
i = j = k = 0
A = [-1] * n
word = [""] * n
booly = False
for i in range(0, n):
for j in range(0, i+1):
prefix = s[j:i+1]
for k in range(0, n):
if word[k] == prefix:
#booly = True
A[k] = 1
#print "Array below at index k %d and word = %s"%(k,word[k])
#print A
# print prefix, A[i]
if(((A[i] == -1) or (A[i] == 0))):
if (dictW(prefix)):
A[i] = 1
word[i] = prefix
#print word[i], i
else:
A[i] = 0
for i in range(0, n):
print A[i]