zoukankan      html  css  js  c++  java
  • 【组合数学部分笔记】

    1. 扰动法

    考虑将求和式收尾拆出来并对其和的形式找到对应方程。

    • (sum_{0leq k<n}kr^k)

    [ S=sum_{0leq k<n}kr^k\ = sum_{1leq kleq n}kr^ k-nr^n\ = S+sum_{1leq kleq n}r^k -nr^n ]

    等比数列求和即可。

    • (sum_{0leq k<n} k^m)

    [S=sum_{0leq k<n}k^m \ =sum_{1leq kleq n}k^m-n^m \ =sum_{0leq k<n}(k+1)^m-n^m \ =sum_{0leq k<n}sum_{i=0}^m inom{m}{i}k^{i}-n^m \ =sum_{i=0}^minom{m}{i}sum_{0leq k<n}k^i-n^m ]

    单独计算出 (i=m) 的值,往下递归即可。

    • (sum_{0leq k<n}k^m r^k)

    [S=sum_{0leq k<n}k^m r^k \ =sum_{1leq kleq n}k^mr^k-n^mr^n \ =sum_{0leq k<n}(k+1)^m r^{k+1}-n^mr^n \ =sum_{0leq k<n}sum_{i=0}^m inom{m}{i}k^ir^{k+1}-n^mr_n \ =rsum_{i=0}^minom{m}{i}sum_{0leq k<n}k^ir^k-n^mr^n ]

    同样手算出来 (k=m) 的部分即可暴力递归。

    • (sum_{1leq j<kleq n}frac{1}{k-j})

    换元,用 (d=k-j,j+d=k)

    [S=sum_{1leq j<kleq n}frac{1}{k-j} \ =sum_{1leq j<j+dleq n}frac{1}{d} \ =sum_{1leq dleq n-1}frac{d-1}{d} \ =(n-1)sum_{1leq dleq n-1}frac{1}{d} ]

    二项式系数:

    • 求 (sum_{0leq kleq m}inom{m}{k}/inom{n}{k})

    [sum_{0leq kleq m}inom{m}{k}/inom{n}{k} \ =sum_{k=0}^m frac{m!(n-k)!}{n!(m-k)!} \ =sum_{k=0}^m frac{m!(n-k)!(n-m)!}{n!(m-k)!(n-m)!} \ =sum_{k=0}^m frac{m!(n-m)!}{n!}inom{n-k}{m-k} \ =frac{m!(n-m)!}{n!}sum_{k=0}^minom{n-(m-k)}{k} ]

    平行求和得到 (=frac{m!(n-m)!}{n!}inom{n+1}{m})

    • (sum_{k=0}^n kinom{m-k-1}{m-n-1})

    [sum_{k=0}^n kinom{m-k-1}{m-n-1}\ =sum_{k=0}^n (m-(m-k)){inom{m-k-1}{m-n-1}}\ =sum_{k=0}^n minom{m-k-1}{m-n-1}-(m-k)inom{m-k-1}{m-n-1}\ =minom{m}{m-n}-sum_{k=0}^n (m-n)inom{m-k}{m-n} ]

    继续上指标求和。

    • (sum_{kleq n}inom{n-k}{k}(-1)^k)

    [sum_{kleq n}inom{n-k}{k}(-1)^k\ =sum_{kleq n}(inom{n-k-1}{k}+inom{n-k-1}{k-1})(-1)^k ]

    • (sum_k inom{n}{k}inom{s}{k}k)

    [sum_k inom{n}{k}inom{s}{k}k \ =sum_k sinom{n}{k}inom{s-1}{k-1} \ =ssum_kinom{n}{n-k}inom{s-1}{k-1} \ =sinom{n+s-1}{n-1} ]

    • (sum_{kge 0}inom{n+k}{2k}inom{2k}{k}frac{(-1)^k}{k+1})

    [sum_{kge 0}inom{n+k}{2k}inom{2k}{k}frac{(-1)^k}{k+1}\ =sum_{kge 0}inom{n+k}{k}inom{n}{k}frac{(-1)^k}{k+1}\ =frac{1}{n+1}sum_{kge 0}inom{n+k}{k}inom{n+1}{k+1}(-1)^k\ =frac{1}{n+1}sum_{kge 0}inom{-n-1}{k}inom{n+1}{k+1}\ =frac{1}{n+1}inom{0}{-n}=[n=0] ]

    生成函数:

    常见幂级数:

    [sum_{ige 0}inom{i+k-1}{i}x^i=frac{1}{(1-x)^k} \ ln frac{1}{1-x}=sum_{ige 1}frac{x^i}{i} \ e^x=sum_{ige 0}frac{x^i}{i!} ]

    定义复合:

    [Gcirc F=G(F)=sum_{ige 0}g_iF^i ]

    ([z^0]F ot =0,) 只有 (G) 有限才可以定义。

    复合逆:定义若 (Gcirc F=x,)(G)(x) 的左复合逆。同样定义右逆。

    (F) 常数项是 (0)(1) 次项为 (1) 则可以证明左右逆存在并相等。

    求复合逆:拉格朗日反演。只能求单项。

    给出两个反演柿子:

    [[x^n]F^{-1}frac{1}{n}[x^{n-1}](frac{x}{F})^n ]

    [[x^n]H(F^{-1})=frac{1}{n}[x^{n-1}]H'(frac{x}{F})^n ]

    证明:待补

    多项式除法:考虑做带余除法求出其商式和余式。

    [A(x)equiv Q(x)B(x)+R(x) ]

    其中 (A,B) 已知。

    带入 (x=x^{-1},) 并两边同时乘以 (x^n)

    [A^{rev}(x)equiv B^{rev}(x)Q^{rev}(x)+x^{n-m+1}R^{rev}(x) ]

    两边对 (x^{n-m+1}) 取模。由于 (deg(Q)=n-m) 所以上述柿子对 (Q) 保留信息完整,直接求逆即可。

    ODE(常微分方程):

    考虑计算一个复合 (h(F)) 的情况,可以求导构造方程。

    例子:求 (G(F)=e^{F})

    考虑 (G'=e^Fcdot F'=GF') 这里的右边就不再是复合而是卷积了。考虑对比系数有

    [(n+1)g_{n+1}=sum_{i=0}^n (i+1)f_{i+1}g_{n-i} ]

    就可以分治 NTT 了。

    还有一些应用的例子:如求 ((1+x+x^2)^k) 求导之后可以线性计算。

    还有:求 (F=sum_{i=0}^m frac{x^i}{i!})(F^{0cdots k}(mod x^n))

    考虑求导 (F'(x)=F-frac{x^m}{m!},) 故而有:

    [(F^k)'=kF^{k-1}cdot (F-frac{x^m}{m!}) ]

    展开柿子就可以递推了。

    关于 微分有限 的定义:

    (F) 满足 ODE :

    [sum_{0leq ileq k}p_i(x)F^{(i)}=0 ]

    则称其为 微分有限。

    (p_i)(O(1)) 次多项式, (k=O(1),) 就可以 (O(sqrt{n}log n)) 计算 ([x^n]F) 或者 (O(n)) 计算前 (n) 项。

    一些微分有限的函数: (x^{alpha},ln x,e^x,) 超几何级数。

    (f,g) 微分有限,则其和、卷积都微分有限。

    (f) 微分有限,(g) 是代数的 则其复合 (fcirc g) 微分有限。

    线性递推

    生成函数(解析组合)

    组合类:定义一个组合类 (mathcal{A}) 是一个有限集或可数集。对每一个元素又有一个大小 (|alpha|) 的定义。其非负且个数有限。

    对应生成函数 (mathcal{A}(x)=sum_{alpha in mathcal{A}} x^{|alpha|})

    这个地方是加法的形式。这里实际上是对上述所有情况求的并。

    乘法(笛卡尔积) 对应于其元素大小相加。用乘法刻画

    序列构造 SEQ

    对于一个可数集 (mathcal{A},) 其序列构造的生成函数为:

    [{}+mathcal{A}+mathcal{A} imesmathcal{A}+cdots\ =frac{1}{1-mathcal{A}} ]

    注意:这里是把 整个组合集 的所有组合进行了序列构造。

    注意一些理解:

    SEQ 对应于 拼接组合对象的 顺序

    意为:对于每一个组合对象都表示了一个固定位置的对象拼接。

    比如对于 (d) 叉树的子树组合,对应乘起来的第 (i) 个就是第 (i) 棵子树的组合对象。

    例子:

    • 儿子有顺序的非空多叉树

    [T=xfrac{1}{1-T} ]

    含义:选择一个根,然后拼儿子

    • 儿子有顺序的多叉树

    [T=1+xfrac{1}{1-(T-1)} ]

    含义:同上,注意其非空的时候拼上的儿子。

    儿子不能是空的含义:由于本身 (T-1) 的生成函数中就可以选择空了,所以只要拼接就必须拼上非空的儿子

    • 括号序列的生成函数

    [T=xfrac{1}{1-T}\ ]

    这里和上述非空儿子有顺序多叉树的生成函数一样。

    • CF755G

    (f_{i,j}) 为前 (i) 个球划分了 (j) 组的方案数,对于一个球,我们可以选或不选,选的情况又对应两个一组或者一个一组,设其生成函数为 (F(x,y)=sumsum f_{i,j}x^iy^j,) 答案就是 ([x^ny^k]F(x,y))

    考虑应用 SEQ的含义,简记上述生成函数为 (F,) 则有:

    [F=frac{1}{1-(x+xy+xy^2)} ]

    其中,(x) 计量前多少个球,(y) 计量划分成几组。

    那么其组合意义可以解释为:如果 (x) 没有被选择,那当前 (F) 中所有 (y) 项不变;如果它被单独划分为一组,那所有 (y) 都会平移一位;而如果它和它前一个球一起被划分成一组,那 (y) 就需要平移两个位置了。或者说对应那个位置的点值由这一位转移过去。

    • 求 01 序列,(0) 的连续段长度 (leq k-1) 的方案数。

    考虑对本质进行划分,其必然可以表示为一个 (1) 后面拼接若干不超过 (k-1)(0,) 但其开头可以是不超过 (k-1)(0.) 记录一个单位长度(Z,) 则其生成函数为:

    [F=frac{1-z^k}{1-z}cdot left( frac{1}{1-zfrac{1-z^k}{1-z}} ight) ]

    括号前面是考虑拼接了几个 (0,) 后面是考虑拼接了多少段 (1000cdots)

    幂集

    定义:全部子集

    对于组合类 (mathcal{A},) 其幂集组合类记为 ( ext{PSET}(mathcal{A}))

    考虑枚举每一个元素是否存在,则容易得到:

    [F(mathcal{A})=prod_{alphain mathcal{A}}(1+z^{|alpha|}) ]

    意义很简单,就是不选对应 (1,) 选就对应其元素大小,然后乘在一起。

    那么就可以对其取 (ln) 再逆回去:

    [expleft(sum A_isum_{kge 1}frac{(-1)^{k+1}}{k}z^{ik} ight) ]

    其中 (i) 是元素大小,(A_i) 是大小为 (i) 的元素有多少个。

    继续:

    [=expleft(sum_{kge 1}frac{(-1)^{k+1}}{k}sum_{i}A_iz^{ki} ight) \ =expleft(sum_{kge 1}frac{(-1)^{k+1}}{k}A(z^k) ight) ]

    其中 (A(z))(A_i) 的生成函数。

    多重集

    实际上就是上述幂集每一个元素不再只是选或不选了,变成可以选择无数个了。也就自成了 SEQ 对应每一个位置有序

    按照上面推:

    [F=prod_{ain mathcal{A}}left(frac{1}{1-x^{|a|}} ight) \ =prod_{i=1}^infty left(1-x^i ight)^{-A_i} \ =expleft(sum -A_i-sum_{kge 1}frac{1}{k}x^{ki} ight) \ =expleft(sum_{kge 1}frac{1}{k}sum A_ix^{ki} ight) \ =expleft(sum_{kge 1}frac{1}{k}A(x^k) ight) ]

    • 非空无标号有根树生成函数

    [T=xexp(sum_{kge 1}frac{1}{k}T(x^k)) ]

    组合意义:考虑先上一个根,然后观察其儿子特点,其儿子的数目不限,大小也不限。那么 (T) 本质上对于节点数为 (i) 的非空无标号有根树计数,那我直接将 (T) 进行 ( ext{MSET}) 即多重集选取即可。这里也注意一下儿子没有顺序,所以子树大小也是没有顺序的,直接按从小到大选择即可,对应了上述的 多重集。

    复合

    考虑两个组合类复合的意义 (Acirc B),实际就是把 (A) 的元素的单位大小替换为 (B.)

    例子 CF438E

    考虑有根无标号二叉树区分左右儿子的生成函数:

    [T=1+TxT=T^2x+1 ]

    那么现在考虑对单点进行复合权值的操作,其对应生成函数为:

    [W(x)=sum_{1leq ileq n}x^{c_i} ]

    然后求 (T(W(x))) 即可。

    EGF

    这样表示实际上是为了把二项卷积变成普通卷积

    对应有标号计数

    通常有标号计数都比无标号简单,因为有标号没有那么多等价类需要判重

    它的运算对应:( ext{SET})

    集合 (SET)

    考虑把一个有标号组合类组合成大小不定集合的方案数。注意这里是集合,考虑先用 ( ext{SEQ}) 运算组合后去重。

    观察到,( ext{SEQ}) 组合实际上是对应一个大小为 (L) 的集合算了 (L!) 遍,实际上集合只能算一遍。因为 ( ext{SEQ}) 对应顺序计数,在有标号情况下其对应计算了所有的排列可能。

    所以对应 ( ext{SET(x)}=sum_{ige 0}frac{A^i}{i!}x^i=exp(A))

    • 有标号非空有根树计数

    考虑把一个根塞到一堆有根非空有标号森林里面形成一棵树。

    那么,森林计数就是相当于求了 (T) 的一个集合。注意 ( ext{SET}) 运算也对应着 有标号

    于是, (T=xexp(T))

    • 错排的 EGF

    考虑错排本质如何划分:其对应了若干置换环。

    注意错排本身是带标号的。

    那么错排本质就是找一堆环组成排列,并且环的大小至少为 (2.)

    考虑关于环大小的 (EGF:)

    [F(x)=sum frac{(n-1)!}{n!}x^n=frac{1}{1-x} ]

    接下来考虑关于错排的组合:实际上是所有大小非 (1) 的环的组合,即

    [T=expleft(frac{1}{1-x}-x ight) ]

    • 有标号连通图计数

    考虑有标号图计数。

    [F(x)=sum_{i=0}^infty 2^{inom{frac{i(i-1)}{2}}{i}}x^i ]

    图是由许多连通图组合而成的,对上式取 (ln) 即可。

    • 有标号仙人掌计数
  • 相关阅读:
    RMQ(模板 ST 区间最值,频繁的间隔时间)
    编程算法基地-2.1利用字符串API
    android学习记录(三)百度地图错误---只有一个电话显示帧,没有地图内容。
    【MongoDB】在windows平台mongodb切片集群(三)
    Android MenuItem 设置文本颜色-TextColor设置
    wikioi 1034 家 实时动态的网络流量(费用流)
    where can I find source of com.android.internal.R.styleable.AlertDialog_multiChoiceItemLayout?
    Android开发之自定义Spinner样式的效果实现(源代码实现)
    Java注释@interface的用法
    依赖注入及AOP简述(十三)——AOP应用举例(完结) .
  • 原文地址:https://www.cnblogs.com/h-lka/p/15181889.html
Copyright © 2011-2022 走看看