Algorithm flajolet martin素描是如何工作的?

Algorithm flajolet martin素描是如何工作的?,algorithm,data-structures,flajolet-martin,cardinality-estimation,Algorithm,Data Structures,Flajolet Martin,Cardinality Estimation,我试图理解这张草图,但无法理解。 如果我错了,请纠正我,但基本上,假设我有一个文本数据。。话。。我有一个散列函数。。它取一个单词,创建一个整数散列,然后我把这个散列转换成二进制位向量??正确的。。 然后我记录了我从左边看到的第一个1。。1的位置是(比如说,k)。。。这个集合的基数是2^k 但是。。。说我只有一个字。它的散列函数是这样的,它生成的散列是2^5,那么我猜后面有5(??)个0??那么它将预测2^5(??)基数? 听起来不对吗?对于一个单词,我遗漏了什么?R的分布是一个p=1/2的几何

我试图理解这张草图,但无法理解。 如果我错了,请纠正我,但基本上,假设我有一个文本数据。。话。。我有一个散列函数。。它取一个单词,创建一个整数散列,然后我把这个散列转换成二进制位向量??正确的。。 然后我记录了我从左边看到的第一个1。。1的位置是(比如说,k)。。。这个集合的基数是2^k

但是。。。说我只有一个字。它的散列函数是这样的,它生成的散列是2^5,那么我猜后面有5(??)个0??那么它将预测2^5(??)基数?
听起来不对吗?对于一个单词,我遗漏了什么?R的分布是一个p=1/2的几何分布,其标准偏差是sqrt(2)≈ 1.41


因此,对于散列结尾为100000b的单词,该算法将产生25/0.77351=41.37。但概率仅为1/64,这与R的标准偏差接近1的说法一致。

对于单个单词,R的分布是p=1/2的几何分布,其标准偏差为sqrt(2)≈ 1.41

因此,对于散列结尾为100000b的单词,该算法将产生25/0.77351=41.37。但这种可能性只有1/64,这与R的标准偏差接近1的说法是一致的。

我们有一个很好的随机散列函数,作用于字符串和生成的整数,对于生成的整数我们能说些什么?由于它们本身是随机的,我们希望:

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。

我们有一个很好的随机散列函数,作用于字符串和生成的整数,对于生成的整数我们能说些什么?由于它们本身是随机的,我们希望:

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。

需要记住的是,Flajolet-Martin算法意味着从一组N个元素中计算不同的元素(比如m个不同的元素),当M预计非常大时

如果N或M足够小,我们可以在内存中存储所有不同的元素,那么使用该算法是没有意义的

在N和M非常大的情况下,估计值接近2^k的概率实际上是非常合理的


关于这一点的解释如下:(第143页)

需要记住的是,Flajolet-Martin算法意味着从一组N个元素中计算不同的元素(比如M个不同的元素),而M预计非常大

如果N或M足够小,我们可以在内存中存储所有不同的元素,那么使用该算法是没有意义的

在N和M非常大的情况下,估计值接近2^k的概率实际上是非常合理的

对此的解释见:(第143页)