找回密码
 欢迎注册
查看: 22592|回复: 7

[讨论] 搬石头

[复制链接]
发表于 2019-12-17 18:47:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
有  n 个人员,提举力分别为F1, F2, …, Fn。
有 m 块石头,重量分别为G1, G2, …, Gm。
将全体人员分为 m 组(可以有空组)来搬石头,
第 k 组合力大于等于Gk时就能搬动第 k 块石头。
如何分组,使能搬动的石头总重量达到最大?
F={1,3,6,9,13,17,20,25,29,35,37,45,49,51,67,75,82}
G={48,57,69,74,89,93,117,134,139}
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2019-12-17 20:24:10 | 显示全部楼层
开始时想到贪心算法。
将石头由大到小排序,依次配组员,使合力刚好等于或稍大于石头重量,最后剩下几人的合力,找一个刚好比其小的石头,分配完成。
尝试过程如下:
75+45+20=140>139
82+51+1=134
67+37+13=117
49+35+9=93
剩下的29+25+17+6+3=80<89,跳过
29+25+17+6=77>74.
剩余 3 没有用了,其余石头空组。
能搬动的石头总重为139+134+117+93+74=557。

这样分组,74的组冗余人力稍大,最后一组人力3白白浪费了。
假如没有74,则配29+25+17=71>69,最后一组6+3浪费更多,
而把他们编入前面的组或可抬起更大的石块。
可见贪心算法不是总能找到最优解。
有没有更好的算法?
m1.png
m2.png
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2019-12-17 21:01:21 | 显示全部楼层
找到比557更好的结果。
m3.png
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2019-12-17 22:35:29 | 显示全部楼层
本帖最后由 aimisiyou 于 2019-12-17 22:41 编辑

通过尝试法找到更好的结果560.还不知道是不是最优解。没想到随机编的一些数据,算起来还好复杂。开始时还以为数据会运算很简单,看来这组随机数据给了我意外惊喜。感觉如果能实现找到较好近优解的算法话,其算法应该很复杂。
m4.png
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-12-18 07:32:02 | 显示全部楼层
F={1,3,6,9,13,17,20,25,29,35,37,45,49,51,67,75,82}=564
先找564,次找563,562,561,560,.....
G={48,57,69,74,89,93,117,134,139}=820
G-F=256=139+117=139+69+48=134+74+48=93+89+74
即F=G-(G-F)=564是可能有的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2019-12-18 10:17:27 | 显示全部楼层
王守恩 发表于 2019-12-18 07:32
F={1,3,6,9,13,17,20,25,29,35,37,45,49,51,67,75,82}=564
先找564,次找563,562,561,560,.....
G={48,57 ...

反向推出哪些石头可以不搬,是个好思路。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-12-18 20:59:09 | 显示全部楼层
程序呢?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
回复

使用道具 举报

 楼主| 发表于 2019-12-18 21:28:29 | 显示全部楼层

就是在讨论有什么好算法啊?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-12-4 01:31 , Processed in 0.064011 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表