杨表和钩子公式

杨表

杨氏矩阵(Young Tableau),又称杨表,是一类每行长度严格不降的表格,大小为 \(n\),数字 \(1,2,..,n\) 在表中满足从左到右和从上到下严格递增。设第 \(i\) 行的长度为 \(\lambda_i\),则 \(\lambda _i\geq \lambda_{i-1},\sum_{i}\lambda_i=n\),大小为 \(n\) 的杨表形态 \((\lambda_1,\lambda_2,...)\)\(n\) 的整数划分一一对应。

形态为 (5,4,1) 的杨表:

\(Y(\lambda)\) 为划分 \(\lambda\) 对应形态的杨表,\(f(\lambda)\) 表示杨表 \(Y(\lambda)\) 中填数的方案数。

设划分 \(\lambda,\mu\) 分别是 \(n,n-1\) 的划分(\(n\geq 2\)),若 \(\exist j,s.t.\forall i\neq j,\lambda_i=\mu_i,\;\;\lambda_j=\mu_i+1\),记 \(\mu \uparrow \lambda\)

对于 \((i,j)\in Y(\lambda)\),记 \(H_{\lambda}(i,j)\) 表示 \((i,j)\) 自身以及下方和右方的格子集合(\(\text{Hook}\)),\(h_{\lambda}(i,j)=|H_{\lambda}(i,j)|\)

钩子公式

\(\text{Hook Formula}\)

\[f(\lambda)=\frac{n!}{\displaystyle\prod_{(i,j)\in Y(\lambda)}h_{\lambda}(i,j)} \]

\(\text{Proof}\)

\(c_1,c_2,..,c_m\)\(h_{\lambda}(i,j)=1\) 的位置,记 \(\mu_i=\lambda / \{c_i\}\),显然 \(\{\mu_1,\mu_2,..,\mu_m\}=\{\mu|\mu\uparrow \lambda\}\)

\(f(\lambda)\) 满足 \(\displaystyle f(\lambda)=\sum_{\mu\uparrow \lambda}f(\mu)\),设 \(\displaystyle e(\lambda)=\frac{n!}{\prod_{(i,j)\in Y(\lambda)}h_{\lambda}(i,j)}\),由于 \(f(\empty)=e(\empty)=1\)

\[f(\lambda)=e(\lambda)\iff e(\lambda)=\sum_{\mu\uparrow \lambda}e(\mu) \]

于是命题转化成证明:\(\displaystyle \sum_{i=1}^m \frac{e(\mu_i)}{e(\lambda)}=1\)

定义以下随机游走(\(\text{Hook Walk}\)):

  1. 随机选取一个位置 \((i,j)\in Y(\lambda)\) 出发。
  2. 每次从 \((i,j)\) 等概率地走到 \(H_{\lambda}(i,j)/ \{(i,j)\}\) 中随机一格。
  3. 若来到某个位置 \(c_i\),则随机过程结束。

显然 \(\sum_{i=1}^m P(\text{终点为 }c_i)=1\),下证 \(P(\text{终点为 }c_i)=\frac{e(\mu_i)}{e(\lambda)}\)

注意到 \(h_{\lambda}(i,j)+h_\lambda(i+1,j+1)=h_\lambda(i,j+1)+h_\lambda(i+1,j)\),且只有在 \((i,j)\) 正上方和正右方的位置可以走到 \((i,j)\) 。于是构造二维矩阵 \(\{h_{i,j}\},\{p_{i,j}\}\)

\[\begin{cases} h_{0,0}=0,\;h_{i,0},h_{0,j}\in \mathbb{N}_+&i>0,j>0\\ h_{i,j}=h_{i,j-1}+h_{i-1,j}-h_{i-1,j-1}&i,j>0 \\ p_{0,0}=1,\;\displaystyle p_{i,j}=\frac{1}{h_{i,j}}\left(\sum_{a=0}^{i-1}p_{a,j}+\sum_{b=0}^{j-1}p_{i,b}\right) & (i,j)\neq (0,0) \end{cases} \]

\(\text{Lemma}\)\(\displaystyle \sum_{k=0}^i\sum_{l=0}^j p_{k,l}=\prod_{k=0}^i(1+\frac{1}{h_{k,0}})\prod_{l=0}^j(1+\frac{1}{h_{0,l}})\)

\(\text{Proof}\):考虑归纳,首先容易验证 \(i,j\in\{0,1\}\) 上式成立。

根据 \(h_{i,j}\) 的递推式,容易得到 \(h_{i,j}=h_{i,0}+h_{0,j}\) 。设 \(S(i,j)=\displaystyle\sum_{k=0}^i\sum_{l=0}^j p_{k,l}\),对于 \(S(i,0)\),其值相当于从 \((0,0)\) 出发,每次向下走若格,然后标记一个 \(h_{i,0}\),由归纳容易得到 \(S(i,0)=\prod_{k=0}^i (1+\frac1{h_{k,0}})\) 以及类似地 \(S(0,j)=\prod_{l=0}^j (1+\frac1{h_{0,l}})\),两者满足条件。对于当前 \(i,j>0\),假设 \(S(i-1,j-1),S(i-1,j),S(i,j-1)\) 均满足条件,则

\[\begin{align} S(i,j)&=p_{i,j}+S(i-1,j)+S(i,j-1)-S(i-1,j-1) \\ &= \frac{1}{h_{i,j}}\left(\sum_{k=0}^{i-1}p_{k,j}+\sum_{l=0}^{j-1}p_{i,l}\right) + S(i\!-\!1,j\!-\!1)\left(1+\frac{1}{h_{0,j}}+1+\frac{1}{h_{i,0}} -1\right) \\ &= \frac{1}{h_{i,j}}(S(i\!-\!1,j)+S(i,j\!-\!1)-2S(i\!-\!1,j\!-\!1))+S(i\!-\!1,j\!-\!1)\left(1+\frac{1}{h_{0,j}}+\frac{1}{h_{i,0}}\right) \\ &= S(i\!-\!1,j\!-\!1)\left(\frac{1}{h_{i,0}+h_{0,j}}(\frac{1}{h_{0,j}}+\frac{1}{h_{i,0}})+1+\frac{1}{h_{0,j}}+\frac{1}{h_{i,0}}\right) \\ &= S(i\!-\!1,j\!-\!1)(1+\frac{1}{h_{0,j}})(1+\frac{1}{h_{i,0}}) \\ &= \prod_{k=0}^i(1+\frac{1}{h_{k,0}})\prod_{l=0}^j(1+\frac{1}{h_{0,l}}) \end{align} \]

由归纳 \(\text{Lemma}\) 得证。

对应到原问题,对于 \((a,b)\),令 \(h_{i,0}\)\(h_{0,j}\)\(h_{\lambda}(a\!-\!i,b)-1\)\(h_{\lambda}(a,b\!-\!j)-1\),则对于任意 \(i,j\geq 0\)\(h_{i,j}=h_{\lambda}(a\!-\!i,b\!-\!j)-1\)\(p_{i,j}\) 为从 \((a\!-\!i,b\!-\!j)\) 走到 \((a,b)\) 的概率。令 \((a,b)\)\(c_i\)

\[P(\text{终点为 }c_i)=\frac{1}{n}\sum_{i=0}^{a-1}\sum_{j=0}^{b-1}p_{i,j}=\frac1n\prod_{i=0}^{a-1}\left(1+\frac{1}{h_{\lambda}(a-i,b)-1}\right)\prod_{j=0}^{b-1}\left(1+\frac{1}{h_{\lambda}(a,b-j)-1}\right)\\ =\frac{\displaystyle\prod_{i=0}^{a-1}h_{\lambda}(a,b-j)\prod_{j=0}^{b-1}h_{\lambda}(a,b-j)}{\displaystyle n\prod_{i=0}^{a-1}(h_{\lambda}(a,b-j)-1)\prod_{j=0}^{b-1}(h_{\lambda}(a,b-j)-1)} = \frac{e(\mu_i)}{e(\lambda)} \]

因此 \(\text{Hook Formula}\) 得证。

应用

有一个 \(n\times m\) 的网格,你希望用 \(3-\)连通块(\(\text{triomino}\)) 覆盖整个网格,每个块从 \(1\)\(nm/3\) 标号。对于两个块 \(X,Y\),若 \(X\) 的某个格子位于 \(Y\) 的一个格子的正左方或正上方,则 \(X\) 的标号需要小于 \(Y\)

求带标号的覆盖方案数,模 \(10^9+7\)\(1\leq n,m\leq 10^4\)

HackerRank : Triomino Tiling

标号方式使得可能出现两个块的标号关系是自相矛盾的,因此合法的 \(\text{triomino}\) 只有 \(4\) 种:

#  ##   #  ###
#  #   ## 
#      

考虑从左上角开始填,使得轮廓线任意时刻都是单调的,即长度为 \(n+m\),记竖着的线段为 \(1\),横着的为 \(0\),则任意时刻的轮廓线都可以表示为长度为 \(n+m\)\(01\) 序列,其中有 \(n\)\(1\)\(m\)\(0\)

对于每种合法 \(\text{triomino}\),加入时对轮廓线产生的变化分别为:1110 -> 01111100 -> 01011010 -> 00111000 -> 0001 。可以发现,无论中间两个值是什么,加入一个 \(\text{triomino}\) 都是将两边的 01 互换。

本来是要 111...11000...0 转变为 000...0111...11,现在能做的操作是将两个相距 \(3\) 格的 01 互换,考虑将序列位置按照 \(\!\!\!\mod 3\) 分开考虑。于是现在有三个 11..10..00,每次可以将相邻的 01 互换,最终变成 0..0011..1,求方案数。

将这个问题往回转,可以发现就是在网格里单调地填方块,方块先后顺序需要满足的约束与杨表相同,因此就是一个矩形杨表计数问题,设矩形为 \(n\times m\),则方案数为:

\[\frac{(nm)!}{\displaystyle\prod_{i=1}^n\prod_{j=1}^m (i+j-1)} =\frac{(nm)!\prod_{i=1}^n (i-1)!}{\prod_{i=1}^n (i+m-1)!} \]

\(S(n)=\prod_{i=1}^n i!\),则答案为 \(\displaystyle \frac{(nm)!S(n-1)S(m-1)}{S(n+m-1)}\),于是预处理阶乘,时间复杂度为 \(O(nm+T)\)

posted @ 2022-07-08 17:57  Neal_lee  阅读(969)  评论(1编辑  收藏  举报