【发布时间】:2017-05-06 17:24:53
【问题描述】:
我有一个字母序列,不一定是一个单词。我还有一个包含大约 6000 个单词的文件。我必须决定字母序列的任何重新排列是否会在文件中生成一个单词。
最快/最佳的方法是什么?如果我无法将整个文件加载到内存中怎么办?如果我可以呢?
我想到了一个 O(N^2) 的解决方案。当然,匹配单个单词不会像单词数量那么大。但无论如何,它可以称为 O(n^2),不是吗?从文件中读取每一行并检查给定的序列和行的长度是否相等。如果是,则计算每个字符的出现次数并匹配它们。
matched_words = []
with open('words.txt') as file:
for line in file:
if len(line.strip()) == len(letters) and
Counter(line.strip()) == Counter(letters):
matched_words.append(line.strip())
return matched_words
这可行,但有更好的解决方案吗?
【问题讨论】:
-
你真的不能把 6000 个单词加载到内存中吗?另请注意,要查找字谜,您可以使用排序,例如
sorted('dog') == sorted('god'). -
这是一次性的,还是您打算在明年多次这样做?月?天?毫秒?另外,会有什么变化?是字母序列,还是包含大量单词的文件?正如@jonsharpe 所说,您可以对所有单词进行排序。
-
这里的
Counter是什么? -
@jonrsharpe 是的,我可以加载整个文件。但如果我不能呢?我正在寻找相对的优点和缺点。如果是字谜,它仍然至少是 nlog(n) 对吗?所以对于字典中的 n 个单词,n * nlog(n) 仍然是 O(n^2)。我对么? @quamrana 我不明白你的问题。抱歉@JacobIRR Counter 是收藏库中的一个函数
-
好吧,如果?你为什么不解决你实际遇到的问题,而不是试图为别人寻找解决方案?
标签: python string file dictionary permutation