Skip to content

方法Method

车多项式与禁位排列

Rook polynomial · 禁位棋盘计数

把兼容的禁位交集编码为非攻击车,证明删占递推、独立分块乘积和禁位排列的容斥公式。

形式陈述 ​

棋盘 B⊆[m]×[n] 是一组指定格子。一个 k 车放置是其中的 k 元子集,任意两格都不同行、不同列。车没有编号,选择同一批格子的先后次序不产生新放置。记其数量为 rk(B),规定 r0(B)=1,定义

RB(t)=∑k=0min(m,n)rk(B)tk.

这里 B 只表示“允许在其中统计车的格子”;当它用来编码禁位排列时,B 中的格子反而是排列不能占用的位置。这两个层次不能混读。

对格子 s=(i,j)∈B,记 B−s 只删该格,B∖(i,∗)∖(∗,j) 删其整行与整列,则

RB(t)=RB−s(t)+tRB∖(i,∗)∖(∗,j)(t).

若 B=B1⊔B2,且两块所用行集合不交、列集合也不交,则 RB=RB1RB2。仅格子不相交还不够。

当 B⊆[n]×[n] 是禁位板,排列 π 合法意为每个 (i,π(i))∉B。合法排列总数为

N0(B)=∑k=0n(−1)krk(B)(n−k)!.

这数全部合法安排,与只判断能否安排的匹配问题有不同的输出。

直觉

把“第 i 个位置不得放 j”画成格子,比把几十条限制写成句子更容易发现冲突。容斥会暂时强迫若干禁令同时被违反。若强迫同一行放两个不同元素,或强迫两行使用同一元素,交集就是空集;剩下可实现的交集,正好是一组互不攻击的车。

从禁位格到六个合法排列

删占递推按 s 是否被选分两类。不选者恰是 B−s 上的放置;选者拿掉 s 上的车后,剩余车必须避开整行整列。这个拆法可逆,且不选与选互斥,所以系数可以相加。占用一格使车数增加一,因此要乘 t。

分块乘积来自同样清楚的双射:把一个放置分别限制在 B1,B2 上,得到两个可独立选择的放置;反向取并集也不会攻击。于是 rk(B)=∑a+b=kra(B1)rb(B2),这就是多项式乘法。

为什么最后还要乘阶乘 ​

对每个禁位 s=(i,j),令 As={π:π(i)=j}。由容斥原理,避免全部 As 的数目是所有交集大小的交替和。选出的 k 格若攻击,交集大小为零;若不攻击,已确定 k 个不同输入的不同像,剩余 n−k 个输入与 n−k 个像可任意双射,恰有 (n−k)! 个完成。因此同阶非零交集合并成 rk(B)(n−k)!。

这里的剩余排列仍允许再次命中其他禁位。容斥本来就是在无约束总体里算交集;若提前删掉其他禁位,会重复施加排除条件。

例子与边界

取四行四列禁位

B={(1,1),(1,2),(2,2),(3,3),(4,4)}.

左上三格组成 L 块,其车数为 r0=1,r1=3,r2=1;唯一两车放置是 {(1,1),(2,2)}。另外两格各占独立行列,所以

RB(t)=(1+3t+t2)(1+t)2=1+5t+8t2+5t3+t4.

第二项之后可逐项核对:两车数 1+3⋅2+1=8;三车数 1⋅2+3⋅1=5;四车数为一。于是

N0=24−5⋅6+8⋅2−5⋅1+1=6.

独立枚举不使用车多项式:第一行只能取 3 或 4。取 3 时合法列表是 3142,3412,3421;取 4 时是 4123,4312,4321。六个列表都把第 i 项解释为 π(i)。

两个单格 (1,1),(1,2) 虽然不相交,却共行。其多项式是 1+2t,不是 (1+t)2。对角禁位则确实独立,得到 (1+t)n,代入上式恢复旧错排公式,不需要另造一种错排定义。

空棋盘的多项式是 1,并非零;它给 n! 个合法排列。满 n×n 禁位板在 n>0 时不给任何合法排列。矩形板仍能统计部分车,但最后的 (n−k)! 公式声明的是方阵上的全排列;若要把 m 人注入 n 个岗位,m≤n 时应改用 (n−k)m−k―=(n−k)(n−k−1)⋯(n−m+1) 个完成(零个因子时为一)。

推论与应用

完整矩形板上先选 k 行、k 列,再把它们配对,得到 rk=(mk)(nk)k!。这也说明车多项式是对应二分图按大小计数的匹配多项式的一种编码,但本页不替代匹配存在性、增广路或指派最优化的现有正本。

若要计“恰违反两条”,只算 N0 已经丢失信息,应使用命中数变换。若行或列按高度逐层嵌套,Ferrers 车因式分解可以把同一个多项式改写到阶乘基后快速求系数。

删占递推总能用于有限板,却可能产生指数多个分支。它是正确性可检查的算法,不是任意禁位计数都高效的承诺。实际计算可先拆互不共行列的连通块,再缓存重复子板。

参考资料
关系图谱7 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

使用的工具