在文本流中获取唯一的单词

时间:2014-05-14 01:30:49

标签: algorithm space-complexity

在给定的实例中,我们可以在文本流中找到唯一的单词。 我能想到的一个天真的解决方案是使用hashmap来保持单词数量。

但这需要在hashmap中保留字数超过1的单词。在长文本流的情况下,维护很多单词。有没有办法解决空间复杂性问题。

1 个答案:

答案 0 :(得分:0)

如果不支付空间复杂度,您无法获得不同单词完全的数量。但是,您可以使用此Flajolet-Martin的幻灯片20中所述的slide deck方法获得相当不错的估算值。

假设数据流由从一组大小N中选择的元素组成,您可以执行以下步骤,从上面链接的幻灯片中复制。

  1. 选择一个散列函数h,将每个N元素映射到至少log_2 (N)位。
  2. 对于每个流元素a,让r(a)0中的h(a)结尾数。
  3. 记录R =看到的最大r(a)

  4. 估算的不同元素数量= 2^R