组合数学

🪶两大原理

加法原理

一件事情可以分类完成。

\(\\\)

乘法原理

一件事情可以分步完成。

\(\\\)

\(\\\)

🪶公式

排列及计算公式

\(n\)个不同的元素中取出\(m\)个拍成一列(考虑顺序)。

\(A_n^m=\frac{n!}{(n-m)!}\)

\(\\\)

组合及计算公式

\(n\)个不同的元素中取出\(m\)个组成一个集合(不考虑顺序)。

\(C_n^m=\frac{n!}{(n-m)!m!}\)

一些性质

  • \(C_n^m=C_n^{n-m}\)

  • \(C_n^m=C_{n-1}^m+C_{n-1}^{m-1}\)

  • \(C_n^0+C_n^1+C_n^2+…+C_n^n=2^n\)

杨辉三角公式

递推公式\(c[i][j]=c[i-1][j]+c[i-1][j-1]\)

c[0][0]=1;
    c[1][0]=1;c[1][1]=1;
    for(int i=2;i<=2010;i++){
        c[i][0]=1;
        for(int j=1;j<=i;j++){
            c[i][j]=(c[i-1][j]%k+c[i-1][j-1]%k)%k;
        }   
    }

\(n\)行第\(m\)列代表\(C_{n}^{m}\)

\(\\\)

\(\\\)

\(\\\)

🪶计算组合数

前提条件:\(1\)~\(n\)都存在模\(p\)的乘法逆元

\(C_n^m\)

  • 先计算\(n!\) mod p
  • 计算\(m!(n-m)!\) mod p的逆元
  • 复杂度\(O(n)\)

\(\\\)

\(C_j^i(j\le n,i\le m)\)

  • 预处理出前缀积\(jc\%\) mod

  • 计算出jc_inv\(_{n}\),递推出jc_inv\(_{1-n}\)

  • 可以实现\(O(n)\)预处理,\(O(1)\)查询。

\(\forall i\epsilon[1,n] gcd(i,p)=1\),那么这些数中一些数的乘积与p的gcd也为1。

for(int i=1;i<=n;i++)
        jc[i]=jc[i-1]*i%mod;
    jc_inv[n]=qpow(jc[n],mod-2,mod);
    for(int i=n;i>=1;i--)
        jc_inv[i-1]=(jc_inv[i]*i)%mod;

\(\\\)\(\\\)

\(\\\)

\(\\\)

🪶二项式定理

\((a+b)^n=\sum_\limits{k=0}^{n}C_n^ka^kb^{n-k}\)

\(\\\)

\(\\\)

🪶多重集

多重集是指包含重复元素的广义集合。

设多重集\(S={n_1*a_1,n_2*a_2,…,n_k*a_k}\)是由\(n_1\)\(a_1\),\(n_2\)\(a_2\)\(n_k\)\(a_k\)组成的多重集。

排列数

\(\frac{n!}{n_1!n_2!…n_k!}\)

\(\\\)

组合数

设整数\(r\le n_i\ \forall i\epsilon[1,k]\)。从\(S\)中取出\(r\)个元素组成一个多重集,产生的不同多重集的数量为

\(C_{k+r-1}^{k-1}\)

\(\\\)

\(\\\)

🪶排列

圆排列

\(n\)个人围成一圈,全排列为\(\frac{n!}{(n-n)!\times n}=(n-1)!\)

\(n\)个人中选\(r\)个人围成一圈,部分排列为\(\frac{n!}{r!(n-r)!}\times(r-1)!=\frac{n!}{r\times (n-r)!}\)

\(\\\)

错排列

\(1\)~\(n\)个数全都不在对应的位置上

\(f[1]=0,f[2]=1,f(n)=(n-1)(f(n-1)+f(n-2))\)

\(\\\)

\(\\\)

🪶卡特兰数

本质上是匹配关系,给定\(n\)\(0\)\(n\)\(1\),它们按照某种顺序排成长度为\(2n\)的序列,满足任意前缀中\(0\)的个数不少于\(1\)的个数的序列的数量。

递推公式:\(c[n]=\sum_{ k=0}^{n-1}c[k]c[n-k-1]\)

另类递推式:\(c[n]=\frac{c[n-1]\times (4n-2)}{n+1}\)

\(0\)~\(5\)项:

1,1,2,5,14,42

以下问题都与卡特兰数有关:

  • \(1,2,…,n\)经过一个栈,合法
  • \(n\)个左括号和\(n\)个右括号组成的合法括号序列的数量
  • \(n\)个节点构成的不同二叉树的数量
  • 在平面直角坐标系上每一步,只能向上走或向右走,从\((0,0)\)走到\((n,n)\)并且出两个端点外不接触直线\(y=x\)的路线数量为\(2Cat_{n}\)

\(\\\)

\(\\\)

🪶鸽巢原理

\(kn+1\)个物体,划分为\(n\)组,那么至少一组有\(k+1\)个(或以上)的物品。

\(\\\)

\(\\\)

🪶容斥原理

\(S_1,S_2,…,S_n\)为有限集合,\(|S|\)表示集合大小,则:

\(\left | \bigcup\limits_{i=1}^{n}S_i \right | =\sum_\limits{i=1}^{n}|S_i|-\sum_\limits{1\le i<j\le n}\left | S_i\bigcap S_j\right | +\sum\limits_{1\le i<j<k\le n}\left | S_i\bigcap S_j\bigcap S_k\right |+…(-1)^{n+1}\left | S_i\bigcap …\bigcap S_n\right |\)

posted @ 2021-10-07 07:07  RapunzelOnly  阅读(185)  评论(0)    收藏  举报