ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 香川群子

[原创] 【高级通用】元素分组排列组合 的递归算法代码

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-11-12 19:48 | 显示全部楼层
看看先;看看先。

TA的精华主题

TA的得分主题

发表于 2014-11-13 09:35 | 显示全部楼层
本帖最后由 wcymiss 于 2014-11-13 10:11 编辑
香川群子 发表于 2014-11-12 10:02
呵呵,只要按照1、2、2分组,并设置参数为:1,1,2即可得到不重复的15个结果:

A|BC|DE


代码的通用性总是在一定范围内的通用性吧。绝对通用的代码是没有的。

目前代码适合组间关系全为组合,总人数=总分组人数。

稍作修改可适合:
1、总人数大于分组人数。比如,10个人,选7人,分4组,每组人数为1、2、2、2。
2、组间关系可全为组合或全为排列。

但混合组间关系的不适合。主要是混合组间关系的参数表达太麻烦。

呵呵,只是提供另一种代码思路而已。不喜者请无视。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-13 12:15 | 显示全部楼层
wcymiss 发表于 2014-11-13 09:35
代码的通用性总是在一定范围内的通用性吧。绝对通用的代码是没有的。

目前代码适合组间关系全为组合 ...

那我就放心了……你的代码可以不用研究了。

TA的精华主题

TA的得分主题

发表于 2014-11-13 15:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
以下红色的怎么能认为是两种
AB|CD|E
AB|CE|D
AB|DE|C
AC|BD|E
AC|BE|D
AC|DE|B
AD|BC|E
AD|BE|C
AD|CE|B
AE|BC|D
AE|BD|C
AE|CD|B
BC|AD|E
BC|AE|D
BC|DE|A
BD|AC|E
BD|AE|C
BD|CE|A
BE|AC|D
BE|AD|C
BE|CD|A
CD|AB|E
CD|AE|B
CD|BE|A
CE|AB|D
CE|AD|B
CE|BD|A
DE|AB|C
DE|AC|B
DE|BC|A

TA的精华主题

TA的得分主题

发表于 2014-11-14 13:34 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-11-18 09:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wcymiss 发表于 2014-11-13 09:35
代码的通用性总是在一定范围内的通用性吧。绝对通用的代码是没有的。

目前代码适合组间关系全为组合 ...

这个帖子思路存在问题,怎么能收到知识树

点评

?????你是说我?  发表于 2014-11-18 15:06

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-18 10:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
jsxjd 发表于 2014-11-18 09:40
这个帖子思路存在问题,怎么能收到知识树

① 收到知识树 的原因我不清楚
但是代码中很好地使用了递归实现各种复杂的组合要求,应该有参考意义。

② 【这个帖子思路存在问题】
这个只是你个人的理解问题。

代码不能解决所有问题,但代码肯定是能够正确地实现部分功能的。

如果我的思路你看不懂,那也不能称为【思路存在问题】……呵呵。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-18 10:29 | 显示全部楼层
jsxjd 发表于 2014-11-13 15:57
以下红色的怎么能认为是两种
AB|CD|E
AB|CE|D

如果需要排除二二组合中的重复项,那么需要改变参数设置。这个你还不熟悉。

如果考虑到分组之间也有排列关系,则你指出的两种组合,确实是不同的状态。

该不该看做不同,不是由你决定。

TA的精华主题

TA的得分主题

发表于 2014-11-18 10:32 | 显示全部楼层
香川群子 发表于 2014-11-18 10:29
如果需要排除二二组合中的重复项,那么需要改变参数设置。这个你还不熟悉。

如果考虑到分组之间也有排 ...


如果这是不同的,那么还存在另几组情况:
?|??|??
??|?|??
这样就遗漏了很多很多
不要在这儿强词夺理,胡搅蛮缠

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-18 10:41 | 显示全部楼层
本帖代码的作用,其实并不大。

可以明确无分歧的功能有:
1. 进行m个元素中抽取不重复n个元素的 Combin(m,n)分组。
这个本身并非本递归代码的特长(列出所有Combin组合有更高效的组合算法)
但有一个特点是,在列出Combin(m,n)分组的同时,顺便得到Combin(m,m-n)分组

2. 进行m个元素中抽取不重复n个元素的 Permut(m,n)分组。
这个本身并非本递归代码的特长(列出所有Permut组合有更高效的排列组合算法)

3. 对m个元素进行k等分 分组,并且可以设置:
① 各个分组之间是排列关系 (组间重复)
② 各个分组之间是组合关系 (组间不重复)

4. 对m个元素进行元素个数不等的特殊分组,并且可以设置:
① 每一个后续组和前一个分组之间是排列关系 (组间任意位置元素重复)
② 每一个后续组和前一个分组之间是特定组合关系 (组间首个元素不重复)

上述元素个数不等的特殊分组,还可以因为各个小组人数的排列不同,而产生多种变化。


呵呵。以上功能不一定都会有什么实际用处,但是我的递归算法思路是清晰的。
不能理解的人,是他自己的问题。


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

本版积分规则

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

GMT+8, 2024-5-20 09:24 , Processed in 0.036926 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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