组合数学算法.docxVIP

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
组合数学算法.docx

排列组合的生成算法 研究排列问题的主要目的是求出根据已知条件所能做出的不同排列的种数。研究组合的主要目的之一是求出根据已知条件所作出的不同组合的种数。选取问题:设 n 元集合 S,从 S 中选取 r 个元素。根据是否有序 , 是否允许重复, 将该问题分为四个子类型。 不重复选取 重复选取 有序选取 集合的排列 多重集的排列 无序选取 集合的组合 多重集的组合  1、 设S为n元集, (1) 从 S 中有序选取的 r 个元素称为 S 的一个 r 排列,S 的不同 r 排列总数记作 P(n,r), r=n的排列是S的全排列。 (2) 从 S 中无序选取的 r 个元素称为 S 的一个 r 组合,S 的不同 r 组合总数记作 C(n,r)。 设n, r为自然数,规定0!=1,则 2、多重集 S={n1×a1, n2×a2, …, nk×ak},n=n1+n2+…nk 表示 S 中元素的总数.。 (1) 从S 中有序选取的r个元素称为多重集 S 的一个 r 排列. r=n 的排列称为 S 的全排列。 (2) 从 S 中无序选取的 r 个元素称作多重集 S 的一个r 组合。 注意: 多重集中元素的重复度,0 ni £+∞, 当ni=+∞,表示ai重复选取的次数没有限制。 S的子集 X={x1×a1, x2×a2, …, xk×ak}, 其中0 £ xi £ +∞。 设S={n1×a1, n2×a2, …, nk ×ak}为多重集, (1) S 的全排列数是 : (2) 若r £ ni,i=1,2,…,k,那么S 的 r 排列数是 kr 。 多重集S={n1×a1, n2×a2, …, nk×ak},0ni £+∞, r£ni,S的r 组合数为N = C(k+r-1,r)。 一、排列生成算法 有几种典型的排列生成算法都很有成效. 它们在实际中具有广泛应用价值。这几种算法分别是:序数法、字典序法、邻位互换法(Johnson-Trotter)、轮转法。 序数法 序数法基于一一对应概念。 先在排列和一种特殊的序列之间建立 一种一一对应关系, 然后再给出由序列产生排列的方法。 因为序列的产生非常方便, 这样我们就可以得到一种利用序列来生成排列的方法。 建立这种一一对应思路类似数的10进制、2进制和p进制表示。 这相当于自然数与某种序列之间建立了一一对应关系. 可以利用置换来表示整数: n!=n(n-1)! =(n-1+1)(n-1)! = (n-1) (n-1)!+(n-1)! (n-1)!= (n-2) (n-2)!+(n-2)! n!= (n-1) (n-1)!+ (n-2) (n-2)! + (n-3) (n-3)!+… +2?2!+1?1!+1 n!-1=(n-1) (n-1)! +(n-2) (n-2)!+(n-3) (n-3)!+…+2? 2!+1?1! 可以证明, 从0到n!-1之间的任何整数m 都可唯一地表示为: m=an-1 (n-1)!+an-2 (n-2)!+?+a2? 2!+a1? 1! 其中0£ai£i, i=1,2,…,n-1.m与序列(an-1,an-2 ,…,a2,a1)一一对应。 因为满足条件: 0£ai£i, 1£i£n-1 的序列(an-1, an-2,…a2,a1)共有n!个, 这恰好与0到n!-1的n!个整数一一对应。 需要建立满足条件的n!个序列(an-1, an-2,…a2,a1)和n元集合S的全部排列之间的一一对应关系。还需要给出一种办法, 由每个满足条件的序列(an-1,an-2,…a2,a1) 可生成唯一的一个排列,样我们就可以产生出所有的排列。 行列式定义中有逆序数的概念, 就是一个排列中违反自然顺序的数对: 比如12354的逆序数为1, 而43215的逆序数为6。 设p1p2…pn 是任意一个n元排列, 则i+1后面比i+1小的数字的个数ai总不超过i, 即ai£i, i=1,2,…,n-1.这样自然由一个排列得到一个序列(an-1,an-2,?,a2,a1), 而且满足条件. 我们可以如下建立序列与排列的对应: 设序列 (an-1,an-2,…a2,a1)满足条件(. 则它所对应的排列为(p)=p1p2…pn其中ai可以看作是排列(p)中数i+1所在位置后面比i+1小的数的个数.要说明这种对应的合理性, 必须清楚. 如何由序列产生出它所对应的排列. 2. 字典序法 对给定的字符集中的字符规定了一个先后关系,在此基础上规定两个全排列的先后是从左到右逐个比较对应的字符的先后。 [例]字符集{1

文档评论(0)

带头大哥 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档