首页 新闻 会员 周边 捐助

关于数据分组算法求助

0
悬赏园豆:20 [待解决问题]

假设有一个长度为N长度的数组,值是任意自然数,可能存在重复

现在要求把这个数组进行分组,使每组的和都等于M,当取不到等于M的时候,取接近M(取绝对值),不可重复分配.

分配的数组长度可能一不一样,

如下面的例子

要分配的数组 {1,2,2,3,4,5,5,6,6,7,8}

分成每组的和为10

结果{8,2},{7.3},{6,4}{5,5},{6,2,1} 这样可以

{1,2,7},{2,8},{4,6},{5,5},{6.3} 这样也可以

当然有的时候组合有很多种, 取一种就可以了

Peter.gao的主页 Peter.gao | 初学一级 | 园豆:65
提问于:2015-04-17 11:04
< >
分享
所有回答(1)
0

1、先进行合计

2、合计数除以M,得到分组数K。

3、对数组进行排序。

4、从大数开始取,然后找到一个数字加起来最接近M的。

5、如果只是接近,继续找看能否还有数字加起来能等于M的。

6、等于跳出,找不到这一组也算结束了。

(4、5、6这边还要再仔细考虑一下,这样可能出现不是最优结果)

 

其他就好办了。

 

还有另外一种思路,

4、从大数开始,往K个盒子里面扔数字,一次只扔一个。

5、逐个检查盒子合计数,再来第二轮

6、直到所有数字扔完。

 

因为可能出现不完全相等的结果,我估计这个题目呢不要求最优解。

只要求计算速度或是解题思路。

爱编程的大叔 | 园豆:30844 (高人七级) | 2015-04-17 11:13

我的解题思路,

1.排序

2.从最大数max开始取,然后M-max=R,

3.如果R<=0,当前数就是一组,进入下一个max的组合筛选.

4.如果R>0,取剩余数字<=R的部分,如果没有,直接跳出.找到再次排序,取最大数max1,

5.如果max+max1=M,组合完毕,跳出.如果max+max1<M 进入第4步继续往下找.

6,上面的一轮筛选后,可组合的数字已经都找出来组合了,剩余的数字都是没法组合的了

7.剩余数组重复2 3 4 5 ,因为不会有等于M的组合了, 所以第4步的时候没有找到的时候就直接是一个组合了

这样虽然也分组了 ,但是在没法组合的数字里,最后都是求的小于接近M值, 没有大于接近M值得数组.

求高人指点,思路是否正确, 有没有办法求到接近M绝对值的组合的方法.

还有,我这种方式是先取可以组合的, 在取剩余的, 有没有更好的方式.

 

 

还有我的这个解题思路是否正确!

支持(0) 反对(0) Peter.gao | 园豆:65 (初学一级) | 2015-04-18 16:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册