zoukankan      html  css  js  c++  java
  • 【学习笔记】杨表的拓扑序计数与钩长公式

    UPD 2021.7.5: 感谢 Tiw_Air_OAO 大佬提醒,钩长公式有利用 LGV 引理的神奇证法,在 2019 年集训队论文里有提到。不过菜鸡博主还没看懂/kk,以后如果有机会弄明白的话会来更新一下。

    大鸽子更博辣!

    最近听说了这个神奇的公式,随手百度了一下竟然几乎找不到任何有证明的博客!!于是去翻论文找到了证明,在这里搬运一下qwq
    本文中所有图均源自维基百科。

    本文的主角是一种非常神奇的组合结构——杨表(Young Tableau)。
    杨表是一个如下图所示的结构,每一行有公共的左边界,每一列有公共的上边界,而每行的长度自上到下非严格递减,每列的长度自左到右非严格递减。

    杨表在各种各样的组合模型中随处可见,例如杨表与整数拆分的方案一一对应。杨表的一大神奇之处在于,它可以用各种各样的方式构造(上下左右加一行),还能进行翻转等变换,由此可以导出整数拆分的多种 DP 方式。
    而本文讨论的是杨表的拓扑序计数问题:对于一个总共有 (n) 个格子的杨表,给每个格子一个 (1)(n) 之间的编号,使得所有格子的编号互不相同,且对于任何一对相邻格子,上面格子的编号小于下面,左面格子的编号小于右面,一共有多少种方案?
    这个问题有一个异常优美的公式,不过在这之前让我们先作出一些必要的定义。

    对于杨表中的每一个单元格,我们定义“钩长” (hook length) 为它本身、正下方、正右方的格子总个数。
    例如在下图中,每个格子上标出了该格子的钩长。

    于是重点来了:
    钩长公式 (Hook Length Formula): 设杨表总共格子数是 (n),第 (i) 行第 (j) 列的钩长为 (h_{i,j}),则拓扑序个数为 (frac{n!}{prod_{i,j} h_{i,j}}),即 (n!) 除以每个钩长的乘积。

    网上很多类似于“每个点是它和它正下方正右方的概率是 (frac{1}{h_{i,j}}),相乘就是答案”的论述,显然都是伪证。接下来让我们有理有据地证明这个结论。

    这个证明基于一个递推的想法——设一张杨表 (A) 的拓扑序个数为 (T),该公式给出的答案为 (H). 对于较小的情况,容易验证 (T)(H) 是相等的;可以发现 (T) 之间具有一个显然的递推关系:枚举这张杨表中的所有角落方格,将该方格去掉之后得到的杨表的 (T) 值求和,就是当前这张杨表的 (T) 值。在这里,角落方格是指所有能被标号为 (n) 的方格,即钩长为 (1) 的方格。如下图所示,角落方格被标了蓝点。

    那么,我们只需要证明 (H) 也具有相同的递推关系,就可以证明对于任意杨表都有 (T=H). 对此,数学家们构造性地给出了一个转化,称为The Hook Walk:
    (1) 首先从 (n) 个格子中随机选择一个作为起点,开始游走。
    (2) 如果当前在角落格子,那么游走结束;否则,从该格正右方和正下方的 (frac{1}{h_{i,j}-1}) 个格子中等概率随机选择一个,跳到所选的点,继续该步骤。
    假设在角落格 ((a,b)) 结束的概率是 (p_{a,b}),那么可以断言

    [p_{a,b}=frac{H(A-(a,b))}{H(A)} ]

    即在角落 ((a,b)) 结束的概率等于 ((a,b)) 标号为 (n) 的拓扑序在所有拓扑序中所占的比例。
    为什么呢?考虑随机游走的过程。下证一个引理:固定起点 ((c,d))、终点 ((a,b)) 以及路径经过的所有行的序列 (S_1[1..m_1])、所有列的序列 (S_2[1..m_2]). 考虑所有满足这一条件的路径,其概率总和为 (f(a,b,c,d,S_1,S_2)=prod_{iin S_1}frac{1}{h_{i,b}-1}cdot prod_{jin S_2}frac{1}{h_{a,j}-1}).
    上面的等式右边那个乘积我们称作 (P). 可以得到 (f) 的递推关系:考虑第一步的走法,有

    [f(a,b,c,d,S_1,S_2)=frac{1}{h_{c,d}-1}cdot (f(a,b,S_1[2],d,S_1[2..m_1],S_2)+f(a,b,c,S_2[2],S_1,S_2[2..m_2])) ]

    我们对路径的长度使用数学归纳法,那么根据归纳假设有

    [f(a,b,S_1[2],d,S_1[2..m_1],S_2)=(h_{c,b}-1)cdot P,f(a,b,c,S_2[2],S_1,S_2[2..m_2])=(h_{a,d}-1)cdot P ]

    (f(a,b,c,d,S_1,S_2)=frac{1}{h_{c,d}-1}(h_{c,b}-1+h_{a,d}-1)cdot P)
    画一画图可以发现 (h_{c,b}+h_{a,d}=h_{c,d}+1),于是 (f(a,b,c,d,S_1,S_2)=P).
    那么考虑在固定 (a,b) 的情况下,对所有可能的 (a,b,S_1,S_2) 求和再除以起点的选择数 (n),结果就是

    [frac{1}{n}cdot prod^{a-1}_{i=1}(1+frac{1}{h_{i,b}-1})cdot prod^{b-1}_{j=1}(1+frac{1}{h_{c,j}-1}) ]

    即为终止在 ((a,b)) 的概率,简单计算得知它恰好等于 (frac{H(A-(a,b))}{H(A)}),于是大功告成!

  • 相关阅读:
    jQuery实现鼠标点击Div区域外隐藏Div
    JS判断输入值为正整数
    trim()不兼容ie的问题及解决方法
    傻问题就用傻办法:解决问题有时候不需要探究根源,依据表象就能直接解决
    /vendor/lib64/libOpenCL.so在安卓应用中无访问权限的解决办法
    复数域上的人工神经网络与量子计算
    中国移动CMCC家庭路由器的默认登陆账号
    717. 1-bit and 2-bit Characters
    219. Contains Duplicate II
    1346. Check If N and Its Double Exist
  • 原文地址:https://www.cnblogs.com/suncongbo/p/14967000.html
Copyright © 2011-2022 走看看