algorithm - 集交集基数的快速近似算法

标签 algorithm indexing data-structures hash language-agnostic

我有一个池集(池大小为 n),所有集都不适合 RAM。我只能适应一小部分,比如所有集合的 1-5% 到 RAM 中。

问题是给定查询集 Q 我需要返回与 Q 相交的最大基数的前 k 个集。

  1. 假设 Q 来自同一个集合池。
  2. 对于一般问题。

k很小,以百为单位,而n以亿为单位。所有集合中的区域元素总数也以数亿计。

  • 有很多概率数据结构,KMV,MinHash,它是 变体,我应该使用哪一个?
  • 我可以修改 HyperLogLog 吗? 任务?
  • 哪些结构可以组装成某种索引?

我做了一些将集合表示为布隆过滤器的实验。因为集合大小变化很大,所以我必须使用非常大的 bloomfilters,这是低效的(bloomfiltes 占用原始数据集的 5 倍空间)。来自 https://github.com/jaybaird/python-bloomfilter 的自适应 bloomfiter仅对数据集产生 3-5 倍的压缩,因此这仍然非常不可行。

最佳答案

K-Minimum Values数据结构的内存效率极高。与布隆过滤器不同,它不提供成员资格测试,仅提供集合论运算和基数估计。

可能适合您,具体取决于您的集合的基数和您的容错能力。

关于algorithm - 集交集基数的快速近似算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37629899/

相关文章:

python - 匹配并索引所有子字符串,包括重叠的子字符串

postgresql - PostGIS,索引相交生成的地理

algorithm - 了解通用深度优先树搜索的维基百科代码?

php - 保存动态规划状态的算法

algorithm - 请建议一个开放数据的图表

algorithm - 加权图和所有对路径

java - 如何用矩阵中的最小和计算从 [0,0] 到 [M, N] 的路径?

python - Pandas pivot_table,按列对值进行排序

java - Java中哪种Map数据结构可以最有效地获取最高元素?

数组作为单独的类型