C-位集向量和bloom过滤器之间的差异

C-位集向量和bloom过滤器之间的差异,c,bitset,C,Bitset,所以我知道比特集向量基本上可以在每个比特中为您存储真/假集,但是我不清楚这与bloom过滤器之间的区别,我知道bloom过滤器使用散列函数,并且可以返回误报,然而,它们可以存储的数据类型/可以执行的功能之间的实际区别是什么?位集向量只是一个包含任意数量位的大字段,可以使用其索引单独设置 bloom过滤器是一种集合(不包含数据本身),允许快速确定集合中是否包含元素。它建立在某种位集向量之上,在插入元素或读取元素时将后者的若干位设置为1,以检查元素是否包含(而不允许您直接访问其底层位集向量)。位集向

所以我知道比特集向量基本上可以在每个比特中为您存储真/假集,但是我不清楚这与bloom过滤器之间的区别,我知道bloom过滤器使用散列函数,并且可以返回误报,然而,它们可以存储的数据类型/可以执行的功能之间的实际区别是什么?

位集向量只是一个包含任意数量位的大字段,可以使用其索引单独设置


bloom过滤器是一种集合(不包含数据本身),允许快速确定集合中是否包含元素。它建立在某种位集向量之上,在插入元素或读取元素时将后者的若干位设置为1,以检查元素是否包含(而不允许您直接访问其底层位集向量)。

位集向量只是一个包含任意数量位的大字段,可以单独设置,使用他们的索引


bloom过滤器是一种集合(不包含数据本身),允许快速确定集合中是否包含元素。它构建在某种位集向量之上,在插入元素或读取元素时将后者的若干位设置为1,以检查元素是否包含(而不允许您直接访问其底层位集向量)。

可以使用位集实现bloom过滤器,但是不能使用bloom筛选器实现位集。

可以使用位集实现bloom筛选器,但不能使用bloom筛选器实现位集。

(我知道这是一篇旧文章,但无论如何都要为将来的读者发布。)

将位集视为布尔数组的无损压缩 假设必须在集合中存储32个布尔值。 你的直觉是使用一个数组或布尔值列表 假设该数组中的每个项都需要一个字节的空间,那么该数组加起来就是32个字节 但是你看,每一项都是一个字节,所以它是8位。 虽然只有1位就足以表示真或假,但您使用的是8位。 因为有32个字节,我们最终使用32*8=256位。 然后问题出现了,“为什么我们不使用一个32位数字来存储与这32项对应的每一位中的1或0?” 这只不过是一个位集——您将只使用32位而不是256位来存储相同的信息。在这里,您可以通过检查相应的位位置来判断项目是否存在。这种存储在任何地方都有帮助,特别是在嵌入式系统中的内存密集型代码、每秒进行大量图形/数学运算的高端游戏以及机器学习中的特定应用中

将Bloom filter视为布尔数组的有损压缩或位集的有损压缩,具体取决于要使用的底层数据结构。 在这里,它是有损的,因为你永远不可能知道一个给定的项目是否存在,但你可以肯定地说,如果它不存在! 它使用哈希函数将给定输入的比特集的某些比特设置为1。对于其他输入,将设置一些其他位关键是,可以为两个不同的输入设置公共位。因此,您不能说某个项是否存在,因为公共位可能基于多个项进行设置。然而,即使没有为给定的输入设置一个位,您也可以肯定地说它不存在。这就是为什么我称之为有损

希望这就是你想要的。

(我知道这是一篇老文章,但无论如何都是为未来的读者发布的。)

将位集视为布尔数组的无损压缩 假设必须在集合中存储32个布尔值。 你的直觉是使用一个数组或布尔值列表 假设该数组中的每个项都需要一个字节的空间,那么该数组加起来就是32个字节 但是你看,每一项都是一个字节,所以它是8位。 虽然只有1位就足以表示真或假,但您使用的是8位。 因为有32个字节,我们最终使用32*8=256位。 然后问题出现了,“为什么我们不使用一个32位数字来存储与这32项对应的每一位中的1或0?” 这只不过是一个位集——您将只使用32位而不是256位来存储相同的信息。在这里,您可以通过检查相应的位位置来判断项目是否存在。这种存储在任何地方都有帮助,特别是在嵌入式系统中的内存密集型代码、每秒进行大量图形/数学运算的高端游戏以及机器学习中的特定应用中

将Bloom filter视为布尔数组的有损压缩或位集的有损压缩,具体取决于要使用的底层数据结构。 在这里,它是有损的,因为你永远不可能知道一个给定的项目是否存在,但你可以肯定地说,如果它不存在! 它使用哈希函数将给定输入的比特集的某些比特设置为1。对于其他输入,将设置一些其他位关键是,可以为两个不同的输入设置公共位。因此,您不能说某个项是否存在,因为公共位可能基于多个项进行设置。然而,即使没有为给定的输入设置一个位,您也可以肯定地说它不存在。这就是为什么我称之为有损


希望这就是您要寻找的。

位集向量?听起来更像C++……@ thigyWoTSIT,我已经制作了我自己的ADT,它以比特集向量的方式工作,更深入地寻找它背后的理论:)有什么澄清吗?听起来更像C++,我…我已经做了我自己的ADT,它是以位向量D的方式工作的。