【发布时间】:2013-02-10 03:11:50
【问题描述】:
我有一些字母和频率计数。而且我有一个很长的单词列表(比如 100 万个)。
假设我有A-1, B-1, D-1(“最多一个A,最多一个B,最多一个D”),那么我可以发"BAD",但不能发"RAD"
我能否知道在 对数 时间内可以用这些字母组成哪些单词,或者类似的时间,而不是遍历所有单词并查看单词中每个字母的计数?
这些词可以使用什么数据结构?试试吧?我不知道他们。如果我可以用它存储每个单词所需的字母,那也很棒。请帮忙!
【问题讨论】:
-
对数是什么?您将不得不检查每个单词,因此显然您不会发现任何在单词数上是次线性的算法。
-
@ruakh 这取决于。如果您只需要设置一次单词列表但会尝试多次尝试,则可以通过进行预处理来加快查找速度。
-
不过,在最坏的情况下,我给你每个字母的 100 个,并要求你找出所有可以从这些字母中组成的单词。在这种情况下,您必须说出每个单词。
-
@Patashu 是的,我的意思是做一些预处理。而且我必须多次查询这些存储的单词。
-
您有一个包含 1000000 个单词的列表。我给你一袋字母,其中包含字母表中每个字母的 100 个。你可以用那一袋字母把你列表中的每一个单词都写出来。因此,您的算法必须输出该列表中的每个单词。你不能有一个在 O(log n) 时间内运行但产生 O(n) 输出的算法。
标签: algorithm data-structures dictionary