繁体   English   中英

用于查找范围重叠的内存效率更高的算法

[英]More memory efficient algorithm for finding overlap in ranges

问题中,答案包括一种算法,用于查找给定范围上的范围列表的重叠。 但是在我的情况下,我有一个由n整数组成的列表,将它们分组为n^2对时会形成范围。 例如,如果我们从整数数组中获取array[i]array[j] ,则(array[i]-array[j],array[i]+array[j])构成一个范围。 但是为了实现建议的算法,解决方案是O(n^2)存储复杂度。 是否可以进一步优化(在内存方面)?

例子:我有一个更大的范围(l,r) ,我必须找出(l,r)中至少有一个范围列表中有多少个整数,例如,给定的整数数组是{1,2,3} 因此所有可能的范围是(2-1,1+2), (3-1,1+3), (3-2,3+2) 假设(l,r)(2,7) 然后,由于(2,5)至少存在于其中4中,因此答案为。

首先对数组进行排序(如果尚未排序)。 然后注意,唯一值得考虑的范围是j == i-1

要了解为什么考虑以下数组:

{2,3,5,8}

那么可能的范围是:

i=3 j=2 ==> (8-5,8+5) = (3,13)
i=3 j=1 ==> (8-3,8+3) = (5,11)
i=3 j=0 ==> (8-2,8+2) = (6,10)

i=2 j=1 ==> (5-3,5+3) = (2,8)
i=2 j=0 ==> (5-2,5+2) = (3,7)

i=1 j=0 ==> (3-2,3+2) = (1,5)

请注意, j < i-1的范围始终是j == i-1的范围的严格子集,因此不需要考虑这些范围。 因此,您只需要考虑O(n)范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM