【发布时间】:2011-03-29 09:18:35
【问题描述】:
我在一个数组中有许多项目,每个项目都与特定的权重相关联。有一条商业规则说,没有两个相邻项目的总重量不能超过某个值,为简单起见,假设为 100。
例如,以下是可以的:
[40,60,40,50]
但不是这个(因为 50+60 = 110)
[50,60,40]
我正在尝试实现一种算法,该算法将重新排列项目(如果可能),以便满足业务规则。例如,第二个可以重新排列为 [60,40,50] 或 [50,40,60]
该算法还应该尽量减少移动项目的数量,即上面的第一个解决方案是最合适的,因为“子排列”[60,40] 被保持。
我不是在寻找完整的答案或代码示例,但如果有人能为此目的指出一些算法或算法类别,我会很高兴。依靠现有的和经过验证的算法比依靠一些自制的东西感觉要好得多。
注意:实际上,项目的数量非常多,因此测试所有不同的排列不是一种选择。
【问题讨论】: