Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 获取范围的空部分的算法_Java_Performance_Algorithm - Fatal编程技术网

Java 获取范围的空部分的算法

Java 获取范围的空部分的算法,java,performance,algorithm,Java,Performance,Algorithm,我的范围是1013到20798654。我有一个队列的范围,我正在努力通过我的方式。我想要的是一组范围,它们构成了队列中的范围无法覆盖的空间。例如,如果我在[10171100]和[10000001500000]中有两个新范围,那么我需要一组类似于[10131017]、[11001000000]、[15000020798654]的范围 有人知道这样做的有效方法吗?主要范围在60亿宽的区域内,我们有大约1.7亿个范围在排队。就是这样的事情:首先对你的范围进行排序,然后对它们进行迭代-每个范围的开始将是

我的范围是1013到20798654。我有一个队列的范围,我正在努力通过我的方式。我想要的是一组范围,它们构成了队列中的范围无法覆盖的空间。例如,如果我在[10171100]和[10000001500000]中有两个新范围,那么我需要一组类似于[10131017]、[11001000000]、[15000020798654]的范围


有人知道这样做的有效方法吗?主要范围在60亿宽的区域内,我们有大约1.7亿个范围在排队。

就是这样的事情:首先对你的范围进行排序,然后对它们进行迭代-每个范围的开始将是间隙的结束,反之亦然。我尝试过对范围进行排序,但这确实有效,但当我有这么多范围时,这是非常昂贵的。您希望在输出中有多少间隔?既然你知道你的范围,你可以用另一种方式来接近它:从整个范围开始,作为空间隔(
[06bn]
),然后一个接一个地“剪掉”其他间隔。您的结果按定义排序,因此您可以在那里进行二进制搜索。我猜这是在
O(n log k)
中运行的,其中
k
是空间隔的数量(在整个算法中,不一定在最后)。顺便问一下,如果
k,写出十亿和百万真的有那么多工作吗?至少,我是这样理解Bn和m的,但也许你指的是兔子和老鼠。