我试图找到有效的算法来解决以下问题。 给出1..N中的一系列数字,以及一些任意数字K和M,找到给定范围内的所有可能的排列。其中K表示元素的数量,M表示元素之间的最小距离。
让我们看看这个例子:
array = 1,2,3,4,5,6,7,8
K = 2
M = 2
所以输出将是
(3,5)
(3,6)
(4,6)
所以你可以看到如果K和M越来越大,复杂性会增加。
干杯。
答案 0 :(得分:0)
此问题等同于从具有k
元素的集合中查找大小为n - (k-1)*(m-1)
的子集(组合)。这些数量为(n - (k-1)*(m-1) choose k)
。
在原始问题中,当选择第一个元素时,例如2,因为距离限制而不能成为结果集的一部分,而不是m-1
个元素。这适用于除最大结果之外的所有结果元素。
因此,对于n - (k-1)*(m-1)
的组合,(c_0, c_1, ..., c_{k-1})
原始问题中的相应组合为(c_i + i*(k-1), i=0, ..., k-1)
。