蒟蒻の笔记OI中组合数学

Posted WangManhe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蒟蒻の笔记OI中组合数学相关的知识,希望对你有一定的参考价值。

组合数学

这东西作为csp初赛常驻题目,有时也会在程序题里ex人,所以,这一块的基础一定要打牢


组合数学概述

两大原理

这里指的是加法原理和乘法原理

加法原理

加法原理即把同阶段的不同的情况相加,举个形象的例子:

从一个城市到另一个城市,有 n n n条公路,同时又有 m m m条铁路,则总共有 n + m n+m n+m种方法

乘法原理

乘法原理即把不同阶段的选择数相乘,举个例子

从a城市经过b城市到c城市,从a到b有 n n n条路,从c到b有 m m m条路,则从a经过b到c有 n ∗ m n*m nm条路径

排列数和组合数

下面我们了解一下组合数学的两大基本运算

C n m C_n^m Cnm表示在 m m m不同的物体中 n n n选择n个的方案数,叫做组合数,有

C n m = n ! m ! ( n − m ) ! C_n^m=\\fracn!m!(n-m)! Cnm=m!(nm)!n!

A n m A_n^m Anm表示在 m m m不同的物体中 n n n选择n个排成序列的方案数,叫做排列数,有

A n m = n ! ( n − m ) ! A_n^m=\\fracn!(n-m)! Anm=(nm)!n!

这样我们就解决了两个最基本的问题

下面我们来看一下原理(我用容易理解的方法讲一下):

先看排列数 A n m A_n^m Anm,对于待选的序列,第一项有 n n n个选择,第二项有 n − 1 n-1 n1个,一次类推,第 m m m项有 n − m + 1 n-m+1 nm+1个,根据乘法原理,把它们相乘,总共即为从 n n n乘到 n − m + 1 n-m+1 nm+1,也就是, A n m = n ! ( n − m ) ! A_n^m=\\fracn!(n-m)! Anm=(nm)!n!

下面再看组合数 C n m C_n^m Cnm,它和排列数的区别在于排列数区分了物品的顺序,而组合数没有,那么就可以直接把有序转化成无序,即 C n m = A n m m ! C_n^m=\\fracA_n^mm! Cnm=m!Anm,代入得 C n m = n ! m ! ( n − m ) ! C_n^m=\\fracn!m!(n-m)! Cnm=m!(nm)!n!

其他实用的数

各个伟大的前辈们已经为我们整理出了一套完整的组合数学体系,其中除组合数和排列数外,还有其他的数,全部与排列组合有关

Catalan数

我没看到Catalan数的标准表示法,就自己随便写吧

首先我们来看一组题目(也可以想想为什么是一组)

已知一个凸n边型,众所周知,它可以划分为n-1个三角形,求有多少种划分方法

已知一棵二叉树,有n个节点,求这课二叉树有几种情况(注意二叉树区分左右子树)

已知n对括号,求有多少个括号序列正确匹配

有n个序列依次进栈,求有多少种合法的出栈序列

一个长度为n的序列全部由1和-1组成,要求多少个序列满足所有前缀和为非负数

由于OIer对二叉树的喜爱与赞美之情我们从第二个问题入手
令当前问题的答案为 h n h_n hn,显然,我们必须要选一个根节点,剩下的节点就被分成左子树和右子树,于是我们得到递推式:
h n = ∑ i = 0 n − 1 h i h n − i − 1 ( h 0 = h 1 = 1 ) h_n=\\sum_i=0^n-1 h_ih_n-i-1 \\left(h_0=h_1=1\\right) hn=i=0n1hihni1(h0=h1=1)

这就是Catalan数的递推式,显然,只要符合这个递推式就是Catalan数,我们代入剩下的问题就知道了——其实这几个问题的答案完全相同

同时我们还可以得到一些其他公式:
一阶递推公式: h n = 4 n − 2 n + 1 h n − 1 h_n=\\frac4n-2n+1h_n-1 hn=n+14n2hn1
一个通项公式: h n = C n 2 n − C n + 1 2 n h_n=C_n^2n-C_n+1^2n hn=Cn2nCn+12n
另一个更常用的通项公式: h n = 1 n + 1 C n 2 n h_n=\\frac1n+1C_n^2n hn=n+11Cn2n

来来来,开推:
(以下这小段参考了这篇博客

我们记
C ( x ) = ∑ n ≥ 0 h n x n C(x)=\\sum_n\\geq 0h_nx^n C(x)=n0hnxn(n为整数)
显然,当 n = 0 n=0 n=0时,有 h n x n = 1 h_nx^n=1 hnxn=1(此时h_0=1,x^0同样等于1)
于是把 n = 0 n=0 n=0的情况特殊考虑就有
∑ n ≥ 1 h n x n = C ( x ) − 1 \\sum_n\\geq 1h_nx^n=C(x)-1 n1hnxn=C(x)1
对于式子的左边,我们把 h n h_n hn代入得到:
∑ n ≥ 1 h n x n = ∑ n ≥ 1 ∑ i = 0 n − 1 h i h n − i − 1 x n \\sum_n\\geq 1h_nx^n=\\sum_n\\geq 1\\sum_i=0^n-1 h_ih_n-i-1x^n n1hn以上是关于蒟蒻の笔记OI中组合数学的主要内容,如果未能解决你的问题,请参考以下文章

博主自传——蒟蒻的OI之路

关于OI本地简易评测姬3.0发布的通知

警钟长鸣

NOIP2017总结

OI 退役记

BZOJ3209 花神的数论题 组合数 + 按位计数