Java 获取范围的空部分的算法
我的范围是1013到20798654。我有一个队列的范围,我正在努力通过我的方式。我想要的是一组范围,它们构成了队列中的范围无法覆盖的空间。例如,如果我在[10171100]和[10000001500000]中有两个新范围,那么我需要一组类似于[10131017]、[11001000000]、[15000020798654]的范围Java 获取范围的空部分的算法,java,performance,algorithm,Java,Performance,Algorithm,我的范围是1013到20798654。我有一个队列的范围,我正在努力通过我的方式。我想要的是一组范围,它们构成了队列中的范围无法覆盖的空间。例如,如果我在[10171100]和[10000001500000]中有两个新范围,那么我需要一组类似于[10131017]、[11001000000]、[15000020798654]的范围 有人知道这样做的有效方法吗?主要范围在60亿宽的区域内,我们有大约1.7亿个范围在排队。就是这样的事情:首先对你的范围进行排序,然后对它们进行迭代-每个范围的开始将是
有人知道这样做的有效方法吗?主要范围在60亿宽的区域内,我们有大约1.7亿个范围在排队。就是这样的事情:首先对你的范围进行排序,然后对它们进行迭代-每个范围的开始将是间隙的结束,反之亦然。我尝试过对范围进行排序,但这确实有效,但当我有这么多范围时,这是非常昂贵的。您希望在输出中有多少间隔?既然你知道你的范围,你可以用另一种方式来接近它:从整个范围开始,作为空间隔(
[06bn]
),然后一个接一个地“剪掉”其他间隔。您的结果按定义排序,因此您可以在那里进行二进制搜索。我猜这是在O(n log k)
中运行的,其中k
是空间隔的数量(在整个算法中,不一定在最后)。顺便问一下,如果k,写出十亿和百万真的有那么多工作吗?至少,我是这样理解Bn和m的,但也许你指的是兔子和老鼠。