找回密码
 欢迎注册
查看: 64883|回复: 46

[悬赏] 最少分组方案算法

[复制链接]
发表于 2008-8-13 15:33:09 | 显示全部楼层 |阅读模式
悬赏100金币已解决
一组两两不等的正整数,如何划分成最少的组数, 使得每组里所有数之积均不大于给定的数值? 比如, 求将前 172 个素数的最少分组组数方案, 使得每组数之积均小于 $2^32$ ? (显然最少分组组数极限值= $|~ ln(1024#)/ln(2^32) ~| = 45$,但估计很难达到,我现在可做到 47 ) 其实,也可换个提法: 给定一个大整数N(已知其因数分解),及一个给定的正整数L, 请用最少数目的整数,使其乘积=N,且每个数均不大于L
  1. { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021 };
复制代码
备注: 1、最佳方案可能不止一种,提供一个即可; 2、所用算法应具有良好的扩展性; 3、请提供源代码,并附原理介绍; 4、对最佳解答者将可获得本次的 100 分悬赏!

最佳答案

查看完整内容

我写了一个用回溯法暴力搜索的程序,前天半夜 12 点半才调试好(几年没写程序了,手生了好多)。 然后运行解问题1:对 1024 以内的素数分组。我以为一觉起来就有结果,没想到运行了差不多两天了还没出结果。 刚才我试着解问题2,瞬间就得到了少一组的解。仔细对比一下 93 组与 92 组的结果,发现不同的地方只在最后几组: 93 组: No. 91 : 113 107 103 101 No. 92 : 89 83 73 67 59 No. 93 : 41 92 组: No. 91 : ...
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-8-13 15:33:10 | 显示全部楼层
我写了一个用回溯法暴力搜索的程序,前天半夜 12 点半才调试好(几年没写程序了,手生了好多)。 然后运行解问题1:对 1024 以内的素数分组。我以为一觉起来就有结果,没想到运行了差不多两天了还没出结果。 刚才我试着解问题2,瞬间就得到了少一组的解。仔细对比一下 93 组与 92 组的结果,发现不同的地方只在最后几组: 93 组: No. 91 : 113 107 103 101 No. 92 : 89 83 73 67 59 No. 93 : 41 92 组: No. 91 : 113 107 103 83 41 No. 92 : 101 89 73 67 59 第 93 组只有一个孤零零的 41 ,腾挪的余地非常大,所以才让我的程序幸运地很快就找出来。一般情况下,只能老老实实面对组合爆炸产生的海量运算。 解第一个问题的程序已经运行了 1 天零 17 个钟头了,但还没计算出一个 46 组的解。我猜 47 组是最优结果了,希望放在放假的 3 天内能算出来。 程序写得很烂,各位帮忙看看有没有改进的地方。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
回复

使用道具 举报

 楼主| 发表于 2008-8-13 15:42:39 | 显示全部楼层
大家在关注奥运赛况时,也请挤点时间来考虑这个问题(应该不难)。 奇怪,悬赏帖只有“快速回复”模式?!太不方便了! 不过一些 Discuz! 代码标签仍然还是可用滴
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
回复

使用道具 举报

发表于 2008-8-13 16:52:44 | 显示全部楼层
你还不如用普通方式 但使用转帐方式奖励 ========== 呵呵 100后面加个0就好了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
回复

使用道具 举报

发表于 2008-8-13 16:53:29 | 显示全部楼层
我想遗传算法是不是更好些?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
回复

使用道具 举报

发表于 2008-8-13 16:54:56 | 显示全部楼层
设每个数字的对数的算术平均值作为选择参数 某个组数字变换成1则会减少分组数
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
回复

使用道具 举报

 楼主| 发表于 2008-8-13 19:02:01 | 显示全部楼层
确实,发普通主题帖,然后声明用转帐方式奖励更好。 就给定的数据来说,用常规的整型变量即可,没必要用浮点的对数。 遗传算法——我不清楚,怎么用?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
回复

使用道具 举报

发表于 2008-8-13 22:14:20 | 显示全部楼层
不好解释 你自己查去吧
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
回复

使用道具 举报

发表于 2008-8-13 22:15:44 | 显示全部楼层
我估计你的题目没有45组的解
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
回复

使用道具 举报

发表于 2008-8-14 07:38:56 | 显示全部楼层
我觉得很难求最优解
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-11-22 18:41 , Processed in 0.026567 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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