首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >集合相交基数的快速近似算法

集合相交基数的快速近似算法
EN

Stack Overflow用户
提问于 2016-06-04 11:51:03
回答 4查看 1.6K关注 0票数 8

我有一个池集(大小为n),所有的集合都不适合RAM。我只能容纳一小部分,比方说,1-5%的所有设备进入RAM.

该问题是给定的查询集Q,需要返回与Q相交最大基数最大的上k集。

  1. 假设q来自相同的集合池。
  2. 对Q.

K是小的,有几百,而n在数亿。地区元素在所有集合中的总数也是数亿。

  • 有很多概率数据结构,KMV,MinHash及其变体,我应该使用哪一个?
  • 我可以为我的任务修改HyperLogLog吗?
  • 哪一种结构可以组合成某种指标?

我做了一些实验,用布卢姆滤镜来表示布卢姆。由于集合大小变化很大,我不得不使用非常大的bloomfiltes,这是低效的(bloomfiltes占用原始数据集的5倍空间)。来自https://github.com/jaybaird/python-bloomfilter的自适应bloomfiters只对数据集进行3-5倍的压缩,因此这仍然是不可行的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-07-17 11:57:38

事实上,我已经找到解决办法了。在给定的交集中,加法和最小哈希相乘,最小哈希可以有效地用LSH存储。这里有更多详细信息:http://infolab.stanford.edu/%7Eullman/mmds/ch3.pdf

票数 2
EN

Stack Overflow用户

发布于 2016-06-08 00:58:42

K-最小值数据结构具有极大的内存效率。与Bloom过滤器不同,它不提供隶属度测试,只提供集合论运算和基数估计.

可能适用于您,这取决于集合的基数和错误容忍。

票数 4
EN

Stack Overflow用户

发布于 2016-07-14 20:22:20

将所有集合保存在一个包含表单(setId, value)键的花期过滤器中。这将必须能够处理所有集合的联合大小的集合,这将使您无法将小集存储在为非常大的集设置大小的花期过滤器中。

第二,出于您的目的,您可能会接受非常大的错误率,这再次让布卢姆过滤器收缩。一个错误率为1%的布卢姆滤波器需要9.58505837736744.每个元素的位。一个10%错误率的布卢姆滤波器每个单元需要4.79252918868372位。但是,如果你有一个10%的错误率,在一个400元素集上,你可以在纠正了预期的错误后,得到一个95%的答案,在正确答案的3%范围内。这可能是可以接受的,以获得2倍的缩小过滤器大小。(Q越大,相对误差就越小。)

如果在这两种技术之间,布卢姆过滤器仍然太大,那么也许您应该考虑将数据分布在多台计算机上。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37629899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档