信息学中的组合数学

信息学中的组合数学

本文为对于唐文斌的《信息学中的组合数学》的一个总结。

基础知识

排列与组合

组合数:从\(N\)个元素中选取\(M\)个元素,选取顺序无关,记做\(C(N, M)\)
\(C(N, M)=\frac{N!}{M!(N-M)!}=C(N-1, M-1)+C(N-1, M)\)

排列数:从\(N\)个元素中选取\(M\)个元素,选取顺序有关,记做\(P(N, M)\)
\(P(N, M)=\frac{N!}{(N-M)!}\)

容斥原理

设有\(n\)条件\(A\),满足至少一个条件的答案
\(|A_1 \cup A_2 \cup ... \cup A_n|=(|A_1|+|A_2|+...+|A_n|)-(|A_1 \cap A_2|+|A_1 \cap A_2|+...+|A_1 \cap A_n|+...+|A_{n-1} \cap A_n|)+...+(-1)^{n-1}|A_1 \cap A_2 \cap ... \cap A_n|\)

欧拉函数

欧拉函数\(\varphi(n)\)是小于\(n\)且与\(n\)互质的数的个数.
\(p_i\)\(n\)的质因子,\(n\)共有\(k\)个质因子,则

\[n=\prod_{i=1}^{k} p_i^{a_i} \]

\[\varphi(n)=n-(\frac{n}{p_1}+\frac{n}{p_2}+...+\frac{n}{p_k})+(\frac{n}{p_1p_2}+\frac{n}{p_1p_3}+...\frac{n}{p_{n-1}p_n})+...+(-1)^k \frac{n}{p_1p_2...p_k} \]

\[=n\prod_{i=1}^{k}(1-\frac{1}{p_i}) \]

给定一个集合\(G\)和二元运算\(“·”\),满足:
封闭性:若\(a,b \in G\),则\(a·b \in G\)
结合律:\((a·b)·c=a·(b·c)\)
存在单位元\(e:a·e=e·a=a\)
存在逆元素:\(b=a-1,a·b=b·a=e\)
那么就称集合\(G\)在运算\(“·”\)下是一个群。

置换群

由置换组成的群。
一个置换就是一个n元集合到其自身的一一映射。例如

\[\begin{pmatrix} 1, 2, 3\\ 3, 1, 2 \end{pmatrix} \]

Burnside引理

\(G\)\(N=\){\(1,2,3,…,n\)}上的置换群,\(G\)\(N\)上可引出不同的等价类,其不同的等价类个数

\[l=\frac{1}{|G|}|c_1(a_1)+c_1(a_2)+…+c_1(a_g)| \]

其中\(c_1(a_k)\)表示在置换\(a_k\)作用下保持不变的元素的个数。

Pólya定理

\(m\)着色,在某个置换\(P\)下, 不动点个数:\(m^{c(P)}\),\(c(P)\)为置换\(P\)的循环个数.

不相邻的组合

题目描述:给定\(N\)个球排成一行, 取\(M\)个不相邻的球的方案个数。

solution
这道题的DP方法比较简单,所以这里就不讨论了。
假设第\(i\)个球取得位置是\(a_i\),那么\(a_i+1<a_{i+1}\),设\(b_i=a_i-(i-1)\)(然而我并不知道这个是怎样想出来的),那么\(b_i<b_{i+1}\),所以答案就是\(C(n-(m-1), m)\).

扩展\(n\)个球围成环。
只要把第一个数是否选择进行分类即可。

逆序对排列数

题目描述:包含\(K\)个逆序对的长度为\(N\)的排列个数。

solution
DP, 设\(f[i][j]\)为决策到数字\(i\),有\(j\)个逆序对的排列数。

\[f[i][j]=\sum_{p=0}^{min(i-1, K)} f[i-1][j-p] \]

加个部分和就可以变成\(O(n^2)\).

堆的种类

题目描述:将\(1…n\)按任意顺序插入堆中,求不同的堆的个数,输出方案数模\(m\)

solution
\(f[i]\)为堆的元素的个数,枚举左儿子的个数\(j\)

\[f[i]=\sum_{j=0}^{i-1} C(i-1, j)*f[j]*f[i-1-j] \]

Permutation Counting

题目描述:求满足有\(k\)个位置\(a_i>i\)\(n\)排列个数

solution
假设一个排列\(a\),\(i\)\(a_i\)连边,题目的条件就是向后连的边。设\(f[i][j]\)表示长度为\(i\)的排列,有\(j\)个位置满足条件,现考虑把\(i\)插入。
假设位置\(j\)\(i\)的值交换,
1、位置\(j\)向后连边。那么交换后\(j\)依然向后连边,而\(i\)则是向前连边,所以向后连得边的数量不变。
2、位置\(j\)向前或自己连边。那么交换后\(j\)向后连边,\(i\)则是向前连边,所以向后连边的数量加一。
3、数字\(i\)就放在位置\(i\),向后连得边的数量不变。

\[f[i][j]=f[i-1][j]*j+f[i-1][j-1]*(i-1-(j-1))+f[i-1][j] \]

着色方案

题目描述:有\(n\)个木块排成一行,现在有\(k\)种油漆,第\(i\)种油漆恰好足够给\(c_i\)个木块染色,且\(c_1+c_2+…+c_k=n\)。求任意两个相邻的木块不同色的方案数。

solution
由于数据比较小, 所以设一个\(c+1\)维数组,第\(i\)维表示剩下\(i\)次的油漆有多少种以及最后用的那种油漆还剩多少。递推式比较难表达,但比较容易想,这里就不写了。

生成树计数

题目描述\(N\)个点成链状,距离不超过\(k\)的有边相连。求生成树个数。

solution
因为\(k\)最大是\(5\)\(k\)个点的连通性用最小表示法表示后只有\(52\)种状态, 现新加一个点,删掉最前的点,状态转移可以求出。构造状态转移矩阵,用矩阵乘法求解。

互质求和

题目描述:求出所有与\(n\)互质的数的和。

solution
\(p_i\)\(n\)的质因子,\(n\)共有\(k\)个质因子,则

\[n=\prod_{i=1}^{k} p_i^{a_i} \]

\[S=\frac{(1+n)n}{2}-(\frac{(n+p_1)n}{2p_1}+\frac{(n+p_2)n}{2p_2}+...+\frac{(n+p_k)n}{2p_k})+(\frac{(n+p_1p_2)n}{2p_1p_2}+\frac{(n+p_1p_3)n}{2p_1p_3}+...\frac{(n+p_{n-1}p_n)n}{2p_{n-1}p_n})+...+(-1)^k \frac{(n+p_1p_2...p_k)n}{2p_1p_2...p_k} \]

\[=\frac{n^2}{2}\prod_{i=1}^{k}(1-\frac{1}{p_i})+\frac{n}{2}(\sum_{i=0}^{k}C_n^i) \]

\[=\frac{\varphi(n)n}{2} \]

带约束的整数方程

题目描述:求方程\(x_1+x_2+…+x_m=n\)的解的个数.满足:
\(L_i≤x_i≤R_i\)

solution
\(y_i=x_i-L_i, n=n-\sum_{i=1}^m L_i\),则原题变为

\[\sum_{i=1}^m y_i=n (y_i<=R_i-L_i) \]

\(f[i][j]\)为前\(i\)\(y_i\)的和为\(j\)的方案数。DP即可求解。

Candy

题目描述:有\(n\)种糖果,第\(i\)种糖果有\(m_i\)个,求吃掉至少\(a\)个,不超过\(b\)个糖果的方案数模2004。

solution
问题可转化为求吃掉不超过\(lim\)个糖果的方案数,答案为不超过\(b\)的方案减去不超过\(a-1\)的方案。
假设每种糖果没有上限,那么答案就是\(C_{lim+n-1}^{n-1}\),由于现在有上限,所以可以尝试用容斥原理,就可以算出全都没有超出的方案数。
假设超出上限的糖果为\(x_i\),也就是说这些糖果至少吃了\(\sum_i (m_{x_i}+1)\)颗,那么可以用\(lim\)减去这些糖果,那么现在对于每种糖果都没有上限了,就可以直接用组合数求解。

COCI 2010R4. Palacinke

题目描述:有\(n\)个点\(m\)条单向边的图,每条边上有BJMP四种东西中的若干样。现在要从节点\(1\)出发,经过\(T\)条边之后回到节点\(1\),满足经过的这些边上BJMP都出现了的方案数模5557。

solution
\(f[i][j][sett]\)表示经过\(i\)条边后到达\(j\)号点,且BJMP集合为\(sett\)的方案数。由于\(T\)比较大,且\(f[i]\)只与\(f[i-1]\)有关,所以考虑构造状态转移矩阵,然后用矩阵乘法求解。时间复杂度是\(O((2^4n)^3logT)\),还是会超时,所以要压缩一下转移矩阵的大小。
可以考虑用容斥原理,枚举经过的边上集合要是哪个集合的子集。因为到达终点有BJMP的方案=-经过B子集的边-经过J子集的边-经过M子集的边-经过P子集的边+经过BJ子集的边+...+经过BJMP子集的边。那么只需枚举集合,状态转移矩阵就变成\(n*n\).时间复杂度变成\(O(2^4n^3logT)\)

置换开根

题目描述:给定一个置换\(p\), 求置换\(q\)满足: \(q^2=p\)

\[\begin{pmatrix} 1, 2, 3\\ 3, 1, 2 \end{pmatrix}^2= \begin{pmatrix} 1, 2, 3\\ 2, 3, 1 \end{pmatrix} \]

solution
一个置换可以看成很多个环,一个偶环的平方可能是两个偶环,也可能是两个奇环,一个奇环的平方还是一个奇环,根据这个来构造解即可。

其实对于群,置换之类的知识我也不是很熟悉,也不打算深入了解,所以就在此置笔了。

posted @ 2016-04-17 19:34  GerynOhenz  阅读(837)  评论(0编辑  收藏  举报