我正在为学校做一个简单的 python 项目,其中涉及用户试图在 30 秒内从 9 个字母的随机池中找到他们能找到的最长的真实单词。测试用户的答案是否是一个真实的单词是很容易的,通过循环浏览一个包含许多英语单词的文件(它有 114,000 个单词,可能不包括所有单词)。事实上,这需要一秒钟才能运行。
但是,为了检查随机字母池是否有完整的“解决方案”(9 个字母的真实单词),除了针对 9 个字母的单词池的每个排列进行测试之外,我想不出其他任何事情文件中的每一个字。问题是,这确实效率低下,大约需要 7 分钟。毕竟,考虑到有9个!字谜的(阶乘)排列,并且“随机”模块不排除以前的排列,并且文件中有很多单词,计算机必须通过超过 500 亿次比较。在它的末尾,没有找到这个词(使用“幸福”的字谜)。这是我试过的代码:
# python 3.5.2
import random
anagram = ['p','s','h','a','i','s','n','p','e'] # anagram of hapiness
with open('wordlist.txt') as in_file:
for line in in_file:
line = line.rstrip()
shuffledList = random.sample(anagram, len(anagram)) # randomise order
shuffledWord = ''.join(shuffledList) # make it a string
if shuffledWord == line:
print("YES") # (never happens)
break
除了实际产生解决方案的代码之外,我正在寻找某种巧妙的算法解决方案/线程技术/绝对可以在 30 秒或更短的时间内找到 9 个字母字谜的原始单词的任何东西。这看起来真的很牵强,但我认为值得一试。有什么建议么?
这是带有字谜的小提示:对它们进行排序后,它们是相同的列表。你可以尝试这样的事情:
>>> def is_anagram(word_one, word_two):
... return sorted(word_one) == sorted(word_two)
...
>>> print(is_anagram('ranagam', 'anagram'))
True
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句