我正在編寫一個需要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')。 –