【发布时间】:2012-09-21 06:41:32
【问题描述】:
我遇到了一个问题,我们必须在 TB 的文件或字符串中找到说最频繁的 10 个单词。
我能想到的一个解决方案是使用哈希表(单词、计数)和最大堆。但是,如果单词是唯一的,则拟合所有单词可能会导致问题。 我想到了另一种使用 Map-Reduce 的解决方案,方法是将块拆分到不同的节点上。 另一种解决方案是为所有单词构建一个 Trie,并在我们扫描文件或字符串时更新每个单词的计数。
以上哪一项是更好的解决方案?我认为第一个解决方案非常幼稚。
【问题讨论】:
-
您是否总是需要最佳答案,或者您对某种启发式算法感兴趣?
-
其实我正在寻找一种尽可能降低时间和空间复杂度的最佳算法。并考虑到无法在内存中读取整个数据。
-
所提到的问题有很多 - 所以有各种各样的答案,包括:(1)如果是面试,如何回答的扩展讨论,(2)很好的问题分析,(3 ) map-reduce 解决方案,(4) 映射解决方案 (5) 基于 SQL 的解决方案,等等。