问题描述
我会这样做:
- 添加所有值,我们称其为S
- 用S除以列数,我们称其为M。
- 使用背包算法(例如http://search.cpan.org/~andale/Algorithm-Knapsack-0.02/lib/Algorithm/Knapsack),找到总和为M或尽可能接近M的一组值。 pm(只是背包上的快速Google)
- 取一组值的总和并从S中减去,我们称其为T。
- 用T除以列数减去1
- 并重复算法
解决方法
让我尽我所能解释情况。
可以说我有3个值
1,2,3
我告诉一种算法,将该值分成x列。为了澄清起见,假设x = 2。
该算法确定值组最好按以下方式放入两列。
1st column 2nd column
---------------------------
1 3
2
每列都有一个偶数(总数,而不是文字)值。
现在说我有以下值
7,8,3,1,4
我告诉算法我希望将值分成3列。该算法现在告诉我,以下是最合适的。
1st column 2nd column 3rd column
8 7 3
1 4
请注意,即使列也不安静,但它尽可能地接近。只要列表尽可能接近就可以了。
有人有任何建议吗?知道这样做的任何好方法吗?