在无限的文字流中找到重复的单词

时间:2011-07-07 06:16:58

标签: algorithm

你会得到无限的文字,这些文字一个接一个地出现,文字的长度可能是巨大的,不知道有多大。你如何找到新单词是否重复,你将用什么数据结构存储。这是我在采访中向我提出的问题。请帮助我验证我的答案。

3 个答案:

答案 0 :(得分:1)

通常使用哈希表来跟踪每个单词的计数。由于您只需要回答单词是否重复,您可以将字数减少为位掩码,这样您只能为每个哈希索引存储一个位。

如果问题与大数据有关,比如如何为Google编写搜索引擎,那么您的答案可能需要与MapReduce或类似的分布式技术相关(这在某种情况下与上述相同的哈希表技术相关)

答案 1 :(得分:1)

与大多数顺序数据一样,trie在这里是个不错的选择。使用trie,您可以非常经济高效地存储新单词,并且仍然可以找到新单词。试图实际上可以看作是单词的多重散列的一种形式。如果这仍然会导致问题,因为单词的大小很大,您可以通过从单词生成directed acyclic word graph(DAWG)来提高效率,以减少常见后缀和前缀。

答案 2 :(得分:0)

如果您需要做的就是有效地检测每个单词是否是您之前看到过的单词,那么Bloom过滤器是一个不错的选择。它有点像集合和散列表合二为一,因此可能导致误报 - 因此,它们有时会适应使用其他技术来降低风险。 Bloom过滤器的优势在于它们非常节省空间(如果您真的不知道列表的大小,则很重要)。它们也很快。在缺点方面,你无法再说出来,你只能知道你是否看过它们。

有一个很好的描述:http://en.wikipedia.org/wiki/Bloom_filter