我试图理解这个草图,但我无法理解。 纠正我,如果我错了,但基本上,让我说我有一个文本数据..单词..我有一个哈希函数..它需要一个单词并创建一个整数哈希然后我将该哈希转换为二进制位向量?对.. 然后我保留了从左边看到的第一个1的轨迹..那个1的位置(比方说,k)......这个集合的基数是2 ^ k?
http://ravi-bhide.blogspot.com/2011/04/flajolet-martin-algorithm.html
但是......说我只有一个字。并且它的哈希函数是这样的,它产生的哈希是2 ^ 5,那么我猜测有5(??)尾随0?所以它会预测2 ^ 5(??)的基数? 听起来不对吗?我缺少什么
答案 0 :(得分:3)
对于单个单词,R的分布是几何分布,p = 1/2,其标准差为sqrt(2)≈1.41。
因此,对于散列以100000 b 结尾的单词,算法确实会产生2 5 /0.77351 = 41.37。但其概率仅为1/64,这与R的标准差接近1的说法一致。
答案 1 :(得分:1)
http://ravi-bhide.blogspot.com/2011/04/flajolet-martin-algorithm.html
我们有一个很好的随机散列函数,它对字符串和生成的整数起作用,我们可以对生成的整数说些什么呢?由于它们本身就是随机的,我们期望:
1/2 of them to have their binary representation end in 0(i.e. divisible by 2),
1/4 of them to have their binary representation end in 00 (i.e. divisible by 4)
1/8 of them to have their binary representation end in 000 (i.e. divisible by 8)
解决问题,如果哈希函数生成一个以0 ^ m位结尾的整数...直观地说,唯一字符串的数量大约是2 ^ m。
答案 2 :(得分:1)
真正重要的是要记住,Flajolet Martin算法用于计算来自一组N个元素的不同元素(比如M个不同的元素),当M预计非常大。
如果N或M足够小,我们可以将所有不同的元素存储在内存中,那么使用该算法是没有意义的。
在N和M非常大的情况下,估计接近2 ^ k的概率实际上是非常合理的。
有关此问题的解释:http://infolab.stanford.edu/~ullman/mmds/ch4.pdf(第143页)