Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一种Java结构,能够在一个同时更新的有序集合中确定小于x的元素的近似数目_Java - Fatal编程技术网

一种Java结构,能够在一个同时更新的有序集合中确定小于x的元素的近似数目

一种Java结构,能够在一个同时更新的有序集合中确定小于x的元素的近似数目,java,Java,假设U是元素的有序集合,S⊆U、 和x∈ 《美国参考》正在同时更新。我想得到S中元素数量的估计值,它小于O(log(| S |)时间中的x S由另一个我无法更改的软件组件进行维护。但是,每当e插入(或删除)S时,我都会收到一条消息e inserted(deleted)。由于内存有限,我不想维护我自己版本的S。我正在寻找一个结构ES(可能使用O(log(| S |)空间)在这里,我可以得到一个合理的估计,元素的数量小于任何给定的x。假设可以周期性地对整个集合S进行采样,以重新创建或更新ES 更新:

假设U是元素的有序集合,S⊆U、 和x∈ 《美国参考》正在同时更新。我想得到S中元素数量的估计值,它小于O(log(| S |)时间中的x

S由另一个我无法更改的软件组件进行维护。但是,每当e插入(或删除)S时,我都会收到一条消息
e inserted(deleted)
。由于内存有限,我不想维护我自己版本的S。我正在寻找一个结构ES(可能使用O(log(| S |)空间)在这里,我可以得到一个合理的估计,元素的数量小于任何给定的x。假设可以周期性地对整个集合S进行采样,以重新创建或更新ES

更新:我认为这个问题陈述必须包含更多关于U的具体值。一个明显的例子是U是数字(int、double等)。另一个例子是U是按字母顺序排列的字符串

在数字的情况下,可以使用概率分布(但如何确定呢?)

我想知道是否可以定期扫描集合S。将整个集合放入一个数组中并进行排序。然后在n/log(n),2n/log(n)…n处选择log(n)值,其中n=| S |。然后根据这些值绘制直方图

更一般地说,如何从S中找到合适的概率分布

不确定按字母顺序排列的字符串的度量单位是什么?

我假设你指的是线程安全的。在这种情况下,我相信你要找的是a,它本质上是一个并发的
树集。
。你可以使用
ConcurrentSkipListSet#headSet.size()
ConcurrentSkipListSet#tailSet.size()
获取大于/小于(或等于)单个元素的元素数量,您可以在其中传入自定义的
比较器

是x常量吗?如果是这样,在插入和删除元素时跟踪小于
x
的数量似乎很容易

如果x不是常数,您仍然可以采用直方图方法。划分值可以采用的范围。在插入/删除项目时,跟踪每个范围存储桶中的项目数。当您得到查询时,将较小存储桶中的所有值相加

我接受你的观点,即bucketing是一个棘手的问题——特别是如果你对基础数据一无所知的话。你可以记录x的前100个值,然后用这些值计算平均值和标准偏差。然后你可以假设这些值是正态分布的,并以这种方式计算Bucket


显然,如果您对底层数据了解得更多,您可以使用不同的分布模型。如果您希望它是通用的,那么使用模块化方法就很容易了。

nox不是常数。我喜欢类似直方图的方法,但如果不在某个时间对集合进行采样,则划分值的范围就不是那么简单了。例如imag我知道集合是整数。你会将什么设置为最大值和最小值?在更一般的情况下,我这里说的是对象,而不是整数,那么你会为整数选择哪些对象?你可以根据看到的前100个值对桶进行统计建模?我已经更新了我的答案,以包含这个想法。一个如何计算当元素不是整数且没有距离概念时,计算平均值和标准偏差?我认为这只有在数据有一个有意义的度量单位时才有效。我很难想象一个没有单位的用例,但你希望计算x以下的数量。我想如果你提供更具体的细节会有所帮助吗?是的我认为你的评论是正确的,需要一个度量单位。我更新了我的问题。这不起作用,因为大小操作的成本是O(| S|)而不是O(log(| S|)。这可以在所有都是S小于x的情况下看到。