好久没写博客了,有好多都是写成了草稿没写完。列个清单慢慢补。。
- 数论专题。
- 概率\期望专题
- 划分树专题
- 省赛训练补题
- 机器学习的记录
- 课程要求写的一些东西
- cf的题
好了进入正题=============================================
广义组合数
数据结构老师让搜
(
7
0.5
)
\binom{7}{0.5}
(0.57) 这种东西。搜出来是广义组合数,对应的有广义二项式定理。一看这个玩意儿ACM经常用就学一下。
本来C(n, m)的定义是
(
m
n
)
=
n
!
m
!
(
n
−
m
)
!
\binom{m}{n}=\frac{n!}{m!(n-m)!}
(nm)=m!(n−m)!n! ,但是m>n的时候就会出现n-m<0的情况,而负数没有阶乘,所以好像因为这玩意儿还把定义给改了,改成
(
m
n
)
=
∏
i
=
n
−
m
+
1
n
i
m
!
\binom{m}{n}=\frac{\prod_{i=n-m+1}^{n} {i}}{m!}
(nm)=m!∏i=n−m+1ni
这样以后就能兼容表示了,和n、m的大小没关系。
比如
(
5
4
)
=
0
∗
1
∗
2
∗
3
∗
4
5
!
=
0
\binom{5}{4}=\frac{0 * 1 * 2 * 3 * 4}{ 5!} = 0
(45)=5!0∗1∗2∗3∗4=0
(
2
−
2
)
=
(
−
3
)
∗
(
−
2
)
2
!
=
−
3
\binom{2}{-2}=\frac{(-3)*(-2)}{2!} =-3
(−22)=2!(−3)∗(−2)=−3
(
1
0.5
)
=
0.5
1
=
0.5
\binom{1}{0.5}=\frac{0.5}{1}=0.5
(0.51)=10.5=0.5
至于这个玩意儿有没有什么现实意义emmm大概就像虚数一样吧,莫强求。
对了,显然,m在这儿要是非负整数,因为要算阶乘。
Γ \Gamma Γ函数
这个东西概率论老师提到过,求积分(伽马分布)的时候好用。
这个函数是欧拉搞出来的,本来是哥德巴赫想搞,没搞出来,然后他写信问伯努利(我也不知道是那一家子里的哪一个),那时候欧拉刚好在伯努利旁边顺手就搞出来了。然而那时候欧拉才22岁。
其实这个就是把阶乘扩展到实数域了。用
Γ
(
x
)
\Gamma(x)
Γ(x)表示阶乘的话,整数的时候有
Γ
(
x
)
=
(
x
−
1
)
Γ
(
x
−
1
)
\Gamma(x)=(x-1)\Gamma(x-1)
Γ(x)=(x−1)Γ(x−1)。把这个定义拓展到实数域同样适用。这个函数的积分写法是
Γ
(
n
)
=
∫
0
+
∞
x
n
−
1
e
−
x
d
x
\Gamma(n)=\int_{0 }^{+\infty}{x^{n-1}e^{-x}dx}
Γ(n)=∫0+∞xn−1e−xdx
对右边积分化简,得
Γ
(
n
)
=
∫
0
+
∞
x
n
−
1
e
−
x
d
x
=
−
x
n
−
1
e
−
x
∣
0
+
∞
+
(
n
−
1
)
∫
0
+
∞
x
n
−
1
e
−
x
d
x
=
0
+
(
n
−
1
)
∫
0
+
∞
x
n
−
1
e
−
x
d
x
=
(
n
−
1
)
Γ
(
n
−
1
)
\begin{aligned} \Gamma(n)&=\int_{0 }^{+\infty}{x^{n-1}e^{-x}dx} \\ &=-x^{n-1}e^{-x}|_{0}^{+\infty}+(n-1)\int_{0 }^{+\infty}{x^{n-1}e^{-x}dx} \\ &=0+(n-1)\int_{0 }^{+\infty}{x^{n-1}e^{-x}dx} \\ &=(n-1)\Gamma(n-1) \end{aligned}
Γ(n)=∫0+∞xn−1e−xdx=−xn−1e−x∣0+∞+(n−1)∫0+∞xn−1e−xdx=0+(n−1)∫0+∞xn−1e−xdx=(n−1)Γ(n−1)
有了这个定义可以写小数阶乘。这个和广义组合数有点关系其实(在正数部分),具体的就不说了没什么用。
广义二项式定理
原来的二项式定理中n是正数,广义的二项式定理中定义了负数的范围。
(
1
−
x
)
−
n
=
∑
i
=
0
+
∞
(
i
−
n
)
(
−
x
)
i
=
∑
i
=
0
+
∞
(
i
n
+
i
−
1
)
x
i
=
∑
i
=
0
+
∞
(
n
−
1
n
+
i
−
1
)
x
i
(
−
1
≤
x
≤
1
)
(1-x)^{-n}=\sum_{i=0}^{+\infty}\binom{i}{-n}(-x)^{i}=\sum_{i=0}^{+\infty}\binom{i}{n+i-1}x^{i} =\sum_{i=0}^{+\infty}\binom{n-1}{n+i-1}x^{i} \\(-1\leq x \leq 1)
(1−x)−n=i=0∑+∞(−ni)(−x)i=i=0∑+∞(n+i−1i)xi=i=0∑+∞(n+i−1n−1)xi(−1≤x≤1)
这里面的组合数是广义的。
这个定理用泰勒展开很好证明,就不写了。
母函数
母函数是ACM里经常用到的处理组合数学的工具,今天学了一下。
母函数分为很多种, 分为普通母函数、指数母函数、L级数、贝尔级数和狄利克雷级数,每种母函数对应不同种类的序列。今天先写普通的母函数,以后遇到再补。
我学了一点,觉得普通母函数是把序列信息存在指数或者系数位置,然后利用构造出的母函数来解决问题。
母函数就是一列用来展示一串数字的挂衣架。——赫伯特·唯尔夫
这个挂衣架是什么意思呢,举几个栗子来看一下:
对于序列1,2,3,4,5可以(还有其他)构造出母函数:
g
(
x
)
=
x
1
+
2
x
2
+
3
x
3
+
4
x
4
+
5
x
5
g(x)=x^{1}+2x^{2}+3x^{3}+4x^{4}+5x^{5}
g(x)=x1+2x2+3x3+4x4+5x5
对于序列5,5,5,5,5可以(还有其他)构造出母函数:
g
(
x
)
=
5
x
1
+
5
x
2
+
5
x
3
+
5
x
4
+
5
x
5
g(x)=5x^{1}+5x^{2}+5x^{3}+5x^{4}+5x^{5}
g(x)=5x1+5x2+5x3+5x4+5x5
这么看来普通母函数的定义就很明显了:
对
于
序
列
a
1
.
.
.
a
n
:
g
(
x
)
=
∑
i
=
1
n
a
i
x
i
对于序列a_{1}...a_{n}:g(x)=\sum_{i=1}^{n}a_{i}x^{i}
对于序列a1...an:g(x)=i=1∑naixi
母函数有什么应用呢?先看一道题目:
n+k= x 1 + x 2 + . . . x k x_{1}+x_{2}+...x_{k} x1+x2+...xk的正整数解有多少种?
中学的想法是“隔板法”,也就是在n+k个东西中间插上k-1个板子,那分成的k个区域就是一种解。总共有
(
k
−
1
n
+
k
−
1
)
=
(
n
n
+
k
−
1
)
\binom{k-1}{n+k-1}=\binom{n}{n+k-1}
(n+k−1k−1)=(n+k−1n)种。其实这个问题可以用母函数来解决。
显然每个变量
x
i
x_{i}
xi解的范围是序列[0, n],所以对于某个变量来说每个小于n正整数都可能取到,也就是每个数字可能取一个,这个个数序列就是[1, 1, 1, 1, …1],一共n+1个1表示数字0~n可能取一次, 所以每个变量的可以构造母函数
g
(
x
)
=
∑
i
=
0
+
∞
x
i
=
(
1
−
x
)
−
1
g(x)=\sum_{i=0}^{+\infty}x^{i}=(1-x)^{-1}
g(x)=∑i=0+∞xi=(1−x)−1。我们把每个变量的母函数乘起来,得到最终的母函数
G
(
x
)
=
(
g
(
x
)
)
k
=
(
1
−
x
)
−
k
G(x)=(g(x))^{k}=(1-x)^{-k}
G(x)=(g(x))k=(1−x)−k
可以知道这个G(x)展开式中
x
n
x^{n}
xn的系数就是答案。为什么呢?因为序列的信息放在指数和系数上了(指数部分表示取这个值,系数部分表示取一次),当各个母函数相乘的时候指数部分就相加,所以最终每有一个指数为n的项就是一个解,所以
x
n
x^{n}
xn的系数就是答案。
那母函数的系数怎么求呢,那就要用到广义二项式定理了。根据上面的定理, x n x^{n} xn的项就是 ( n n + k − 1 ) \binom{n}{n+k-1} (n+k−1n),和隔板法得到的结果一致。
再来一道题:BZOJ3028 食物
题意是每种食物的限制如下:
汉堡:偶数个;
可乐:0个或1个
鸡腿:0个,1个或2个
蜜桃:奇数个
鸡块:4的倍数个
包子:0个,1个,2个或3个
土豆:不超过一个。
面包:3的倍数个
问带n个食物的方案数(n<=10^500)
对每种食物构造母函数:
汉堡=
x
0
+
x
2
+
x
4
.
.
.
=
1
1
−
x
2
x^{0}+x^{2}+x^{4}...=\frac{1}{1-x^{2}}
x0+x2+x4...=1−x21
可乐=
x
0
+
x
1
=
1
+
x
x^{0}+x^{1}=1+x
x0+x1=1+x
鸡腿=
x
0
+
x
1
+
x
2
x^{0}+x^{1}+x^{2}
x0+x1+x2
蜜桃=
x
1
+
x
3
+
x
5
.
.
.
=
x
1
−
x
2
x^{1}+x^{3}+x^{5}...=\frac{x}{1-x^2}
x1+x3+x5...=1−x2x
鸡块=
x
0
+
x
4
+
x
8
.
.
.
=
1
1
−
x
4
x^{0}+x^{4}+x^{8}...=\frac{1}{1-x^{4}}
x0+x4+x8...=1−x41
…
最终得到
x
(
1
−
x
)
4
\frac{x}{(1-x)^{4}}
(1−x)4x
因为
1
1
−
x
\frac{1}{1-x}
1−x1是等比级数,所以
1
(
1
−
x
)
4
\frac{1}{(1-x)^{4}}
(1−x)41可以看成
(
1
−
x
)
−
4
(1-x)^{-4}
(1−x)−4,就可以得到
(
1
−
x
)
−
4
(1-x)^{-4}
(1−x)−4的
x
n
−
1
x^{n-1}
xn−1的系数
(
4
−
1
4
+
n
−
1
−
1
)
=
(
3
n
+
2
)
\binom{4 -1}{4 + n - 1-1}=\binom{3}{n+2}
(4+n−1−14−1)=(n+23)。
所以答案是
(
3
n
+
2
)
\binom{3}{n+2}
(n+23)。
生成函数(母函数)题目(待做)
bzoj3028
就是上面的例题
HDU1028
HDU1085
洛谷P2000
Bzoj3771 (母函数 FFT 容斥)
bzoj3509 (母函数+分块+暴力+FFT)
关于FFT看我写的这个多项式变换与FFT
bzoj3696 (异或规则下的母函数)
hdu1557
hdu1028 任意给你一个整数,问有多少种拆分方案。
hdu1398
hdu 1171
hdu 2079
hdu2082
hdu 1521 (指数型母函数)