ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 45631|回复: 68

[分享] 生成 m选n 的所有组合,可指定组合的和值,每秒生成400万个组合,带详细注释的代码

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2010-11-1 01:47 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:其他结构和算法
本帖最后由 灰袍法师 于 2012-1-20 20:58 编辑

更新:增加输出到文本文件的功能,从此不怕内存不够,工作表填充缓慢了,不过存入文本文件本身也是相当慢的,大概每秒10万个组合吧。
优先下载这个最终版本.rar (65.84 KB, 下载次数: 3529)

此帖受到下面链接的刺激,从而诞生。

我設計的組合算法★20取10,0.53秒 by linyancheng
http://club.excelhome.net/redire ... 4366084&ptid=642637

当然,很久以前,彭希仁版主写过一个一模一样算法的VBA,在这里
[讨论]排列组合之最优算法 by 彭希仁
http://club.excelhome.net/thread-278319-1-1.html

那么,我为何还要花时间写一个算法是跟上面两位一模一样的VBA呢

原因就是貌似很多人看不懂过于简略的代码。

所以就在极度无聊之下,有了这么一个大量注释版本的VBA(按我私心猜度,即使没有注释应该也比较好懂)。

附件包括 略有修改的 linyancheng,彭希仁,和我自己的代码,方便读者不用分头下载了。

其实三个Excel文件的VBA算法都一样,速度也都差不多,没有什么好比较的。主要还是清晰易懂方面有差别而已。

我个人认为,应该都不是最快速的算法,毕竟进位的调整也是耗用了一些计算时间,但是每秒钟400万组合应该也足够快了。(2.13Ghz Core Duo)

以上速度是仅仅生成组合的速度,并没有存储或者进一步对组合进行后续计算。

另外附件linyancheng朋友的代码,是所有组合结果都存储到内存数组的速度,所以不能直接跟我的以及彭希仁版主的相比,那样会不公平了。

最后,三个附件的一点小差异是

彭希仁版主的VBA是把结果存储到硬盘文件,输出结果是最快的。

linyancheng的VBA是存储到内存数组,没办法直接查看,当然,他在上面连接自己的完整代码,是有存储到硬盘文件的,而且是写成一个过程,方便其他程序直接调用,有兴趣的朋友自行去研读吧

我的代码可以在内存足够的时候存储到内存数组,在工作表行数足够的时候存储到工作表(速度很慢,100万行大概2分钟)
可以靠修改工作表的单元格来改变是否输出结果。

更新了linyancheng最新的更快的代码,我自己的代码则改善了可读性。

补充了一个自动检测系统可用内存,以及Excel工作表可用行数(65535 or 1048575)的版本,不用再分2003/2007版本了。

并且在自动检测的版本上,增加一个指定输出的组合数字和值的功能,不在和值范围的组合将不会出现

如:可以求 1-33 选 6, 和值是 90-100 的组合

[ 本帖最后由 灰袍法师 于 2011-3-5 19:59 编辑 ]

三个一样的组合生成算法.rar

40.69 KB, 下载次数: 2011

VBA - 组合生成算法 - by 灰袍法师 - 自动检测版本.rar

41.95 KB, 下载次数: 1878

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2010-11-1 05:32 | 显示全部楼层
楼主强大,太方便我等这些菜鸟了,下来好好学习一下~!!

TA的精华主题

TA的得分主题

发表于 2010-11-1 07:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-11-1 21:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
嗯,法师很厉害。


超级厉害。

补充内容 (2013-7-15 13:53):
现在我已经开发出了更快更强的组合算法代码:http://club.excelhome.net/thread-1033055-1-1.html

TA的精华主题

TA的得分主题

发表于 2010-11-2 19:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-11-3 09:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
非常感谢楼主的代码和总结,慢慢消化一下.

TA的精华主题

TA的得分主题

发表于 2010-11-6 22:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
非常感谢楼主的代码和总结,慢慢消化一下.

TA的精华主题

TA的得分主题

发表于 2010-11-18 12:33 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-12-23 08:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
太強大了,法師的VBA可是練得爐火純青啊

TA的精华主题

TA的得分主题

发表于 2010-12-23 08:19 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 01:00 , Processed in 0.042794 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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