我正在寻找可以生成测试数据的算法(可能是近似算法)。
我们有一个大的整数间隔[0, n)
,n
可能高达10 ^ 9。我们想要生成每个长度为k
的多个较小的间隔(可能是重叠的),所有这些间隔都适合在这个较大的间隔内,并且还满足以下属性:
n
所覆盖的“单元格”的数量必须等于density
(<= 1.0)overlapping
(> = 1.0)个间隔覆盖。例如。 overlay_factor = 1.0的退化情况意味着没有两个区间相交。同时实现(1)和(2)使得此问题变得困难。该算法应产生一个间隔位置数组。
下面的图片演示了n = 20,k = 4,密度= 0.5,重叠= 1.6的一种解决方案:
◼◼◼◼
◼◼◼◼
◼◼◼◼ ◼◼◼◼
↓↓↓
◻◻◻◼◼◼◼◼◼◻◻◻◼◼◼◼◻◻◻◻
0 19
density = 10/20 = 0.5
overlapping = 4*4/10 = 1.6
现实中的应用将以更大的值出现:n≤10 ^ 9,k∈[1 .. 10 ^ 6],密度∈[0.01 .. 1.0],重叠ε[1.0..5.0]。
由于该算法旨在生成测试数据,因此近似解就可以了。