开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 5671|回复: 13
收起左侧

[2020开源大赛(第五届)] 编程珠玑-01互换法解决m选n组合问题

[复制链接]
结帖率:64% (25/39)
发表于 2020-11-5 17:04:35 | 显示全部楼层 |阅读模式   辽宁省大连市
本帖最后由 dangerace 于 2020-11-5 23:10 编辑

目前论坛上能找到的解决m选n组合问题,基本都采用的递归算法。众所周知递归算法存在一定的局限性,性能也并不出色,所以就有了一些其他算法的出现。
我这个算法是仿照《编程珠玑》中第二章中,编程解决组合问题里的一个思路,就是01交换法来求组合数。
使用0或1表示集合中的元素是否出现在选出的集合中,因此一个0/1列表即可表示选出哪些元素。例如:[1 2 3 4 5],选出的元素是[1 2 3]那么列表就是[1 1 1 0 0]。
使用01交换法的思路是,首先用一个数组用于记录集合中某元素是否被选中。因为需要在m个元素中选择n个,所以这个数组中总共有n个为1的元素,其他均为0。因此在初始化过程中,将该数组前n个元素赋值为1,其余m-n个元素赋值为0。然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为“01”组合,同时将其左边的所有“1”全部移动到数组的最端。当第一个“1”移动到数组的m-n+1的位置,即n个“1”全部移动到最右端时,就得到了最后一个组合。

代码写的比较烂,里面变量命名也不规范,运行效率一般,我感觉还有提升空间,但是意思到了,也尽量写了很详细的注释,希望各位大佬批评指正。
这个算法相比递归算法的最大好处是,对大数据的运算能力比较强。用递归算法,当数据量很大,递归层数太多时,就容易出现堆栈溢出的情况,而这个算法面对大量数据,虽然可能会慢,但稳定性好,只要等,就会一直算。

编程珠玑-01互换法-m选n组合算法.e (6.31 KB, 下载次数: 78)
VX图片_20201105164830.png

点评

下面都是求字体的,没有人关心帖子的真正内容吗?囧~~~~ 这个字体就是windows自带的宋体,另外我还使用了mactype进行了字体渲染....   辽宁省大连市  发表于 2020-11-5 20:07

评分

参与人数 5好评 +3 精币 +11 收起 理由
ghost12 + 1 支持开源~!感谢分享
易语言资源网 + 1 + 3 支持开源~!感谢分享
猥琐小胖子 + 1 + 4 奉上小小红包希望笑纳
罗泠雨人 + 1 支持开源~!感谢分享
hehehero + 1 + 2 感谢发布原创作品,精易因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

结帖率:97% (62/64)

签到天数: 22 天

发表于 2022-4-22 16:54:54 | 显示全部楼层   重庆市重庆市
支持开源
回复 支持 反对

使用道具 举报

结帖率:81% (26/32)

签到天数: 2 天

发表于 2022-2-4 00:01:00 | 显示全部楼层   上海市上海市
感谢发布原创作品,精易因你更精彩!
回复 支持 反对

使用道具 举报

结帖率:83% (10/12)

签到天数: 5 天

发表于 2020-11-9 21:32:28 | 显示全部楼层   河北省沧州市
        感谢发布原创作品,精易因你更精彩!
回复 支持 反对

使用道具 举报

签到天数: 4 天

发表于 2020-11-8 23:39:49 | 显示全部楼层   重庆市重庆市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2020-11-8 14:18:56 | 显示全部楼层   云南省昆明市
感谢分享了~~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

结帖率:60% (6/10)

签到天数: 4 天

发表于 2020-11-5 22:50:35 | 显示全部楼层   广东省中山市
感谢分享了~~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

结帖率:64% (25/39)

签到天数: 20 天

 楼主| 发表于 2020-11-5 20:05:11 | 显示全部楼层   辽宁省大连市

我这字体真的很特别?我明天到单位电脑上看一看,我记得就是普通的宋体啊
回复 支持 反对

使用道具 举报

结帖率:94% (17/18)

签到天数: 15 天

发表于 2020-11-5 19:58:46 | 显示全部楼层   浙江省湖州市
求字体!!!
回复 支持 反对

使用道具 举报

结帖率:64% (25/39)

签到天数: 20 天

 楼主| 发表于 2020-11-5 19:35:36 | 显示全部楼层   辽宁省大连市
呆阿狸 发表于 2020-11-5 17:37
这个字体不错哦,能否分享下

没有特殊字体,就是windows自带的宋体吧
回复 支持 反对

使用道具 举报

结帖率:92% (22/24)

签到天数: 6 天

发表于 2020-11-5 18:20:23 | 显示全部楼层   江西省吉安市
感谢发布原创作品,精易因你更精彩!
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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