作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为学校做一个简单的 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
关于python - 循环遍历文件列表并针对一个 9 字母单词的每种排列测试每个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42457869/
我是一名优秀的程序员,十分优秀!