算法之组合数学及其算法篇(一) ----- 排列与组合

前言

组合数学研究的对象是组态。所谓组态就是指若干个对象按照某些约束条件组成的各种状态。

排列与组合

在组合数学中,集合分为无重集和重集。
\lbrace表达式\rbrace

  • 无重集即集合中的不同元素只出现一次,指在选取过程中每个元素不可重复选取,也就是至多选取一次。记作, S = { a 1 , a 2 , ⋯ , a k } S=\lbrace a_1,a_2,⋯,a_k\rbrace S={a1,a2,,ak}
  • 重集即集合中的不同元素可出现多次,指在选取过程中每个元素可重复选取。有限重集就是第i个元素a,至多选取n;次。
    记作, = { n 1 ⋅ a 1 , n 2 ⋅ a 2 , ⋯ , n k ⋅ a k } =\lbrace n1⋅a1,n2⋅a2,⋯,nk⋅ak \rbrace ={n1a1,n2a2,,nkak} 其中n,称作a,的重数。
    无限重集指每个不同元素可以任意选取若干次。记作,
    S={ω⋅a1,ω⋅a2,⋯,ω0⋅ak}

无重集的排列与组合

无重集的排列

定义:若集合含有n个不同的元素,从中任选r个的有序编排,则称为排列或r排列。其不同的排列的个数,简称排列数,记作 p ( n , r ) p(n,r) p(n,r)

  1. 定理1: 对 于 r < = n , p ( n , r ) = n ! ( n − r ) ! 对于r <= n ,p(n,r) = \frac{n!}{(n-r)!} r<=n,p(n,r)=(nr)!n!

  2. 定理2: 从n个元素的集合中任取r个的圆排列个数为: p ( n , r ) r \frac{p(n,r)}{r} rp(n,r)。证:由前面的定理,从n个不同元素中任取r个的排列个数。为p(n,r),这种排列又称线排列。将这些排列分成组,每组有r个线排列且产生相同的r圆排列,所以r圆排列的个数为p(n,r)/r。
    特别地,n个元素的圆排列个数为(n-1)!。
    我们举一个例子:
    在这里插入图片描述
    对于一个圆排列abcde , 我们从5个空隙中断开,那么会产生5个线排列。也就是说这5个线排列对应的圆排列是一样的。

应用例子

若男女混座,问6位男士和6位女士围圆桌就座有多少种方式?
解:我们先安排6位男士就座,6位男士的圆排列数为5!,6位男士就座后,每相邻两人之间有一个空位,共6个。刚好安排6位女士,6位女士的全排列数为6!。所以按乘法原理就是 5! * 6!.

无重集的组合

定义:从n个元素的集合S中,任取r个元素且不考虑次序,则称为组合或r组合。其不同的组合个数,简称组合数,记作 C ( n , r ) C(n,r) Cn,r

  1. 定理 对 于 r < = n , C ( n , r ) = p ( n , r ) r ! 对于r<=n,C(n,r) = \frac{p(n,r)}{r!} r<=n,C(n,r)=r!p(n,r)
    例子 :求1~300的整数中,有多少种方法选出三个整数来使得它们的和被3整除?
    解1,2,…,300这300个整数可以分成三组:被3整除者为一组,除以3余1者为一组,除以3余2者为一组,显然,每一组有100个整数。如果三个整数都选自同一组,其和必能被3整除;如果每组选取一个整数,其和也必能被3整除。因此,选择三个整数其和能被3整除的方法总数为
    C(100,3)+C(100,3) +C(100,3)+1003=1485100。
    为什么每一组有100个数呢:我们以余1的为例,对于集合中每一个数我们可以表示成 3 x + 1 3x+1 3x+1,对于个数我们将99代入< 300 ,代入100>300 , 那么我们x的取值为0 - 99 一共100个数。

应用例子

  1. 若一个凸多边形无三条对角线在其内部交于一点,问这些对角线被它们的交点分成多少短:
    凸多边形对角线条数为 C ( n , 2 ) − n C(n,2)-n C(n,2)n,由于每四个点有一个交点,凸多边形交点数为 C ( n , 4 ) C(n,4) C(n,4)。每一个对角线上的K个交点将其分为K+1的线段,那么应该是 ( K 1 + 1 + . . . + K n + 1 ) = ( K 1 + . . . + K n ) + n (K_1+1+...+K_n+1) =(K_1+...+K_n)+n (K1+1+...+Kn+1)=(K1+...+Kn)+n,其中n为对角线条数,由于一个交点位于两条对角线上,所以总数为 ( C ( n , 2 ) − n ) + 2 ∗ C ( n , 4 ) (C(n,2)-n)+2*C(n,4) (C(n,2)n)+2C(n,4)
  2. 1000!后边有多少个0?
    1到1000中2的个数远多于5的个数,2*5可得到一个0。

所以求得1到1000中有多少个5就可以求得1000!的末尾有几个0.

分析

5的1次幂5的倍数增加1个0 (5,10,15,20,25,30,…)
5的2次幂25的倍数增加2个0(必然是5的倍数)(25,50,75,100,125…)
5的3次幂125的倍数增加3个0(必然是25的倍数)(125,250,375,500…)
5的4次幂625的倍数增加4个0(必然是125的倍数)(625,1250,1875,2500…)

所以先求出5的倍数
加上25的倍数(2个0,其中1个已记入5的倍数)
加上125的倍数(3个0,其中1个已记入5的倍数1个已记入25的倍数)
加上625的倍数(4个0,其中…)

1000/5=200 (1000里面含有200个5的倍数,但同时也包含了25倍数,125的倍数,625的倍数各一次)

1000/25=40(1000里面含有40个25的倍数,同时也含有125的倍数,625的倍数各一次)

1000/125=8(1000里面含有8个125的倍数,同时也含有625的倍数)

1000/625=1(1000里含有1个625的倍数)

所以1000!里面含 有0的个数为200+40+8+1=249个

重集的排列和组合

重集的排列

  1. 定理1 : 若S是含有K个不同元素而每一个元素具有无限重复的重集,则S的r排列的个数是 k r k^r kr 。因为是无限重复的,那么对于每一个元素我们都有K种选法,选r个,因此就是 k r k^r kr
  2. 定理2:设重集S有k个不同元素 a 1 , a 2 , … , a k a_1,a_2,…,a_k a1a2ak,其有限重复数分别为 n 1 , n 2 , ⋯ , n k n_1,n_2,⋯,n_k n1,n2,,nk,且 n = n 1 + n 2 + ⋯ + n k n=n_1+n_2+⋯+n_k n=n1+n2++nk,则S的排列个数(指的是所有元素的排列)等于: n ! n 1 ! ∗ n 2 ! . . . ∗ n k ! \frac{n!}{n_1! * n_2!...*n_k!} n1!n2!...nk!n!

重集的组合

  1. 若S是重集,则S的r组合是不考虑次序地从S中选择r个元素,因此,S的r组合通常是一个子重集。如果S有n个元素,则只存在一个S的n组合。
  2. 定理1 :设S是有K个不同元素的重集,且每个元素的重复次数无限,则S的r组合个数等于 C ( k − 1 + r , r ) C(k-1+r,r) C(k1+r,r) . 证明: 设S的不同元素是 a 1 , a 2 , … , a k a_1,a_2,…,a_k a1a2ak,因而 S = { ∞ ∗ a 1 , ∞ ∗ a 2 , . . . . , ∞ ⋅ a k } S=\lbrace \infty *a_1,\infty *a_2,....,\infty⋅a_k \rbrace S={a1,a2,....,ak}. S的任何r组合形如 { x 1 ∗ a 1 , x 2 ∗ a 2 , ⋯ , x k ∗ a k } \lbrace x_1*a_1,x_2*a2,⋯,x_k *a_k \rbrace {x1a1,x2a2,,xkak},其中 x 1 , x 2 , … , x k 是 非 负 整 数 且 x 1 + x 2 + ⋯ + x k = r x_1,x_2,…,x_k是非负整数且 x_1+x_2+⋯+x_k=r x1x2xkx1+x2++xk=r 反之,任何满足 x 1 + x 2 + ⋯ + x k = r 的 非 负 整 数 序 列 x 1 , x 2 , . . . , x k 对 应 S 的 一 个 r 组 合 x_1+x_2+⋯+x_k=r 的非负整数序列x_1,x_2,...,x_k对应S的一个r组合 x1+x2++xk=rx1x2...,xkSr 于 是 S 的 r 组 合 个 数 等 于 方 程 x 1 + x 2 + ⋯ + x k = r 的 非 负 整 数 解 的 个 数 于是S的r组合个数等于方程 x_1+x_2+⋯+x_k=r 的非负整数解的个数 Srx1+x2++xk=r
    可以证明这些解的个数等于重集 T = { ( k − 1 ) ∗ 0 , r ∗ 1 ) } T = \lbrace (k-1) *0 , r * 1) \rbrace T={(k1)0,r1)}排列个数。给定T的一个排列,这(k-1)个0把r个1分成k组。令 x 1 x_1 x1个1在第一个0的左边, x 2 x_2 x2个1在第一个0和第二个0之间,…, x k x_k xk个1在最后一个0的右边, 而 x 1 , x 2 , . . . , x k 是 非 负 整 数 且 x 1 + x 2 + … + x k = r 而x_1,x_2,...,x_k是非负整数且x_1+x_2+…+ x_k=r x1x2...xkx1+x2++xk=r。 反之,给定非负整数 x 1 , x 2 , … , x k , 且 x 1 + x 2 + ⋯ + x k = r , x_1,x_2,…,x_k,且 x_1+x_2+⋯+x_k=r, x1x2xk,x1+x2++xk=r,可按相反步骤构造T的一个排列。于是:重集S的r组合个数等于重集T-{(k-1)·0,r·1}的排列个数。而重集T的排列个数就是有限重复集的排列个数,由上面公式,T的排列个数等于
    ( k − 1 + r ) ! ( k − 1 ) ! ∗ r ! = C ( k − 1 + r , r ) \frac{(k−1+r)!}{(k−1)!*r!}=C(k−1+r,r) (k1)!r!(k1+r)!=C(k1+r,r) 证毕。

对于上面的结果和推导过程,对于重集T的由来,我么可以类比隔板法,(由方程我们可以将r看成r个1)我们有r个一样的球,我们将其放入k个盒子,可以允许有空盒的方案数。我们用隔板法得到的结果是一样的。
那么由这个我们就可以求出 x 1 + x 2 + . . . + x k = r x_1 + x_2+...+x_k = r x1+x2+...+xk=r的非负整数解的个数就是 C ( k − 1 + r , r ) C(k−1+r,r) C(k1+r,r) , 而这就是 ( x 1 + . . . + x k ) r 的 项 数 ( x_1 + ...+x_k)^r的项数 (x1+...+xk)r

  1. 定理2 : 设重集S有K个不同元素 a 1 , a 2 , . . . , a k a_1,a_2,...,a_k a1,a2,...,ak的重集,且每个元素有无限重复次 。若要求S的每个元素至少在r组合出现一次,则S的这种r组合个数等于 C ( r − 1 , k − 1 ) , r > = k C(r-1,k-1),r>=k C(r1,k1),r>=k ,这就是隔板法的理论依据。也就是方程 x 1 + . . . , + x k = r , x i > = i x_1 +...,+x_k = r, x_i >=i x1+...,+xk=r,xi>=i的正整数的解的个数。
  2. 定理2的推论: 将r个相同的元素放入n个不同的盒子而使每个盒子至少含有q个元素的分配方法的个数为 C ( n − n q + r − 1 , n − 1 ) C(n-nq+r-1,n-1) C(nnq+r1,n1)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落春只在无意间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值