zoukankan      html  css  js  c++  java
  • 「一个经典问题的另一个推导方法」

    我承认,标题有些谜语人。主要是怕搜索引擎乱抓导致黑历史暴露。


    众所周知 (n) 个点的无根有标号树有 (n^{n - 2})

    众所周知这个结论的证法很多,其中一个是使用拉格朗日反演

    设有标号有根树的 EGF 为 (T(x)),有方程 (T = x(sum_{igeq 0} frac{T^i}{i!}) = xexp T)

    (G(x) = x /exp x),则 (G(T) = x),即 (G)(T) 的复合逆。

    由反演,([x^n]T = [x^n]x(x/G)^{n + 1}G' = n^{n-1}/n!)

    得到有根树为 (n^{n - 1}),则无根树为 (n^{n - 2})


    众所周知将 (m) 个大小为 (a_1, dots, a_m) 的树连成一个 (n) 个点无根树的方案数为 (n^{m - 2}prod a_i)

    众所周知这个结论的证法很多,其中一个是使用扩展拉格朗日反演

    下尝试用扩展拉格朗日反演证一下这个结论 当然是不会去证扩展拉格朗日反演的

    实际上众所周知,扩展拉格朗日反演与 prufer 序列和矩阵树定理关系都非常密切,所以三种证法本质等价(瞎说)。


    首先给出一些记号。

    下将 (G(x_1, x_2, dots, x_m)) 简记成 (G(mathrm x))

    下将 (x_1^{k_1}x_2^{k_2}dots x_{m}^{k_m}) 简记成 (mathrm x^{mathrm k})

    在多元 GF 下复合逆这一概念并不良定义。因此,取而代之的,我们定义一组树形复合方程

    [F_1 = x_1G_1(F_1, F_2, dots, F_m) = x_1G_1(mathrm F) \ F_2 = x_2G_2(F_1, F_2, dots, F_m) = x_2G_2(mathrm F) \ dots \ F_m = x_mG_m(F_1, F_2, dots, F_m) = x_mG_m(mathrm F) \ ]

    树形复合方程确实和树有关系。

    具体来说,我们所考虑的对象是有 (m) 种结点的有根树。则 (F_i) 可以看成以第 (i) 种结点为根时对应的有根树。

    下当 (A = (a_{i,j})) 时将 (det A) 记成 (left|left|a_{i, j} ight| ight|)

    给出定理:

    [[mathrm x^{mathrm k}]H(mathrm F) = [mathrm x^{mathrm k}]H(mathrm x) imes mathrm G^{mathrm k} imes left|left|[i = j] - frac{x_jfrac{part G_i}{part x_j}}{G_i(mathrm x)} ight| ight| ]

    注意字体与其代表的含义,比如 (mathrm G^{mathrm k}) 实际上是 (G_1^{k_1}G_2^{k_2}dots G_{m}^{k_m})


    现在来证明,首先转化成算有根树除以 (m)

    (F_i) 表示以第 (i) 种点为根的 EGF,此时一条边会产生两端 (a) 乘积的贡献,因此得到方程:

    [F_i = x_iexpleft(sum_{j = 1}^m a_ia_jF_j ight) ]

    也即 (G_i = exp(sum_{j = 1}^m a_ia_jx_j))

    最后每种点仅出现一次,那么取 ([mathrm x](sum_{i = 1}^m F_i)) 即为答案。使用反演:

    [egin{aligned}[] [mathrm x]left(sum_{i = 1}^mF_i ight) &= [mathrm x]left(sum_{i = 1}^mx_i ight) imes left(prod_{i = 1}^mexpleft(sum_{j = 1}^m a_ia_jx_j ight) ight) imes left|left|[i = j] - frac{x_ja_ia_jexp(sum_{j = 1}^m a_ia_jx_j)}{exp(sum_{j = 1}^m a_ia_jx_j)} ight| ight| \ &= [mathrm x]left(sum_{i = 1}^mx_i ight) imes exp left(sum_{i = 1}^{m}sum_{j = 1}^{m}a_ia_jx_j ight) imes left|left|[i = j] - a_ia_jx_j ight| ight| end{aligned} ]

    搞一搞行列式:

    [egin{aligned} egin{vmatrix} 1-a_1^2x_1 & -a_1a_2x_2 & dots & -a_1a_nx_n \ -a_2a_1x_1 & 1-a_2^2x_2 & dots & -a_2a_nx_n \ vdots & vdots & ddots & vdots \ -a_na_1x_1 & -a_na_2x_2 & dots & 1-a_n^2x_n \ end{vmatrix} = egin{vmatrix} 1-a_1^2x_1 & -a_1a_2x_2 & dots & -a_1a_nx_n \ -a_2/a_1 & 1 & dots & 0 \ vdots & vdots & ddots & vdots \ -a_n/a_1 & 0 & dots & 1 \ end{vmatrix} = egin{vmatrix} 1-sum_{i = 1}^{m}a_i^2x_i & -a_1a_2x_2 & dots & -a_1a_nx_n \ 0 & 1 & dots & 0 \ vdots & vdots & ddots & vdots \ 0 & 0 & dots & 1 \ end{vmatrix} end{aligned} ]

    将结果 (1 - sum_{i = 1}^m a_i^2x_i) 再代回去:

    [egin{aligned}[] [mathrm x]left(sum_{i = 1}^mx_i ight) imes left(prod_{j = 1}^mexpleft(na_jx_j ight) ight) imes left(1 - sum_{i = 1}^m a_i^2x_i ight) end{aligned} ]

    如果最后一项取 (1),则得到 (n^{m - 1}(prod_{i = 1}^m a_i)(sum_{i = 1}^m1/a_i))

    否则,得到 (-n^{m - 2}(prod_{i = 1}^m a_i)(sum_{i = 1}^msum_{j = 1,j eq i}^ma_j/a_i) = -n^{m - 2}(prod_{i = 1}^m a_i)(sum_{i=1}^{m}n/a_i - m))

    因此得到最终结果 (mn^{m - 2}(prod_{i = 1}^m a_i))

    别忘了除以 (m),得到形式 (n^{m - 2}(prod_{i = 1}^m a_i)),证完了。

    这还要搞行列式,和矩阵树定理没啥差别啊。

  • 相关阅读:
    Python代码优化概要
    OllyDbg 使用笔记 (一)
    Java报表FineReport在医院院长查询分析系统中有什么用
    MongoDB下载安装測试及使用
    你不可能讲清楚的4个开源协议!!!
    MR之SequenceFile具体解释
    深入浅出AOP(四)--AOP的实现步骤
    SRM 587 Div II L3:ThreeColorabilityEasyy
    转义及编码(u, x)
    转义及编码(u, x)
  • 原文地址:https://www.cnblogs.com/Tiw-Air-OAO/p/14845737.html
Copyright © 2011-2022 走看看