java - Java 结构,能够确定同时更新的有序集中小于 x 的近似元素数量
问题描述
假设U是一个有序的元素集,S ⊆ U和x ∈ U。S正在同时更新。我想估计S中在 O(log(| S |) 时间内 小于x的元素数量。
S is being maintained by another software component that I cannot change. However, whenever e is inserted (or deleted) into S I get a message e inserted (deleted)
. I don't want to maintain my own version of S since memory is limited. I am looking for a structure, ES, (perhaps using O(log(|S|) space) where I can get a reasonable estimate of the number of elements less than any give x. Assume that the entire set S can periodically be sampled to recreate or update ES.
更新:我认为这个问题陈述必须包含更具体的U值。一个明显的情况是U是数字(int、double 等)。另一种情况是U是按字典顺序排列的字符串。
在数字的情况下,可以使用概率分布(但如何确定呢?)。
我想知道是否可以定期扫描集合S。将整个集合放入一个数组并排序。然后在 n/log(n), 2n/log(n) ... n 处选择 log(n) 值,其中 n = | 小号|。然后根据这些值绘制直方图?
更一般地说,如何从S中找到适当的概率分布?
不确定按字典顺序排列的字符串的度量单位是什么?
解决方案
通过concurrently,我假设您的意思是线程安全的。在那种情况下,我相信您正在寻找的是 a ConcurrentSkipListSet
,它本质上是一个 concurrent TreeSet
。您可以使用ConcurrentSkipListSet#headSet.size()
orConcurrentSkipListSet#tailSet.size()
获取大于/小于(或等于)单个元素的元素数量,您可以在其中传入 custom Comparator
。
推荐阅读
- python - 如何计算两个日期之间的差异,动态拆分它们?Python
- javascript - 角 10 | 打字稿 | 在更改事件中分配的变量未定义
- android - 我如何使用 android nav 组件解决片段中的错误
- javascript - NodeJS - 如何将脚本节点插入 HTML 文档的开头?
- r - 如何在 R 中对另一个数据框的日期重新采样数据
- google-analytics - 为什么 GA 不从搜索广告中读取“中等”UTM 参数?
- r - 空白列以宽格式分隔两个变量
- r - 在 DFM 中仅保留每个唯一标签的最高频率项
- mongodb - MongoDb 聚合查询:为每个数组计算嵌套对象的属性数
- javascript - 在查询中使用正斜杠