我正在编写一个需要9个字符的程序,创建所有可能的排列,并为每个字符抓取字典文件,然后创建一组所有可能的单词。我需要做的是将所有排列与单词进行比较并返回匹配。在指定时间内查找排列的所有匹配
import os, itertools
def parsed(choices):
mySet = set()
location = os.getcwd()
for item in choices:
filename = location + "\\dicts\\%s.txt" % (item)
mySet.update(open(filename).read().splitlines())
return mySet
def permutations(input):
possibilities = []
pospos = []
for x in range(3,9):
pospos.append([''.join(i) for i in itertools.permutations(input, x)])
for pos in pospos:
for i in pos:
possibilities.append(i)
return possibilities
有问题的功能是这一个:
def return_matches():
matches = []
words = parsed(['s','m','o','k','e', 'j', 'a', 'c', 'k'])
pos = permutations(['s','m','o','k','e', 'j', 'a', 'c', 'k'])
for item in pos:
if item in words:
matches.append(item)
return matches
此代码应返回:
matches = ['a', 'om', 'ja', 'jo', ..., 'jacks', 'cokes', 'kecks', 'jokes', 'cakes', 'smoke', 'comes', 'makes', 'cameos']
如果我得到这个代码能够正常工作,它需要10 - 15分钟才能完成。另一方面,每次尝试在指定的时间内执行该操作,只能使用5个或更少的字符或返回错误的结果。
所以我的问题是如何优化此代码返回正确的结果,在30秒的时间内。
编辑 http://www.mso.anu.edu.au/~ralph/OPTED/v003这是我抓取字典文件的网站。
你是什么意思“我有这个代码,因为它应该工作,但是......它要么需要10-15分钟,或不返回正确的结果“?如果它按原样工作,它怎么能不能返回正确的结果? –
我的意思是返回正确的结果,但它需要很长的时间(10 - 15分钟),或者它不起作用。我会编辑这一点。我为我的措辞道歉。 – Notgivinit
我假设您已经使用www.mso.anu.edu.au中的这些文件构建自己的单词列表文件,剥离定义并在每行放置一个单词。我建议使用我在前一个问题的评论中链接的SOWPODS文件。然而,它是一个拼字游戏单词列表,所以它不包含一个字母单词,所以你需要用这些单词初始化你的单词集,例如'set('AI')。 –