给定'n','m','k','x'和'y'整数值...
我有一个带有'n'位置的数字ArrayList,我需要使用第一个数组中的值和'm'位置创建'k'其他数组。我怎样才能确保数字之和为'x',最大误差范围为'y',并且数组之间尽可能不同?
我将在测试生成器中使用它来随机化问题。这些数字代表了难题。当我尝试这样做时,我随机化情况并检查它们是否正确,但这很慢。有人知道更好的方法吗?
答案 0 :(得分:1)
根据您的描述,它听起来像离散背包问题的变体。基本上你搜索修改DKP的几个解决方案 - 如果有更多的k它们你可以删除其他的,如果更少 - 你可以置换你获得的那些以产生更多。
天真的实现将是从n = x-y到x + y搜索DKP的解,然后如上所述处理它们,但它可能非常慢。您可以在数学堆栈交换中获得一些更好的解决方案。
答案 1 :(得分:0)
您有一些不到n! / (m! . (n-m)!)
个可接受的解决方案,其中可以选择最不同的解决方案。
可能的候选解决方案遵循偏离y的最佳平方成本。
对于固定数量的可能解决方案,选择最终解决方案 与先前接受的最终解决方案的差异很小:相同条目的难度总和。 (这只是局部最优,但应该这样做。)
在降低难度时对n#列表进行排序。
主要为n! / (m! . (n-m)!)
迭代m#子列表。
根据允许的范围更改候选人:跳过/失败超出范围。
答案 2 :(得分:0)