Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 获取文本流中的唯一单词_Algorithm_Space Complexity - Fatal编程技术网

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

Algorithm 获取文本流中的唯一单词,algorithm,space-complexity,Algorithm,Space Complexity,在给定的实例中,我们可以在文本流中找到唯一的单词。 我能想到的一个简单的解决方案是使用hashmap来统计单词 但这需要在hashmap中保留字数大于1的单词。在长文本流的情况下,需要维护的单词会很多。有没有办法解决这个问题的空间复杂度。如果不支付空间复杂度,就无法准确地获得不同单词的数量。但是,您可以通过使用本手册幻灯片20中所述的方法获得一个相当好的估计值 假设数据流由从一组大小N中选择的元素组成,您可以从上面链接的幻灯片中复制以下步骤 选择一个哈希函数h,该函数将每个N元素映射到至少log

在给定的实例中,我们可以在文本流中找到唯一的单词。 我能想到的一个简单的解决方案是使用hashmap来统计单词


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

如果不支付空间复杂度,就无法准确地获得不同单词的数量。但是,您可以通过使用本手册幻灯片20中所述的方法获得一个相当好的估计值

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

  • 选择一个哈希函数
    h
    ,该函数将每个
    N
    元素映射到至少
    log_2(N)
  • 对于每个流元素
    a
    ,让
    r(a)
    h(a)
    中的尾随
    0
  • 记录R=看到的最大值
    R(a)

  • 不同元素的估计数量=
    2^R


  • 当计数大于1时,为什么不从哈希映射中删除这些单词?如果任何单词出现奇数次,这将不起作用。例如,如果一个单词出现3次,首先我们将它添加到Hashmap,其次我们将删除它。对于第三次出现,我们将不知道这个词是以前出现过,还是被删除了,或者是它的第一次出现。这就是我的想法,但是提出这样一个散列函数是一个挑战。在误差百分比很小的情况下,即允许碰撞,我们可以实现这一点。