找回密码
 欢迎注册
查看: 45752|回复: 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-4-26 22:05 , Processed in 0.046282 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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