计数问题学习笔记

计数问题学习笔记

组合计数

插板法: 略

阶乘幂:

上升阶乘幂:

\[(x)^{(n)} = x(x+1)(x+2)\cdots(x+n-1) = \frac{(x+n-1)!}{(x-1)!} \]

下降阶乘幂:

\((x)_{(n)}\)

卡特兰数:

定义式

\[h_n = \displaystyle\sum^{n-1}_{k=0}h_kh_{n-1-k} \]

通项式

\[h_n = \tbinom{2n}{n}-\tbinom{2n}{n-1} = \frac{\tbinom{2n}{n}}{n+1} \]

应用: 括号序列数量, 方格行走数, 凸多边形划分数, 二叉树数量

通项证明:

2n步选n步向斜上走方案数为\(\tbinom{2n}{n}\)

如果走到负区域, 则一定与2n步选n-1步斜向上走的方案数相同

在一条路径第一次触到直线y=-1时, 将其以后的路径关于y=-1对称

走2n步最终到达点(2n, -2)

每一条到达点(2n, -2)的路径都可以如此转化

第一类斯特林数:

$ S_u(n, m)$表示n个不同元素构成恰好m个圆排列的方案数

\(S_u(n,m) = S_u(n-1,m-1) + (n-1) * S_u(n-1,m)\)

有符号: \(S_s(n, m) = (-1)^{n+m}S_u(n,m)\)

有符号的生成函数: \((x)_{(n)}\) (x的n次下降幂)

第二类斯特林数:

\(S(n,m)\)表示n个不同元素拆分成m个非空集合方案数

\[S(n,m) = S(n-1,m-1) + m * S(n-1, m) \]

生成函数

\[S(n,m) = \frac{1}{m!}\sum(-1)^k\tbinom{m}{k}(m-k)^n \]

贝尔数为第二类斯特林数之和

拆分数:

\(f_n\)表示大小为n的正整数拆分成若干无序的正整数之和的方案数

dp求解

方案一:

f[i][j]表示拆分成若干不超过j的方案数

f[i][j] = f[i-j][j] +f[i][j-1]

方案二:

g[i][j]表示拆分j个数字的方案数

g[i][j] = g[i-1][j] + g[i-j][j]

优化:

易知任意一个复杂度都是\(n^2\)

结合两者, 复杂度为\(n\sqrt{n}\)

首先用方案一跑出所有用不超过\(\sqrt{n}\)数字大小拼出1~n的方案数

复杂度\(n\sqrt{n}\) 存疑

生成函数

基础闭形式:

\(\sum_{n \ge 0} x^n=\frac{1}{1-x}\)

\(\sum_{n \ge 1} x^n=\frac{x}{1-x}\)

\(\sum_{n \ge 1} x^n=x*(\sum_{n \ge 0} x^n)\)

\(\sum_{n \ge 1} n x^n=\)?

\((\sum_{n \ge 0} x^n)'=(\frac{1}{1-x})'\)

\(\sum_{n \ge 0} (n+1)x^n=\frac{1}{(1-x)^2}\)

\(\sum_{n \ge 0} (n+1)x^{n+1}=\frac{x}{(1-x)^2}\)

\((\sum_{n \ge 0} x^n)*(\sum_{n \ge 0} x^n)=\sum_{n \ge 0} (n+1)x^n=\frac{1}{(1-x)^2}\)

\(\sum_{n \ge 0} \frac{1}{n!}x^n=e^x\)

  • 加法意义: 合并

  • 乘法意义:拼接

例: 求斐波那契数列的通项公式

因为F(x) = F(x-1) + F(x-2)

\[~~~~~~F(0)~~~F(1)~~~~F(2)~~~~F(3)~~~~F(4)\\~~~~~~~~~~~~~~~~~ F(0)~~~~F(1)~~~~F(2)~~~~F(3)\\​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~F(0)~~~~F(1)~~~~F(2) \]

发现最上面的生成函数由下面两个推出

所以\(F(x) = x \cdot F(x-1) + x^2 \cdot F(x-2)\) + 1

解得F(x)的闭形式为\(\frac{1}{1-x-x^2}\)

那么如何求通项公式呢?

前置:

\(\sum_{n \ge 0} x^n=\frac{1}{1-x}\)

\(\sum_{n \ge 0} (kx)^n=\frac{1}{1-kx}\) (将x变为kx即可)

\(\sum_{n \ge 0} ax^n=\frac{a}{1-x}\)

发现如果把它化成类似\(\frac{a}{1-kx}\)的形式是再好不过了

所以将\(1-x-x^2\)因式分解, 再进行裂项

\(t_1, t_2\)为其的两根

最后化成\(\frac{a}{1-t_1x} - \frac{b}{1-t_2x}\)的形式

\(A_n = a \cdot t_1^n - b * t_2^n\)

好像不是很难的鸭子

指数级生成函数:

处理有标号问题时, 通常使用指数级生成函数

生成函数: \(\displaystyle\sum _{n\ge0}\frac{A_n}{n!}x^n\)

posted @ 2019-11-21 16:17  Hs-black  阅读(356)  评论(0编辑  收藏  举报