Algorithm 将值平均分组
让我尽力解释一下情况 假设我有3个值Algorithm 将值平均分组,algorithm,sorting,Algorithm,Sorting,让我尽力解释一下情况 假设我有3个值 1, 2, 3 我告诉一个算法把这些值分成x列。让我们假设x=2进行澄清 该算法确定值组最好按以下方式放入两列 1st column 2nd column --------------------------- 1 3 2 每列都有一个偶数(总计,而不是文字)值 现在让我们假设我有以下值 7, 8, 3, 1, 4 我告诉算法我想把值分成3列。算法现在告诉我以下是最合适的 1st column 2nd column
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
请注意,这些列甚至都不安静,但它已经尽可能接近了。只要列表尽可能接近,稍微过一点和稍微过一点就可以了
有人有什么建议吗?知道做这件事的好方法吗?如果你想要完全相同的值,那么对于列数x=2,这是一个经典的方法,它是NP完全的,但有伪多项式解 如果有更多的列(即x>2),它将变成强NP完全 对于x>3,我怀疑它仍然是强NP完全的 由于x分区问题可以简化为您的问题,因此它将与上述问题一样困难
您可能需要一些启发式方法来帮助您。我会这样做:
- 加上所有的值,我们称之为s
- 将S除以列数,我们称之为M
- 使用背包算法(例如,在背包上快速搜索),找到一组总和为M或尽可能接近M的值
- 取这组值的和,从S中减去,我们称之为T
- 将T除以列数减1
- 然后重复算法
这并不总是为您提供最佳解决方案这是一个很好的启发式解决方案,可以避免使用任何调优参数,并且非常容易编程。在迭代较小的元素子集上使用背包会带来风险,我们会将许多较大的元素保留到最后,而且实现起来似乎很痛苦。这似乎更加稳健。