【发布时间】:2016-12-16 13:07:56
【问题描述】:
我正在用 C# 制作一个复杂的算法,其中一个步骤是比较 2 个非常大的范围列表并找出重叠区域。我已经尝试了很多方法来找到它们,但我不确定我是否涵盖了所有可能性。此外,我在这一步的算法对于庞大的列表花费的时间太长。
示例:
范围 1 = 1-400
范围 2 = 200-600
所以当我想检查这两个范围之间的重叠时,我应该得到答案 = 200。
因为这两个范围之间共有 200 个数字重叠。所以这就是我想要的答案,我想要两个范围之间重叠的整数的确切数量。
列表示例:
List1 : 1-400, 401-800, 801-1200 等等...
List2 : 10240-10276, 10420 10456, 11646-11682 等等...
现在我必须将 list1 的每个范围与 list2 的每个范围进行比较,并找出 list1 的某个范围是否与 list2 的任何范围重叠,如果是,那么重叠的答案是什么?这些只是用于理解的示例值。
我只需要一个简单且最有效/快速的公式即可找出 2 个范围之间的重叠答案。我可以管理循环算法的其余部分。
示例公式:
var OverlappingValue = FindOverlapping(range1.StartValue, range1.EndValue,range2.StartValue, range2.EndValue);
如果两个范围完全不重叠,则函数必须返回 0。
PS:我没有发布我的代码,因为它真的很复杂,有很多条件,我只需要一个简单的公式。
【问题讨论】:
-
你能做到400-200吗?
-
如果 range2.start
-
@OscarSiauw 您还必须检查 range1.start 是在 range2.end 之前还是之后,以及 range2.end 是在 range1.end 之前还是之后。
-
200 到 400 之间有 201 个整数而不是 200(或者你需要解释边界是如何包含/排除的)
-
Merge Overlapping Intervals 算法可以提供一些线索。
标签: c# range .net-core intersection