组合

又到了我们信息老师讲数学课了,吼吼吼

然后数学老师中途探望了一下,哇塞塞,然后他看到黑板上的题,微妙的笑了.


排列:

从n个数中有序的选出m个数的方案数是多少?
第一个数有n种取法,第二个数有n-1种取法......第m个数有n-m+1种取法。

n*(n-1)*...*(n-m+1)=n!/(n-m)!记为A(n,m).

组合:

从n个数中无序的选出m个数的方案数是多少?

先有序的取m个数,那么无序的m个数会被取到m!次。

A(n,m)/m!=n!/[m!(n-m)!]记为C(n,m)

C(n,m)=C(n-1,m)+C(n-1,m-1).

组合数的性质:1.C(m,n)=C(n-m,n)

       2.C(m,n)=C(m,n-1)+C(m-1,n-1)

       3.C(0,n)+C(1,n)+C(2,n)+...+C(n,n)=2^n

       4.C(n,n)+C(n,n+1)+C(n,n+2)+...+C(n,n+r)=C(n+1,n+r+1)

       5.C(0,n)+C(2,n)+C(4,n)+...=C(1,n)+C(3,n)+C(5,n)+...=2^(n-1)

something else:

1.n个人围着一张圆桌坐在一起,共有(n-1)! 种坐法。

2.从n个排成一排的数中取m个数,且数字之间互不相邻,共有C(m,n-m+1)种取法。

二次项定理:

(a+b)^n=∑(0<=k<=n)C(k,n)*(a^k)*(b^(n-k))

友情证明:可爱的数学归纳法

      当n=1时,(a+b)^1=C(0,n)*(a^0)*(b^1)+C(1,n)*(a^1)*(b^0)=a+b成立

      假设当n=m时命题成立,当n=m+1时:

      (a+b)^(m+1)=(a+b)(a+b)^m

      =(a+b)∑(0<=k<=n)C(k,m)*(a^k)*(b^(m-k))

      =...=∑(0<=k<=m+1)C(k,m+1)*(a^k)*(b^(m+1-k))

那么,二次项定理有什么用呢?

我可以负责任的告诉你,这个数学里是经常考的,2017年的浙江高中数学省赛卷第一题就是这个东西,它可以被用于证明可爱的费马小定理...我知道你心里已经开始喊停了...

但数学和信息是分不开的,数学班的同学告诉我们数学老师在数学班里讲树还有剪枝,数学奥林匹克命题人讲座(简称命题人)的《组合问题》的编写者之一就是毕业于计算机系的...

所以还是对数学好点吧。

正事,想知道浙江省省赛卷第一题是怎么出的吗?(不想知道,我还是会讲)

二次项定理的直接运用,不要你计算,我们把他变成信息题,如下:

题目:给定一个多项式(ax+by)^k,求出多项式展开后的x^n*y^m项的系数,对10007取模。

0<=n,m<=k<=1000,n+m=k,0<=a,b<=1000000。

根据二次项定理,有(ax+by)^k=∑(0<=i<=k)C(i,k)*(a^i)*(b^(k-i))*(x^i)*(y^(k-i))

         所以(x^n)*(y^m)的系数即为C(n,k)*(a^n)*(b^m),直接计算就好。

数学题是不是很简单,只不过算的很烦,然而信息就不存在这种问题了,所以我爱信息,呦吼吼!

隔板法

隔板法又称插空法,就是在n个元素间插入(m-1)个板,即把n个元素分成m组的方法。

eg:

将20个大小形状完全相同的小球放入3个不同的盒子,允许有盒子为空,但球必须放完,有多少种不同的方法?
 
分析:本题中的小球大小形状完全相同,故这些小球没有区别,问题等价于将小球分成三组,允许有若干组无元素,用隔板法.
 
解析:将20个小球分成三组需要两块隔板,因为允许有盒子为空,不符合隔板法的原理,那就人为的再加上3个小球,保证每个盒子都至少分到一个小球,那就符合隔板法的要求了(分完后,再在每组中各去掉一个小球,即满足了题设的要求)。然后就变成待分小球总数为23个,球中间有22个空档,需要在这22个空档里加入2个隔板来分隔为3份,共有C(22,2)=231种不同的方法.
 
点评:对n件相同物品(或名额)分给m个人(或位置),允许若干个人(或位置)为空的问题,可以看成将这n件物品分成m组,允许若干组为空的问题.将n件物品分成m组,需要m-1块隔板,将这n件物品和m-1块隔板排成一排,占n+m-1位置,从这n+m-1个位置中选m-1个位置放隔板,因隔板无差别,故隔板之间无序,是组合问题,故隔板有Cn+m-1 m-1种不同的方法,再将物品放入其余位置,因物品相同无差别,故物品之间无顺序,是组合问题,只有1种放法,根据分步计数原理,共有Cn+m-1 m-1×1=Cn+m-1 m-1种排法.
 
那么就引出了一个大大的栗子-o.o-:球和袋子的问题 

n个球和m个袋子,已经有大佬总结得可了,棒棒_qwq_(颜文字中毒期)

这里呢我们再小小的分析一下球和袋子的问题:

1.将n个不同的球放到m个相同的袋子里有多少种方案?(没有空袋子哦)

用f[i][j]表示将i个不同的球放到j个相同的袋子,并保证每个袋子里都有球的方案数。

我们考虑第i个球是不是单独放的,f[i][j]=f[i-1][j-1]+f[i-1][j]*j

答案是f[n][0]+f[n][1]+...f[n][m].时间复杂度是O(nm)

以上为ppt原话,反正我是没怎么懂那个式子是怎么出来的,各位大佬可能懂了吧,我太菜了啊~~~那么,不懂的和我一样的蒟蒻们来看一下我的思路吧:(来自一位蒟蒻的分享)

f[i][j]表示将i个不同的球放到j个相同的袋子中,

假设前面的i-1个球都放好了,放在了j个袋子里,其方案数为f[i-1][j],此时还有一个球要和哪一坨球同居呢?有j个袋子,有j种选择,所以为f[i-1][j]*j(乘法原理,不要告诉我你不会,这真的是小学数学) 。

假设前i-1个球放在了j-1个袋子里,那么第i个球一定在剩余的空袋子里(保证每个袋子里都有球)已有的方案数为f[i-1][j-1].

加一加,就得到了大佬ppt上的式子:f[i][j]=f[i-1][j-1]+f[i-1][j]*j

2.将n个相同的球放在m个相同的袋子里有多少种方案?

由于袋子是相同的,我们通过保证球数是单调不减的来防止重复统计。用f[i][j]表示将i个相同的球放到j个相同的袋子里的方案数。

考虑第一个袋子是否放球,如果放的话,由于球数单调不减,我们必须在每个袋子里都放一个球。

如果不放的话,那我们直接考虑后面的袋子。

f[i][j]=f[i-j][j]+f[i][j-1].时间复杂度O(nm)


最新文章

  1. Centos6 服务器病毒查杀命令历史
  2. iOS开发 - OC - 实现本地数据存储的几种方式二(直接使用sqlite)
  3. Python全栈开发day6
  4. maven中文乱码问题——打包错误
  5. Get start with Android development
  6. 读取AD模拟分量
  7. 【CF】328 D. Super M
  8. Mozilla5.0的含义
  9. 201621123067《JAVA程序设计》第一周学习总结
  10. Configuring SSL for SAP Host Agent on UNIX
  11. Android Studio 无法预览xml布局视图:failed to load AppCompat ActionBar with unkNown error
  12. N阶楼梯上楼问题
  13. ES6 开发常用新特性以及简述ES7
  14. Install Java on Ubuntu server
  15. MT【198】连乘积放缩
  16. ADHOC Report 配置
  17. sshd服务分析
  18. Python print函数参数详解
  19. python基础===猴子补丁
  20. Ubuntu 16.04开启SFTP服务

热门文章

  1. Rpgmakermv(32) Yep_mainmenumanager
  2. Rpgmakermv(30) GameQuest任务插件
  3. Day5 装饰器和文件操作
  4. ID3决策树
  5. 13年总结js,css,java xml
  6. tomcat1章1
  7. 75.Java异常处理机制throws
  8. [转载]css代码优化的12个技巧
  9. Linux账号管理
  10. java -cp &amp; java jar的区别