经典黑书 组合计数.pptVIP

  1. 1、本文档共89页,可阅读全部内容。
  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文档。上传文档
查看更多
2005年浙江省队培训 第2讲 组合计数 刘汝佳 目录 一、置换群 二、组合数学基础 三、生成函数 四、等价类计数 五、递推法 一、置换群 群 群是集合G和其上的二元运算*, 并满足 封闭性: 对于群里元素a, b, a*b也在G内) 结合律: (a*b)*c = a*(b*c) 单位元: 存在e, 对于每个元素a*e=e*a=a 逆元: 对于每个元素a, 存在b使a*b=b*a=e, 记b=a-1 一般简写a*b为ab 置换 用置换 表示1被a1取代, 2被a2取代…n被an取代. 其中a1, a2, …an是1~n的一个排列 置换群 置换群的元素是置换, 运算是置换的连接 可以验证置换群满足群的四个条件 定理 设G是1…n的置换群, K是1…n的某个元素 G中使K保持不变的置换集合, 记为Zk, 称为K不动置换类 K在G作用下的轨迹记为Ek, 也就是通过置换G能变换到的元素集合 定理: |Ek| * |Zk| = |G| (证明略) 循环 n阶循环 每个置换都可以写若干互不相交的循环的乘积, 例如 表示是唯一的. 置换的循环节数是上述表示中循环的个数, 上例的循环节数是3 传球游戏 n个人围成一圈, 每个人编号为1~n. 有n个球, 编号也为1~n. 一开始每人手里拿一个球 基本操作为对传, 即a手里的球和b手里的球交换. 每个时间单位, 一个人可以不做任何动作, 或者与另外一人对传 目标: 每个人拿到和自己编号相同的球 问题1: 至少需要多少次对传? 问题2: 至少需要多少时间? 分析 用置换表示初始状态 每次对传相当于乘以一个对换 置换可以唯一地表示成若干循环的乘积, 因此只考虑循环乘以对换(a, b)的结果 a和b属于不同循环 a个b属于同一个循环 分析 情况一: a和b属于不同循环 因为循环的任何一个元素都可写成第一个,不妨设两个循环为(a, a1, a2, … an)和(b, b1, b2, …, bm) 结果为(b,b1,b2,…,bm,a,a1,a2,…an) 结论: 两个循环合并成一个 分析 情况二: a和b属于同一个循环 设为(a,a1,a2,…ai,b,b1,b2,…,bm), 乘以(a,b)后变为(a,a1,a2,…,ai)(b,b1,b2,…,bm) 可以这样理解: 乘以(a,b)是自身的逆操作 结论: 一个循环拆为了两个 分析 问题1: 由于目标状态是(1)(2)…(n), 所以需要不断的拆循环. 答案为n-c. 其中c为轮换个数 问题2: 结论非常简单 循环长度为1, 次数为0, 显然 循环长度为2, 次数为1, 显然 循环长度大于等于3的时候呢? 分析 循环长度大于等于3, 次数为2. 对于循环(a1,a2,…,an), 只需要乘以(a2,an), 就变成了(a1,an)(a2,a3,…,an-1), 再乘以(a3,an-1), 就变成了(a2,an-1)(a3,a4,…an-2)…等等 因此只需要乘以(a2,an)(a3,an-1)(a4,an-2)…就可以得到(a1,an)(a2,an-1)(a3,an-2)…再对换一次就可以了 无聊的排序 你弟弟有一项家庭作业需要你帮助完成。老师给了他一列数,需要他把这些数按升序排列。你可以每次交换两个数的位置,而一次交换的代价被定义成交换的两个数的和。写一个程序,用最小的交换代价和来帮助弟弟完成这项无聊的排序工作。 分析 从初始状态变为目标状态可以看作完成一个置换. 把置换分解为s个不相交循环乘积 各循环是独立的, 所以依次完成各个循环 对于任意循环i, 设它的长度为ki, 容易证明至少需要交换ki-1次, 即每次让一个元素到达目标, 则前ki-1个元素到达目标后最后一个元素也到达目标 分析 显然每个元素至少参与一次交换. 既然交换次数一定, 应该让循环中的最小元素ti参加所有交换, 其他元素各只参加一次 例如(8 2 7), 2占了7的位置, 则2和7交换; 2又占了8的位置, 则2和8交换 花费为sumi+(ki-2)*ti,其中sumi为第i个循环所有数之和 分析 特殊情况: 先让ti和全局最小值m交换, 让m进入循环, 然后和所有元素交换一次后再和ti交换,花费为sumi+ti+(ki+1)m 例如1,8,9,7,6,目标状态为1,6,7,8,9, 分解为(1)(8 6 9 7), 考虑第二个循环 方案一: 花费为30 + (4-2)*6 = 42 方案二: 花费为30 + 6 + (4+1)*1 = 41 分析 程序实现: 只需要记录每个循环节的长度ki和它的最小元素ti, 不需要模拟交换 找循环最多访问每个元素一次, 时间复杂度是线性的 同构计数 一个竞赛图是这样的有向图 任两个不同的点u、v之间有且只有一条边 不存在

文档评论(0)

0716 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档