组合数学竞赛中的应用.ppt
《组合数学竞赛中的应用.ppt》由会员分享,可在线阅读,更多相关《组合数学竞赛中的应用.ppt(38页珍藏版)》请在三一办公上搜索。
1、组合数学在程序设计竞赛中的应用,内容提要,排列组合和容斥原理群论与Polya定理 递推关系,两个基本原则,1、加法原则如果完成一件事情有两种方案,而第一个方案有m种方法,第二个方案有n中方法,则完成该事情共有m+n种方法。2、乘法原则如果完成一件事情需要两个步骤,第一步有m中方法,第二步又有n种方法,则完成该事情共有m*n种方法,排列组合的几个基本结论,1、相异元素不允许重复的排列数和组合数:,2、不尽相异元素的全排列,排列组合的几个基本结论,3、相异元素不允许重复的圆排列,4、相异元素允许重复的组合数,集合描述:设S=e1,e2,en,,从S中允许重复地取出r个元素,称为r可重组合,排列组合
2、例题,例1:电子锁某机要部门安装了电子锁。M工作人员每人发一张磁卡,卡上有开锁的密码特征,为了确保安全,规定至少有N人同时使用各自的磁卡才能将锁打开。现在需要计算一下,电子锁上至少要有多少种特征,每个人的磁卡上至少要有多少特征。,排列组合例题,先做一个简单的假设:M=7,N=4。,对于问题一:任意N-1人在一起,至少缺一种特征,不能打开,剩下的M-(N-1)个人中的任意一个到场即可开锁。M个人中的M-(N-1)的组合数为C(M,M-N+1)=C(M,N-1),故电子锁的至少应有C(7,3)=35种特征。,对于问题二:对任一位工作者的磁卡而言,其余M-1人中任意N-1人在场至少缺少一种此人所具有
3、的特征而无法打开锁。每张磁卡至少应有C(M-1,N-1)种特征,故C(6,3)=20种特征。,所以最终答案是C(M,N-1)和C(M-1,N-1),排列组合例题,例2:zju1976 Path On a Grid,求n*m的方格图形中,从点(0,0)到点(n,m)的最短路径数目,(0,0),(n,m),Sample Input(给定n,m)5 41 10 0Sample Output(路径数目)1262,排列组合例题,我们用组合数学的思路来解题。最短路径必定是一条只向右上走得路。设向右走一步为x,向上走一步为y。则每一条路线一定对应由n个x,m个y共m+n个元素组成的排列。,以n=5,m=4为
4、例,,任意一条路线如下图所示,对应的xy序列为:xyxxxyxyy,可见,只要能确定9个位置中4个y的位置就唯一确定了一条路径。,所以,本题答案就是C(n+m,m),排列组合数的一般计算方法,怎么计算?设计一个求阶乘的函数?,20!=243290200817664000012!=4790016008!=40320C(20,12)=125970,显然20!用int表示一定是失败的,而C(20,12)的结果又完全可以用int来表示。,回想我们是怎么计算的?,先约分再计算!,排列组合数的一般计算方法,(一)计算组合数的函数,int gcd(int a,int b)if(b=0)return a;el
5、se return gcd(b,a%b);/欧几里德辗转相除法求最大公约数gcd(a,b)=gcd(b,a mod b),int C(int n,int m)int i,a,fz=1,fm=1;,for(i=1;i=m;i+)fz*=(n-i+1);fm*=i;a=gcd(fz,fm);fz/=a;fm/=a;return fz/fm;,分子,分母,排列组合数的一般计算方法,(二)使用double类型,double C2(int n,int m)double product=1;int i;for(i=m;i=1;i-)product=product*(n-m+i)/(m-i+1);retur
6、n product;,/*在输出结果是应该注意要以整数形式输出.*/,#include#include using namespace std;int mainint n,m;cinnm;coutsetiosflags(ios:fixed)setprecision(0)C2(n,m)endl;return 0;,排列的生成算法,字典序法:顾名思义,这种方法就是将所有n元排列按“字典顺序”排成队,以12n为第一个排列,排序规则,即:由一个排列P(p1,p2pn)直接生成下一个排列的算法可归结为:,(1)求满足pk-1pk的k的最大值,设为i,即 i=maxk|pk-1pk,(2)求满足pi-1p
7、k的pk的最小值,其位置设为j,即 pj=minpk|pi-1pk,(3)pi-1与pj互换位置得(q)=(q1q2qn),(4)(q)=(q1q2qi-1qiqi+1qn)中qiqi+1qn部分的顺 序逆转,得q1q2qi-1qnq i+1 qi 这便是下一个排列.,如排列839647521,首先从最右端开始,找到第一个比它的右临位小的数字,即4,然后从该数字的右边找到比它大的最小的数字,即5,交换两数字,原排列变为839657421最后将5位置右端的数字倒序排列,即变为839651247,这就是原排列的下一排列。,组合的生成算法,Zju1089有n(n=6)个数字,要求按字典序输出所有从该
8、n个数字中取6个的组合。,Sample Input7 1 2 3 4 5 6 7 8 1 2 3 5 8 13 21 34 0,Sample Output1 2 3 4 5 6 1 2 3 4 5 71 2 3 4 6 71 2 3 5 6 7,1 2 4 5 6 71 3 4 5 6 72 3 4 5 6 71 2 3 5 8 13 1 2 3 5 8 21 1 2 3 5 8 34 1 2 3 5 13 21,n,组合的生成算法,Code:,#include#include#includeusing namespace std;int k;int used13;int lotto13;vo
9、id output();void choosenext(int I,int num);,int main()int n_case=0,i;while(cink,组合的生成算法,void output()int i,n=0;for(i=0;i k;i+)if(usedi)if(n)cout;coutlottoi;n+;coutendl;,void choosenext(int I,int num)if(num=6)output();return;if(I=k)return;for(int i=I;i k;i+)usedi=1;choosenext(i+1,num+1);usedi=0;,容斥原理
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 组合 数学 竞赛 中的 应用

链接地址:https://www.31ppt.com/p-6598147.html