【发布时间】:2014-03-03 17:37:14
【问题描述】:
我正在寻找一种算法,该算法在所有组合的总和为 k,ka 为正的约束下,给出给定步骤 S(可以是正实数)的 n 个序列的重复排列整数。
因此,我的问题是找到方程的解:
x 1 + x 2 +⋯ + x n = k 在哪里
0 ≤ x i ≤ b i 和 S(步骤)是一个有限小数的实数。
例如,如果 0≤xi≤50,且 S=2.5,则 xi = {0, 2.5 , 5,..., 47.5, 50}。
这里的重点是仅查看 sum=k 的组合,因为如果 n 很大,则不可能生成所有排列,因此我想绕过它以仅生成与约束匹配的组合。
例如,我想从 n=2 开始,然后找到所有符合约束条件的线性组合。
例如:如果 xi = {0, 2.5 , 5,..., 47.5, 50} 并且 k=100,那么我们只有一个组合 ={50,50} 对于 n=3,我们有 n=2 乘以 3 的组合,即 {50,50,0}、{50,0,50} 和 {0,50,50} 加上组合 {50,47.5,2.5} * 3!等等……
如果 xi = {0, 2.5 , 5,..., 37.5, 40} 和 k=100,那么我们有 0 个组合用于 n=2,因为 2*40
我有点迷茫,因为我知道我应该将步骤 S 和 b 作为输入,我似乎无法找到启动算法的正确方法。
你有什么建议吗?
谢谢
【问题讨论】:
-
x_i总是 0 和x_{i+1} = x_i + S?老实说,我不太明白这个问题,也许你应该澄清一下 -
或者更好的问题是:S是什么意思?
-
为了让它不那么繁琐,我们假设 x_i 从 0 开始,实际上 x_{i+1} = x_i + S。S 是 x_i 序列中的步骤,但正如你所写的,我们确实可以得到通过将 x_i 序列除以步骤来摆脱步骤,以便只有 x_i' 是整数。如果 x_i= {0, 2.5 , 5,..., 47.5, 50} 那么 x_i'={0, 1 , 2,..., 19, 20}