杨表和钩子公式

杨表

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

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

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

设划分 λ,μ 分别是 n,n1 的划分(n2),若 j,s.t.ij,λi=μi,λj=μi+1,记 μλ

对于 (i,j)Y(λ),记 Hλ(i,j) 表示 (i,j) 自身以及下方和右方的格子集合(Hook),hλ(i,j)=|Hλ(i,j)|

钩子公式

Hook Formula

f(λ)=n!(i,j)Y(λ)hλ(i,j)

Proof

c1,c2,..,cmhλ(i,j)=1 的位置,记 μi=λ/{ci},显然 {μ1,μ2,..,μm}={μ|μλ}

f(λ) 满足 f(λ)=μλf(μ),设 e(λ)=n!(i,j)Y(λ)hλ(i,j),由于 f()=e()=1

f(λ)=e(λ)e(λ)=μλe(μ)

于是命题转化成证明:i=1me(μi)e(λ)=1

定义以下随机游走(Hook Walk):

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

显然 i=1mP(终点为 ci)=1,下证 P(终点为 ci)=e(μi)e(λ)

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

{h0,0=0,hi,0,h0,jN+i>0,j>0hi,j=hi,j1+hi1,jhi1,j1i,j>0p0,0=1,pi,j=1hi,j(a=0i1pa,j+b=0j1pi,b)(i,j)(0,0)

Lemmak=0il=0jpk,l=k=0i(1+1hk,0)l=0j(1+1h0,l)

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

根据 hi,j 的递推式,容易得到 hi,j=hi,0+h0,j 。设 S(i,j)=k=0il=0jpk,l,对于 S(i,0),其值相当于从 (0,0) 出发,每次向下走若格,然后标记一个 hi,0,由归纳容易得到 S(i,0)=k=0i(1+1hk,0) 以及类似地 S(0,j)=l=0j(1+1h0,l),两者满足条件。对于当前 i,j>0,假设 S(i1,j1),S(i1,j),S(i,j1) 均满足条件,则

(1)S(i,j)=pi,j+S(i1,j)+S(i,j1)S(i1,j1)(2)=1hi,j(k=0i1pk,j+l=0j1pi,l)+S(i1,j1)(1+1h0,j+1+1hi,01)(3)=1hi,j(S(i1,j)+S(i,j1)2S(i1,j1))+S(i1,j1)(1+1h0,j+1hi,0)(4)=S(i1,j1)(1hi,0+h0,j(1h0,j+1hi,0)+1+1h0,j+1hi,0)(5)=S(i1,j1)(1+1h0,j)(1+1hi,0)(6)=k=0i(1+1hk,0)l=0j(1+1h0,l)

由归纳 Lemma 得证。

对应到原问题,对于 (a,b),令 hi,0h0,jhλ(ai,b)1hλ(a,bj)1,则对于任意 i,j0hi,j=hλ(ai,bj)1pi,j 为从 (ai,bj) 走到 (a,b) 的概率。令 (a,b)ci

P(终点为 ci)=1ni=0a1j=0b1pi,j=1ni=0a1(1+1hλ(ai,b)1)j=0b1(1+1hλ(a,bj)1)=i=0a1hλ(a,bj)j=0b1hλ(a,bj)ni=0a1(hλ(a,bj)1)j=0b1(hλ(a,bj)1)=e(μi)e(λ)

因此 Hook Formula 得证。

应用

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

求带标号的覆盖方案数,模 109+71n,m104

HackerRank : Triomino Tiling

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

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

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

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

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

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

(nm)!i=1nj=1m(i+j1)=(nm)!i=1n(i1)!i=1n(i+m1)!

S(n)=i=1ni!,则答案为 (nm)!S(n1)S(m1)S(n+m1),于是预处理阶乘,时间复杂度为 O(nm+T)

posted @   Neal_lee  阅读(1040)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示