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-18 21:47 | 显示全部楼层
本帖最后由 jsxjd 于 2014-11-18 21:48 编辑
lee1892 发表于 2014-11-18 16:31
楼主发过很多组合、排列的东西了吧,不觉得很多重复吗?

正确的做法是一个组合一个排列作为两个基本函数 ...

况且“不得要领”!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-19 08:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
jsxjd 发表于 2014-11-18 21:39
设,设一下参数给大家瞧一瞧

首先,这个代码实际用处不大……可以看做纯粹是对元素分组以后,分组之间元素排列组合的一个分布研究。


其次,如果你有兴趣,可以简单举例:
1. 如果是6个元素均分为3组,那么很简单就只有2、2、2一种分组个数组合。
设置参数方式主要有2种:
① 各小组内元素组合(不排列)、而组间内容排列(可重复):
设置分组参数位置为第 1、3、5行(得到2、2、2分组),参数值=1,1,1
结果可得到 90种分组组合:
=Combin(6,2)*Combin(4,2)*Combin(2,2)=15*6*1=90

② 各小组内元素组合(不排列)、而组间内容也只有组合关系(不排列即不重复):
设置分组参数位置为第 1、3、5行(得到2、2、2分组),参数值=1,2,3(凡是数值递增的就不重复)
结果仅得到 15种分组组合:=Combin(1,1)*Combin(5,1)*Combin(1,1)*Combin(3,1)*Combin(2,2)=1*5*1*3*1=15

③ 还可设置参数值=1,2,2(第1和第2、第3组之间排列关系,但第2和第3组之间组合关系不重复。)
结果得到 30种分组组合:
=Combin(1,1)*Combin(5,1)*Combin(4,2)*Combin(2,2)=1*5*6*1=30

④ 还可设置参数值=1,1,2(第1和第2组之间可重复排列关系,但第2和第3组之间组合关系不重复。)
结果得到 45种分组组合:
=Combin(6,2)*Combin(1,1)*Combin(3,1)*Combin(2,2)=15*1*3*1=45

即,3个参数值可以有:1,1,1…1,1,2…1,2,2…1,2,3 这样一共4种不同的设置,得到不同的组间排列组合。

如果元素个数和分组数增加,显然参数的组合方式就更多了……

但是,实事求是说,这样得到的结果,可能除了①组间全排列 和 ②组间仅组合 这二种模式,
其它模式可能并无实际意义。呵呵



评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-19 09:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 香川群子 于 2014-11-20 14:55 编辑
jsxjd 发表于 2014-11-18 21:39
设,设一下参数给大家瞧一瞧

有,如果元素个数5个,人数不均匀分为3组,则可以有:1,2,2…2,1,2…2,2,1…这三种分组顺序。

对应的参数值也还可以有1,1,1…1,1,2…1,2,2…1,2,3 这样同一共4种不同的设置,得到不同的组间排列组合。

所以,总的分组模式就变成了一共可以有12种不同的参数设置方法……
呵呵,大部分没有意义,但分组结果确实是各自不同的。

比较有用的分组模式是:

设置分组参数位置为第 1、2、4行(得到1、2、2分组),参数值=1,1,1(组间排列关系可重复)
得到最大分组数30个:
=Combin(5,1)*Combin(4,2)*Combin(2,2)=5*6*1=30


设置分组参数位置为第 1、2、4行(得到1、2、2分组),参数值=1,2,3(组间组合关系不重复)
得到最少分组数3个:
=Combin(1,1)*Combin(1,1)*Combin(3,1)*Combin(2,2)=1*1*3*1=3

…………
其余各种略。


Pic.jpg




TA的精华主题

TA的得分主题

发表于 2014-11-19 10:26 | 显示全部楼层
香川群子 发表于 2014-11-19 09:05
有,如果元素个数5个,人数不均匀分为3组,则可以有:1,2,2…2,1,2…2,2,1…这三种分组顺序。

对应的参 ...

香川老师的贴子个个都很经典,慢慢学习!
麻烦香川老师帮忙看看这个递归排列的贴,谢谢!http://club.excelhome.net/thread-1164918-2-1.html

TA的精华主题

TA的得分主题

发表于 2014-11-19 16:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
虽还看不懂工作上也用不上,但需赞一个。

TA的精华主题

TA的得分主题

发表于 2015-1-6 15:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
老师,麻烦您帮我解决这一难题,感谢
http://club.excelhome.net/thread-1176699-1-1.html

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-12 22:11 | 显示全部楼层
代码做了优化,增加了一些说明。

多功能元素分组组合.rar

17.1 KB, 下载次数: 99

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-15 16:39 | 显示全部楼层
用数组循环写的代码……比较复杂一点。

MultiGroupArr.zip

194.77 KB, 下载次数: 45

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-16 00:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 香川群子 于 2015-2-16 12:45 编辑

数组改进,重复部分写成sub子过程
对分组参数值的意义重新做了思考,确定为:
① =1 或 和上一组值相同时,允许从任意位置的排列中取组合。
② >1 且 比上一组值+1时,首位值固定,仅剩余个数参与组合计算。

MultiGroupArr.zip (14.16 KB, 下载次数: 71)



TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-17 14:04 | 显示全部楼层
呵呵,递归算法也做了修改……和数组算法结果保持一致。

MultiGroupCombin.zip

45.67 KB, 下载次数: 92

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

本版积分规则

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

GMT+8, 2024-5-20 08:48 , Processed in 0.052052 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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