组合数学(第一章 预备知识)

一、几何、关系、函数


集合: 集合分为无重集和多重集,多重集的元素出现的次数,叫做该元素的重数。
基数: 给定集合A,称A中的元素个数为集合A的基数,记做 | A | 。若 | A | = n ,称A为一个 n-集合
幂集 给定集合A,称A所有子集构成的集合为集合A的幂集,记做 P ( A ) 。易证 | P A | = 2 n

所谓的图便是点集和边集的集合,记做 G = ( V , E ) 。边就是两个点的组成,即为 E ( v 2 ) ,易证 ( v 2 ) = n ( n 1 ) 2
所以易证以V为顶点集的图的个数为 2 n ( n 1 ) 2

划分: 若A的非空子集的集合 P = { A 1 , A 2 , A 3 , , A k } 。满足 A = i = 1 k A i ,则称P是集合A的一个划分
Cartesion积 A B = { ( a , b ) | a A , b B }
可知: | A B | = | A | | B |

自反 是自己指向自己。即对于所有的a, f a = a
对称 所有 ( a , b ) R ,有 ( b , a ) R
传递 ( a , b ) R , ( b , c ) R 。则 ( a , c ) R

等价关系 设R是集合A上的一个二元关系。若R是自反的、对称和传递的。则称R是定义在A上的一个等价关系。即若 ( x , y ) R ,则称x等价于y,记做x ~y。

映射 设 f 是从A到B的一个二元关系。若f满足 | f ( a ) | = 1 (等于1意义着唯一的a->唯一的b),则称为f是从A到B的一个映射。
单射 没有多对一
满射 B被A完全对应。

二、偏序集


偏序集:设X是一个非空集合, P 是定义在 X 上的具有自反性、对称性和传递性的二元关系,则称 ( X , P ) 是一个偏序集, P 为偏序关系。
例1.2.2: 集合A由正整数组成的集合,规定 a b 当且仅当 a | b ,易证是偏序集。
全序集: 任意两个元素之间有序的集合就是全序集。若不存在有序则称为反链。
子偏序集、高度、宽度…… 这些容易理解
易证那么对于整除关系决定的偏序集 ( Z + , | ) ,易证 { m | m = 2 k , k N } 是子偏序集(全序集),那么子偏序集 { p | p i s p r i m e } 是反链。
事实 对于 P 的两个子偏序集 A B A 是链, B 是反链,则 | A B | 1

极小元 极小元是对于偏序集 X ,没有异于a的元素x满足 x a ,则称 a 为极小元;
极大元 极大元是对于偏序集 X ,没有异于a的元素x满足 a x ,则称 a 为极大元;
最小元 最小元是对于偏序集 X ,所有的元素x均满足 a x ,则称 a 为最小元;
最大元 最大元是对于偏序集 X ,所有的元素x均满足 x a ,则称 a 为最大元;
易证: 所有极大元是一个反链,所有极小元也是一个反链。
易证: 设偏序集 ( X , ) 的高度为 n ,则存在划分 X = i = 1 n A i 使每一个Ai都使反链。
Dilworth定理 设有限偏序集 ( X , ) 的宽度为 m ,则存在划分 X = i = 1 m C i ,使每一个 C i 都是链。

三、初等计数方法


分为加法原理乘法原理
组合数: n个元素选取r个,一共有 C n r = n ! r ! ( n r ) ! 。记做 ( n r ) ,读“n选取r”。
那么现在有 r 1 a 1 r 2 a 2 r k a k 。那么就是 ( n r 1 ) ( n r 1 r 2 ) ( n r 1 r 2 r k 1 r k ) = n ! r 1 ! r 2 ! r k ! .
这叫做多重组合数。
排列数 P ( n , r ) = n ( n 1 ) ( n r 1 ) = n ! ( n r ) !
环排列: 从n个不同的元素挑选r个排列成一个圆环,称为环排列。易知r的环排列包括r个线排列。所以情况数为 n ! r ( n r ) 。特殊的,n的环排列为 ( n 1 ) !
例题1.3.5. 8对夫妇坐成一排,每对夫妇都要坐在一起,则有多少种坐法?若围着圆桌坐,有多少种坐法? 2 8 8 ! 2 8 7 !
例 1.3.8. 把集合 { 1 , 2 , , n } 划分成 b 1 个1-子集, b 2 个2-子集…… b k 个k-子集,恰好是集合的一个划分,求这样的分法有多少种? n ! b 1 ! b 2 ! b k ! ( 1 ! ) b 1 ( 2 ! ) b 2 ( k ! ) b k

重点


例: n 个元素,选出基数为 r 多重集的组合数?
这个问题等价于 x 1 + x 2 + + x n = r
这个问题又等价于 r | n 1 + 的序列的个数
所以答案是 ( r + n 1 r )

例题: 字符串NASHVILLETENNESSEE重排列,使第一个N在S之前,并且T在第一个E之后,求组合数?
1、先E再T。 ( 5 1 )
2、先N后S。 ( 5 2 )
3、剩下的。 ( 6 2 , 1 , 1 , 1 , 1 ) = 6 ! 2
4、合并前三个 ( 5 1 ) ( 5 2 ) ( 6 ! 2 ) ( 18 6 , 6 , 6 )

组合恒等式


这里写图片描述
这里写图片描述
字丑见谅。。
Lucas定理:
p为素数,将m,n写成p进制,m=a0+a1*p^1+……+ak * p^k,n同理。
(m,n)==∏ i (0->k) (ai,bi) (mod p)
严谨性证明有点长,不想看了,有兴趣自己百度,或者组合数学 P17。
可以用来快速求组合数。
代码:

const int mod=1009;
ll inv(ll x){
    return x==1?1:(mod-mod/x)*inv(mod%x)%mod;
}
ll C(ll n,ll m){
    if(m<0||n<m)return 0;
    if(m>n-m)m=n-m;
    ll zi=1,mu=1;
    for(ll i=0;i<m;i++){
        zi=zi*(n-i)%mod;
        mu=mu*(i+1)%mod;
    }
    return zi*inv(mu)%mod;
}
ll lucas(ll n,ll m){
     ll ans=1;
     while(n&&m&&ans){
        ans=ans*C(n%mod,m%mod)%mod;
        n/=mod,m/=mod;
     }
     return ans;
}

多项式定理
这里写图片描述
例题: (x1+x2+x3+x4+x5)^10中x1^3 * x2 * x3^4 * x5^2
ans = (10,(3,1,4,0,2))=12600

That’s all。

猜你喜欢

转载自blog.csdn.net/qq_41635132/article/details/81989823