棋盘多项式

来自testwiki
跳转到导航 跳转到搜索

组合数学的核心是解决计数问题,其中很重要的即为n个元素的排列方案的计数。 一个常见的将排列问题抽象的方法就是将其抽象为棋盘多项式。 首先看一个n×n的棋盘,n个元素的排列可以看成在这个棋盘上落下n个棋子,其中每一个横行、每一个竖列只允许有一个棋子。 而其中棋盘的格子是可以任意的n×n的棋盘的子集,这对应了存在一定限制的排列方案。

每一个棋盘对应着一个母函数代表该棋盘中描述无法攻击的棋子排列数。 这个母函数即为棋盘多项式

棋盘多项式

定义

设C为一棋盘,称k=0rk(C)xk为C的棋盘多项式,其中rk(C)表示k个棋子布到棋盘C的方案数[1]

  • 规定r0(C)=1

性质

  • Ci是棋盘C的某一指定格子所在的行与列都去掉后所得的棋盘,Ce是仅去掉该格子后的棋盘,则rk(C)=rk1(Ci)+rk(Ce)
  • 如果C由相互分离的C1C2组成,即C1的任一格子所在的行和列中都没有C2的格子,则有rk(C)=i=0kri(C1)rki(C2)

应用

结合容斥原理解决受限排列问题。

受限排列

定理

ri为 i个棋子布入禁区的方案数,i =1,2,3,…,n。有禁区的布子方案数(即禁区内不布棋子的方案数)为 n!r1(n1)!+r2(n2)!...+(1)nrn

定理证明

设事件Ai为棋子i落入禁区且其余棋子不限定是否落入禁区。 那么布子方案数即可用|A1A2A3An|进行表示。该排列数可以用容斥原理求解。 即|A1A2A3An|=|A1A2A3An| 其中,在棋盘上的不受限排列数为n!,那么有

|A1A2A3An|=|A1A2A3An|=n!|A1A2A3An|=n!(i=1n|Ai|i=1nj>i|AiAj|+i=1nj>ik>j|AiAjAk|++(1)n1|A1A2An|)

其中,至少有一个棋子落入禁区的方案数为i=1n|Ai|=r1(n1)!,至少两个棋子落入进去的方案数为|i=1nj>iAiAj|=r2(n2)!,以此类推,可以得到等式 |A1A2A3An|=n!r1(n1)!+r2(n2)!...+(1)nrn

举例

1.如下图所示,在4×4的棋盘上,打叉的地方为禁区,求棋子无一落入禁区的排列数。

×
× ×
× ×
×

首先通过排列多项式的性质得到禁区的棋盘多项式为1+6x+11x2+7x3+x4。 这样,该棋盘在受限情况下的方案数为4!6×3!+11×2!7×1!+1=4

2.错排问题,即n个元素组成的排列中标号为i的元素不排在第i位的方案数。

该问题即为受限排列问题。 具体到棋盘中,即为在n×n的棋盘上,所有的对角线元素都是禁区。 对于禁区的棋盘多项式的计算,由于该棋盘中所有元素均不在同一行同一列,根据棋盘多项式的性质容易得到为(1+x)n。 那么,根据受限排列的性质,得到错排方案数为n!C(n,1)(n1)!+C(n,2)(n2)!++(1)n1C(n,n)

相关页面

参考文献

Template:Authority control