问题标签 [probabilistic-ds]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
data-structures - count-min 草图是否比典型的稀疏矢量格式占用更少的空间?
count-min 草图是一种概率数据结构,用于在多集中有损存储计数。它接收更新(i, c)
wherei
是集合的一个元素并且是该元素的c
非负数,然后使用散列函数做一些聪明的事情。它在 SO 和其他地方被广泛讨论;这是原始论文 ( PDF ) 和Wikipedia 文章。基于我正在考虑的应用程序——来自单细胞基因组学实验的计数数据的有损存储——让我们假设i
和c
都是整数。这对i,c
意味着在给定的生物细胞中,基因i
被检测到c
多次。
我的问题是与更常用于此类数据的稀疏矩阵格式相比,count-min 草图需要多少内存。作为替代方案的一个简单示例,考虑一个哈希表——比如说,一个 Python 字典——存储每个不同的值c
和 的对应值的总和i
。如果在给定的细胞中观察到 n 个不同的基因,那么这需要 O(n) 空间。这个答案解释说,为了存储 n 个不同基因的计数,count-min 草图也需要 O(n) 空间。(基因的标识符作为字符串数组单独存储。)
我不明白为什么有人会为压缩似乎没有任何改进而引入如此多的复杂性。我也不明白这个应用程序有什么特别之处,当它对许多其他目的有用时,它会使 count-min 草图变得无用。所以:
- 对于这个应用程序,count-min 草图是否比典型的稀疏矩阵存储方案节省空间?
- 与典型的稀疏矩阵存储方案相比,count-min 草图是否有任何应用程序可以节省空间?如果是这样,与此应用程序的主要区别是什么?
mongodb - Mongodb 在文档不存在的情况下获取文档的性能
我们在 mongodb 中存储了大量数据,比如说 30M 文档。而且这些文件不会经常被修改。有大量读取查询(~15k qps)。由于我们用例的性质,其中许多查询(通过 _id 字段)将导致空搜索结果。
我想了解 mongodb 是否为检测 db、index 中是否没有文档进行了某种优化。是否有任何插件可以启用此功能?我看到的其他选择是使用应用程序级别的布隆过滤器,但这将是另一个需要维护的部分。AFAIK HBASE 支持布隆过滤器以查看文档是否存在。
bloom-filter - 可能将更改集存储在缩小的空间中?
我有一百万个 32 字节的哈希值。如果可以节省空间,则误报是可以的。
是否有 Bloom Filter 变体(或其他概率算法)可以让我不断添加和删除哈希,同时需要少于 32MB 的存储空间?
(一个用于添加的 Bloom Filter 和一个用于删除的 Bloom Filter 可以工作,但这非常浪费,因为我不需要知道已添加并随后删除的哈希。删除时的误报将意味着总的误报。)
bloom-filter - 为什么布隆过滤器没有像 count-min 草图那样实现?
所以我最近才知道这些,但据我了解,计数布隆过滤器与计数分钟草图非常相似。不同之处在于前者对所有散列函数使用单个数组,而后者对每个散列函数使用一个数组。
如果为每个散列函数使用单独的数组将导致更少的冲突并减少误报,那么为什么没有这样实现计数布隆过滤器?