Files
DiscretMathematics/02CombinatorialTools.tex
2022-12-13 18:27:07 +08:00

227 lines
10 KiB
TeX
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
\chapter{组合工具}
\section{归纳法(略)}
见《线性代数》。
\section{估算}
阶乘的估算:$n!$$n$的增大增长迅速。粗略地估计,有$2^{n-1} \leq n! \leq n^{n-1}$
Stirling给出了一个近似公式$n! \sim \sqrt{2\pi n} \left(\dfrac{n}{e}\right)^n$
思路:左边取对数:
\begin{equation*}
\sum \ln{n} \approx \int_1^n \ln{x} \dif x = n \ln{n} - n + 1 \eqper
\end{equation*}
$n\ln{n}$即为$\left(\dfrac{n}{e}\right)^n$取对数,$\sqrt{2 \pi n}$则是一个为了弥补积分与黎曼和的差距的系数。
相对误差:$\toinf \dfrac{n!}{\sqrt{2\pi n}\left(\frac{n}{e}\right)^n} = 1$
绝对误差:$\toinf \left[n! - \sqrt{2 \pi n} \left(\dfrac{n}{e}\right)^n\right] = +\infty$
\section{容斥原理}
\subsection{引言}
容斥原理研究与集合交、并、差有关的技术。在一些问题中,间接计算比直接计算来得简单。
\subsection{容斥原理}
\begin{theorem}[两个集合的容斥原理]
$A$$B$是两个有限的集合,则
\begin{equation*}
\vert A \cup B \vert = \vert A \vert + \vert B \vert - \vert A \cap B \vert \eqper
\end{equation*}
\end{theorem}
\begin{corollary}[加法原理]
$A \cap B = \varnothing$,则$\vert A \cup B \vert = \vert A \vert + \vert B \vert$
\end{corollary}
\begin{corollary}[减法原理]
$\vert A \vert = \vert E \vert - \vert A^\mathrm{C} \vert $$\vert A^\mathrm{C} \vert = \vert E \vert - \vert A \vert$
\end{corollary}
\begin{theorem}[三个集合上的容斥原理]
$A$$B$$C$为任意有限集合,有
\begin{equation*}
\vert A \cup B \cup C \vert = \vert A \vert + \vert B \vert + \vert C \vert - \vert A \cap B \vert - \vert B \cap C \vert - \vert A \cap C \vert + \vert A \cap B \cap C \vert
\end{equation*}
\end{theorem}
\begin{theorem}[$n$个集合上的容斥原理]
$A_1, A_2, \dots , A_n$是有限集合。
\begin{equation*}
\begin{aligned}
\vert A_1 \cup A_2 \cup \dots \cup A_n \vert & = \sum_i^n \vert A_i \vert - \sum_i^n \sum_{j > i} \vert A_i \cap A_j \vert + \sum_i^n \sum_{j>i} \sum_{k > j} \vert A_i \cap A_j \cap A_k \vert - \dots\\
& + (-1)^{n-1}\vert A_1 \cap A_2 \cap \dots \cap A_n \vert \eqper
\end{aligned}
\end{equation*}
\end{theorem}
\begin{theorem}[容斥原理的补集形式]
\begin{equation*}
\vert A_1^\mathrm{C} \cap A_2^\mathrm{C} \cap \dots \cap A_n^\mathrm{C}\vert = \vert E \vert - \vert A_1 \cup A_2 \cup \dots \cup A_n \vert \eqper
\end{equation*}
\end{theorem}
\subsection{容斥原理的应用}
\subsubsection{错排问题}
给定$n$个元素的一个排列,使得所有的元素都不在原来的位置上的排列叫做原排列的{\bf{错排}}
\emph{应用加法原理:}
$1, 2, \dots , n$的的错排数为$D_n$,那么错排可通过如下两种方式得到:
\begin{enumerate}[label=({\arabic*}) ]
\item$n$$i (i = 1, 2, \dots, n-1)$互换,再让剩余$n-2$个数进行错排。共有$(n-1)D_{n-2}$种。
\item$1, 2, \dots , n-1$任意排列,然后把$n$分别与错排后的第1个、第2个……第$n-1$个交换。共有$(n-1)D_{n-1}$种。
\end{enumerate}
综上,由加法原理,有$D_n = (n-1)D_{n-1} + (n-1)D_{n-2}$。由$D_1 = 0, D_2 = 1$,可得$D_0 = 1$
估计:$(n-1)(D_{n-2} + D_{n-1}) \leq D_n \leq n!$,可以知道$D_n$$n!$相差不大,因此可设
\begin{equation*}
D_n = E_n \cdot n! \eqco
\end{equation*}
\begin{equation*}
E_n = \dfrac{D_n}{n!}\eqper
\end{equation*}
那么有
\begin{equation*}
\begin{aligned}
E_n & = \dfrac{(n-1)(D_{n-2} + D_{n-1})}{n!}\\
& = \dfrac{n-1}{n} \cdot \dfrac{D_{n-1}}{(n-1)!} + \dfrac{1}{n} \cdot \dfrac{D_{n-2}}{(n-2)!}\\
& = \left(1 - \dfrac{1}{n}\right)E_{n-1} + \dfrac{1}{n} E_{n-2}
\end{aligned}
\end{equation*}
于是
\begin{equation*}
\begin{aligned}
E_n & = \left(1 - \dfrac{1}{n}\right)E_{n-1} + \dfrac{1}{n} E_{n-2}\\
E_n - E_{n-1} & = - \dfrac{1}{n}(E_{n-1} - E_{n-2})\\
& = \left(-\dfrac{1}{n}\right) \left(-\dfrac{1}{n-1}\right) (E_{n-2} - E_{n-3})\\
& = \dots\\
& = (-1)^{n-1} \dfrac{1}{n!}(E_1 - E_0)\\
& = \dfrac{(-1)^n}{n!}\eqper
\end{aligned}
\end{equation*}
因此
\begin{equation*}
\begin{aligned}
E_n & = \dfrac{(-1)^n}{n!} + E_{n-1}\\
& = \dfrac{(-1)^n}{n!} + \dfrac{(-1)^{n-1}}{(n-1)!} + E_{n-2}\\
& = \dots\\
& = \dfrac{(-1)^n}{n!} + \dfrac{(-1)^{n-1}}{(n-1)!} + \dots + \dfrac{(-1)^1}{2!} \eqper
\end{aligned}
\end{equation*}
\begin{equation*}
D_n = n!\cdot E_n = n!\left(1 - \dfrac{1}{1!} + \dfrac{1}{2!} - \dfrac{1}{3!} + \dots + \dfrac{(-1)^n}{n!}\right) \approx \dfrac{n!}{e} \eqper
\end{equation*}
\emph{应用容斥原理:}$E$:所有$n!$种排列的集合;$A_j$$j$在第$j$位的排列的集合。那么所求错排的集合为
\begin{equation*}
A_1^\mathrm{C} \cap A_2^\mathrm{C} \cap \dots \cap A_n^\mathrm{C} \eqper
\end{equation*}
另外可以看到,
\begin{equation*}
\begin{aligned}
\vert A_j \vert & = (n-1)! \eqco j = 1, 2, \dots, n\\
\vert A_i \cap A_j \vert & = (n-2)! \eqco i, j = 1, 2, \dots, n \text{} i \neq j\\
& \dots\\
\vert A_{i_1} \cap A_{i_2} \cap \dots \cap A_{i_k} \vert & = (n - k)!\eqco\text{共有}\dbinom{n}{k}\text{种组合方式}
\end{aligned}
\end{equation*}
那么
\begin{equation*}
\begin{aligned}
D_n & = \vert A_1^\mathrm{C} \cap A_2^\mathrm{C} \cap \dots \cap A_n^\mathrm{C}\vert\\
& = n! - \dbinom{n}{1}(n-1)! + \dbinom{n}{2}(n-2)! - \dbinom{n}{3}(n-3)! + \dots + (-1)^n\dbinom{n}{n}0!\\
& = n! - \dfrac{n!}{1} + \dfrac{n!}{2} - \dfrac{n!}{3} + \dots + (-1)^n \dfrac{n!}{n!}\\
& = n! \left(1 - \dfrac{1}{1!} + \dfrac{1}{2!} - \dfrac{1}{3!} + \dots + \dfrac{(-1)^n}{n!}\right) \eqper
\end{aligned}
\end{equation*}
\subsubsection{限制排列}
\subsubsection{相对禁位排列}
\section{鸽巢原理}
鸽巢原理是解决存在性问题的基本而有力的工具。
\begin{theorem}
若有$n+1$只鸽子飞回$n$个鸽巢,则至少有两只鸽子飞入了同一个鸽巢。
\end{theorem}
鸽巢原理只能证明某种安排或者某种现象存在,而并未指出怎样构造这样的安排或者怎样寻找这种现象出现的场合。
利用鸽巢原理解决问题的关键就在于看出要解决的问题是鸽巢问题,建立``鸽巢'',寻找``鸽子''。
\begin{example}
在一个边长为1的正三角形中任意取5个点必然有两个点之间的距离不超过$\dfrac{1}{2}$
\end{example}
\begin{proof}
将三角形三边的终点连接,可以将三角形等分成四块。在三角形中取五个点,则一定存在一个部分中有至少两个点。这两个点之间的距离小于$\dfrac{1}{2}$
\end{proof}
\begin{theorem}
$m_1, m_2, \dots , m_n$均为正整数,如果有$m_1 + m_2 + \dots + m_n - n + 1$只鸽子飞回$n$个鸽巢则或者第1个鸽巢至少有$m_1$只鸽子则或者第2个鸽巢至少有$m_2$只鸽子,……,则或者第$n$个鸽巢至少有$m_n$只鸽子。
\end{theorem}
\begin{proof}
反证法假若第1鸽巢少于$m_1$只鸽子第2鸽巢少于$m_2$只鸽子……第n鸽巢少于$m_n$只鸽子,则鸽子总数至多为:
\begin{equation*}
(m_1 - 1) + (m_2 - 1) + \dots + (m_n - 1) = m_1 + m_2 + \dots + m_n -n \eqco
\end{equation*}
这比假定的鸽子数少了一个,矛盾!
\end{proof}
\begin{corollary}
如果$m_1 = m_2 = \dots = m_n = r$,若将$n(r-1)+1$个球放入$n$个盒子中,则至少有一个盒子含有不少于$r$个球。
\end{corollary}
\begin{corollary}
如果$n$个正整数$m_1, m_2, \dots , m_n$的平均数$\dfrac{m_1 + m_2 + \dots + m_n}{n} > r-1$,则$m_1, m_2, \dots, m_n$中至少有一个不会小于$r$
\end{corollary}
\begin{corollary}
$m$个球放入$n$个盒子,则至少有一个盒子中有不少于$\lfloor \dfrac{m-1}{n}\rfloor + 1$个球。
\end{corollary}
\begin{theorem}[Erdös]
$n^2 + 1$个不同实数构成的数列中,存在一个至少有$n+1$项的单调递增子数列或单调递减子数列。
\end{theorem}
\begin{proof}
设原数列为$a_1, a_2, \dots , a_n$
$m_i$表示以$a_i$为第一项的最长递增子列的长度。若有某个$m_i \geq n+1$,则定理得证;
若所有的$m_i$都小于$n+1$,那么所有的$n^2 + 1$$m_i$必然都在$1$$n$之间,这相当于把$n^2 + 1$个球放进$n$个盒子里,于是一定有至少有$n+1$$m_i$相等。我们不妨设$m_{i_1} = m_{i_2} = \dots = m_{i_{n+1}} = m$,且$1 \leq i_1 < i_2 < \dots < i_{n+1} \leq n^2 + 1$
注意到,对任意的$i_j, i_k(j < k)$,当$m_{i_j} = m_{i_k}$时,有$a_{i_j} > a_{i_k}$。这是因为假若$a_{i_j} < a_{i_k}$(题目已申明$\{a_n\}$中数字各不相同,因此两个项不可能相等),那么我们可以将以$a_{i_k}$为第一项的、长度为$m$的递增子数列放在$a_{i_j}$后面得到一个长度为$m+1$的递增子数列,那么$m_{i_j}$就不是$m_{i_k}$而是$m_{i_k}+1$了,这与$m_{i_j} = m_{i_k}$矛盾。因此,$a_{i_1} > a_{i_2} > \dots > a_{i_{n+1}}$
因此我们可以找到如下长度为$n+1$的递减子数列:$a_{i_1} , a_{i_2} , \dots , a_{i_{n+1}}$
\end{proof}
\section{The Twin Paradox生日悖论}
随机找$n(n < 365)$名学生,问有多大可能两人在同一天过生日?
\begin{proof}[解]
$A$:有两个人在同一天过生日。
$A^\mathrm{C}$:所有学生生日彼此不同。
\begin{equation*}
\begin{aligned}
\vert A^\mathrm{C} \vert & = 365 \times 364 \times \dots \times (365-n+1)\\
P(A) & = 1 - P(\setcom{A}) = 1 - \dfrac{\vert \setcom{A} \vert}{365^n}\\
& = 1 - \dfrac{365 \times 364 \times \dots \times (365-n+1)}{365^n}\\
& = 1 - \left(1 - \dfrac{1}{365}\right) \left(1 - \dfrac{2}{365}\right) \dots \left(1 - \dfrac{n-1}{365}\right)\eqper
\end{aligned}
\end{equation*}
$n=22$时,$P(n)$就已经达到了47.57\%;当$n=70$时,$P(n)$则为99.92\%
\end{proof}