下载此文档

排列组合之最优算法(2)3.pdf


文档分类:论文 | 页数:约5页 举报非法文档有奖
1/5
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/5 下载此文档
文档列表 文档介绍
排列组合之最优算法(2)

'下面的代码中,结果字符串表示最终生成的一组组合
的结果表达式,选择位数表示从一组数据中取数时,当前的
取值在该数组中的位置,已取值数量表示已经从该数组中
取的元素的个数,数组大小和共需选数量分别代表 M 取 N
组合中的 M 和 N

'彭版的代码利用的是顺序取数的方法(至少我这么认为),
也就是取了第二位数后,后面的取数不能再反过来取第二
位前面的数,即只允许生成 1,2,3 的一组数,不能生成
2,1,3 的这样一组数

Public 结果字符串$, 选择位数%, 已取值数量%, 共需选数
量%, 数组大小%

Public 元素数组

Sub 组合(结果字符串$, 取值位数%, 已取值数量%)

If 已取值数量 = 共需选数量 Then
Range("C65536").End(xlUp).Offset(1) = 结果字
符串

Exit Sub

End If

If 取值位数 <= 数组大小 - (共需选数量 - (已取值
数量 + 1)) Then

'递归循环的条件是:当前的取值位数,不超
过数组的总大小减去剩余可取值的数量(即 共需选数量 -
(已取值数量+1),其中已取值数量+1 代表的是当前的位数
取过之后,已经取值的总个数)

'例如 1-8 中选 5 个数,数组大小为 8,共需
选数量为 5,则对于第 3 位数,已取值数量=2,已取值数量
+1=3 代表的就是当前取值位数 3,

'当前的取值位数<=数组大小 - (共需选数量
- (已取值数量 + 1)) =8-(5-(2+1))=6,即第三位数最多只能选
数字 6,因为如果第 3 位选 7 了话,后面剩余的第 4 位和
第 5 位只有一个 8 可以取,那么就不足取了

组合 结果字符串 & " " & 元素数
组(取值位数, 1), 取值位数 + 1, 已取值数量 + 1

'这一次递归调用的单个组合中的所
有元素,即生成其中某一个组合,原理是利用递归循环,
依次从数组 M 中选出 N 个数来

'例如 6 选 3,依次会生成 1,12,123,当已选数
量=3 时候退出这一次递归

组合 结果字符串, 取值位数 + 1, 已取值数

排列组合之最优算法(2)3 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数5
  • 收藏数0 收藏
  • 顶次数0
  • 上传人学习的一点
  • 文件大小155 KB
  • 时间2021-05-07