组合数学入门 Day1
参考教材是清华大学出版社《组合数学》第五版。
第一章 如何组CP 组合(C)与排列(P)
1.1 加法法则和乘法法则
⚠两类事件性质无关,否则考虑容斥原理。
1.2 一一对应法
⚠一一对应的证明不仅要说明事件 \(A\) 对应事件 \(B\) ,也要说明 \(B\) 对应 \(A\) 。
Cayley定理:\(n\) 个点的有编号无根树有 \(n^{n-2}\) 种。
证明方法就是用一一对应的思想,转化为一个 \(n-2\) 的数列,即 Prufer 数列。
Prufer 数列
树转数列
- 选出编号最小的叶子节点。
- 数列中加入与该叶子节点相连节点的编号。
- 在树上删除该叶子节点。
- 重复上述过程,直到树上只剩下两个节点。
数列转树
理解一下上述过程:
- 叶子节点肯定不在 Prufer 数列中。
- 找出的叶子节点是编号最小的。
- 删除一个叶子后,仍然保持树的结构,可以看成一个子问题。
所以可倒推出以下过程:
- 在数列中取出最前面的元素 \(x\)。
- 树点集中找到编号最小的且未在数列中出现的元素 \(y\)。
- 连边 \((x,y)\),然后分别删除 \(x,y\)。
- 重复上述过程,直到点集中剩下两个节点, 直接连边。
常用性质
- 点度=数列中该点编号出现次数。
- 一棵 \(n\) 个点的无根树唯一对应一个长度为 \(n-2\) 的数列,数列内每个数 \(\in[1, n]\)。
- Caylay 定理(见上)。
- 由 3 可知,\(n\) 个点的有编号有根树有 \(n^{n-2}\times n = n^{n-1}\) 种。
1.3 排列与组合
排列:考虑顺序。组合:不考虑顺序。
\(P(n,m)=\frac{n!}{(n-m)!}=n^{\underline m}\),其中 \(n^{\underline m}\) 表示 \(n\) 的 \(m\) 阶下降幂,定义式等同于排列 \(P(n,m)\)。
- \(n^{\underline n} = n!\)
\(C(n,m)=\frac{n!}{m!(n-m)!}=\frac{n^{\underline m}}{m!}\)
一些技巧:打包法,隔板法,合法=全体-非法……
1.4 圆周排列
\(Q(n,m)=\frac{P(n,m)}{m}\)
1.5 排列的生成算法
序数法
由 \(n!-1=\sum_{k=1}^{n-1}k\cdot k!\),可得 \([0, n!)\) 以内的整数 \(m\) 可以唯一地表示为
简单尝试一下,发现这很类似进制转换。(震惊)
所以 \([0, n!)\) 以内的整数与序数 \((a_{n-1},a_{n-2},\cdots,a_2,a_1)\) 一一对应。
从 \(m\) 求序数也可以用类似进制转换的思路:
所以一个 \(n\) 个元素(不妨令 \(i\) 为 \(1,2,\cdots, n\) )的全排列可以与序数 \((a_{n-1},a_{n-2},\cdots,a_2,a_1)\) 一一对应。
对应规则为:\(a_i\) 表示排列中元素 \(i+1\) 右(左)侧比 \(i+1\) 小的数的个数。如序数 \((3,1,1)\) 对应排列 \(4,2,3,1\) 。
字典序法
C++ STL中的 next_permutation 。
换位法(感觉没啥用)
To be continued...

浙公网安备 33010602011771号