(搁置, 填坑看心情.)
Defining LATEX macros⋯
所谓 q−analog, 即对一个对象 u, 构造关于 q 的表达式 f(q), 使得
u=limq→1f(q).
就组合数学来说, 也许可以理解为: u 是某类对象的 "总数", 而 f(q) 则以 q 的指标为这类对象赋予不同的组合意义, 得到一个 GF. 当然, 带入 q→1 的时候, GF 的值也就是总数了.
先来看一些定义.
Definition 1. (q−integer) [n]q:=n−1∑i=0qi.
Definition 2. (q−factorial) [n]q!:=n∏i=1[i]q=∏ni=1(1−qi)(1−q)n.
Definition 3. (q−binomial coefficient) [nm]q:=[n]q![m]q![n−m]q! (n≥m≥0).
Definition 4. (q−polynomial coefficient) [∑a{a}]q:=[∑a]q!∏i[ai]q!.
需要关注的是这些 q−analog 所引出的 f(q) 的组合意义. 我们用 [n]q! 来举例:
Theorem 1. 令 Sn 为 n 阶排列集合, π(σ) 表示排列 σ 的逆序对数, 则
[n]q!=∑σ∈Snqπ(σ).
组合意义上, 这表明 [n]q! 是 n 阶排列数量关于逆序对数的 GF.
Proof. 枚举 σ 的反序表 (每个位置对逆序对的贡献), 则
∑σ∈Snqπ(σ)=n−1∑r1=0n−2∑r2=0⋯0∑rn=0qr1+r2+⋯+rn=n−1∑r1=0qr1n−2∑r2=0qr2⋯n∑rn=0qrn=n∏i=1[i]q=[n]q!.
□
尝试把传统的结论搬到 q−analog 上. 比如对于组合数的递推 (nm)=(n−1m−1)+(n−1m), 可以推导其类似的 q−analog 形式:
Theorem 2. 对于 q−binomial, n≥1 时存在递推
[nm]q=[n−1m−1]q+qm[n−1m]q.
Proof. 循规蹈矩展开即证.
[n−1m−1]q+qm[n−1m]q=[n−1]q![m−1]q![n−m]q!+qm[n−1]q![m]q![n−m−1]q!=∏n−1i=n−m+1(1−qi)∏m−1i=1(1−qi)+qm∏n−1i=n−m(1−qi)∏mi=1(1−qi)=∏ni=n−m+1(1−qi)∏mi=1(1−qi)=[nm]q.
□
所以 ... 组合意义到底是什么呢? 考虑 "在网格图上行走" 这一经典情景, 由于
[n+mm]q=[n+m−1m−1]q+qm[n+m−1m]q.
所以 [qk][n+mn]q 就表示从 (0,0) 走折线到 (n,m), 折线与 x 轴间的网格数量为 k 的方案数. 明显 "与 x 轴" 和 "与 y 轴" 没有区别, 从这个角度我们也能说明
[nm]q=[nn−m]q.
有二项式系数自然有二项式定理啦!
Theorem 3. (q−binomial theorem)
n−1∏i=0(1+qiz)=n∑i=0q(i2)[ni]qzi.
Proof. 和二项式定理一样, 尝试归纳证明. 对于 n=1 是显然的. 对于 n>1:
n−1∏i=0(1+qiz)=(1+qn−1z)n−2∏i=0(1+qiz)=(1+qn−1z)n−1∑i=0q(i2)[n−1i]qzi.=n∑i=0zi(q(i2)[n−1i]q+qn−1q(i−12)[n−1i−1]q)=n∑i=0ziq(i2)([n−1n−i−1]q+qn−i[n−1n−i]q)=n∑i=0q(i2)[ni]qzi.
□
反过来, [nm]q 的组合意义仍然是我们所关心的. 从二项式定理反向构造, 我们可以得到一个重要的结论:
Theorem 4.
[nm]q=∑S∈{1..n},|S|=mq∑x<y[x∉S][y∈S].
即, 在 (nm) 所描述的 n 个盒子放 m 个球的基础上, 方案数关于 "是否有球" 这一 01 序列逆序对的 GF.
Proof. 在 Theorem 3. 中左右提取 [zm], 那么
[zm]n−1∏i=0(1+qiz)=∑S∈{0..n−1},|S|=mq∑x∈Sx=∑S∈{1..n},|S|=mq∑x∈S∑x−1y=01=∑S∈{1..n},|S|=mq∑x∈S(∑y∈S[y<x]+∑y∉S[y<x])=q(i2)∑S∈{1..n},|S|=mq∑x∈S∑y∉S[y<x].
□
利用这个难以描述的结论可以推出很多东西, 比如范德蒙德卷积:
Theorem 5.
[n+mk]q=k∑i=0q(n−i)(k−i)[ni]q[mk−i]q.
嗯, 再找点组合数的出现情景 ... 欸? 我们在研究 GF, 那就不得不提到
[zm]1(1−z)n=(n+m−1m),
那有没有一种可能 ...
Theorem 6.
n∏i=011−qiz=∑i≥0[n+ii]qzi.
Proof. 不喜欢归纳? 组合意义! 展开左式的级数, 依次选择 qijzj 的过程中, 将 z 的指标视为 x 方向的移动, q 的指标视为 y 方向的移动, 最终走到 zm 时, q 的指标正好对应走出的折线与 y 轴间的网格数量. 套用 Theorem 2. 的推论即证.
□
又解决一个, 接下来看看 Lucas 定理
(nm)≡(n/pm/p)(nmodpmmodp)(modp)(p∈P).
现在, 我们来研究 [nm]qmodp 的结果. 有结论:
Theorem 7.1. (q−Lucas's theorem)
[nm]q=(n/pm/p)[nmodpmmodp]q(modΦp(q)).
其中 Φp(q) 表示关于 q 的 p 阶分圆多项式. 当然, 在 R[q] 上利用 CRT, 也能得到:
Theorem 7.2.
[nm]q=(n/pm/p)[nmodpmmodp]q(q→e2πipk, k⊥p).
Proof. 令 d=ordp(q), 有引理:
Lemma.
[dm]q≡0(modp)(m∈(0,d)).
Proof. 展开左式多项式, 分母非 0, 分子为 0.
□
因此再由 Theorem 3. 可知
d−1∏i=0(1+qiz)≡1+zd(modp).
继续在二项式形式上研究, 发现
[zm]n−1∏i=0(1+qiz)=[zm](d−1∏i=0(1+qiz))n/d⎛⎝(nmodd)−1∏i=0(1+qiz)⎞⎠≡([zm/d](1+z)n/d)⎛⎝[zmmodd](nmodd)−1∏i=0(1+qiz)⎞⎠=(n/dm/d)[nmoddmmodd]q(modp).
□
Example 1. 求 [n]q!modqm.
Solution. 存在许多没用 q−analog 的做法, 这里不提.
欲求
∏ni=1(1−qi)(1−q)nmodqm.
用 Theorem 3. 变形分子:
n∏i=1(1−qi)=n−1∏i=0(1−q⋅qi)=n∑i=0(−1)iq(i+12)[ni]q.
显然只有前 √m 项有用. 此外, 注意组合数本身的递推是容易的. 例如
[ni]q=1−qn−i+11−qi[ni−1]q,
其中 1−qn−i+11−qi 对系数的变化非常规整, 可以线性地求出来. 因此, 维护 [ni]q/(1−q)n, 可以做到 O(m√m). 值得注意的是, 分母 (1−q)n 可以换成任意多项式.
有趣的是, [n]q! 的分子之倒数形似拆分数的 GF. 进一步, 可以指出:
[nm]q=[zn]11−zm∏i=111−qiz.
即, 左式是拆分项数不超过 n, 每项都不超过 m 时, 划分方案关于被划分数的 GF.
怎么这不标个 Theorem 也不给证明? 你看这玩意儿和 Theorem 2. 的推论分明一个意思嘛!
Example 2. 有限域上的计数问题.
Example 2.1. 求 Fnq 中大小为 k 的线性无关有序向量组个数.
Solution. 答案显然是
k−1∏i=0(qn−qi).
当然, 这个例子是为了引出一个定义来描述这个比较基本的式子:
Definition 5. ((n)k)q:=∏k−1i=0(qn−qi)=(q−1)kq(k2)[n]q![n−k]q!.
Example 2.2. 求 Fnq 中 k 维子空间的个数.
Solution. 先找钦定空间的一个基. 其方案数为 ((n)k)q. 此时每个 k 维空间会被计数 ((k)k)q 次. 所以答案为 ((n)k)q((k)k)q. 正巧:
[nk]q=((n)k)q((k)k)q.
计算意义上不难验证. 怎么编个组合意义?
在 (nm) 所描述的 n 个盒子放 m 个球的基础上, 方案数关于 "是否有球" 这一 01 序列逆序对的 GF.
考虑 k 个基行向量消元后得到的 k×n 的上三角矩阵, 我们按列计数. 每选一列, 如果这一列上出现了一个新的向量, 那么方案数为 1 (消元过程已确定), 否则方案数为已有向量的张成空间里任选一个的方案数, 即前面有的 1 的个数.
□
Example 2.3. 求 Fq 上秩为 k 的 n×m 的矩阵个数.
Solution. 不妨考虑行秩. 先在 Fmq 上取一个大小为 k 的线性无关向量组, 钦定其为矩阵的一个极大线性无关向量组. 顺便需要钦定这个向量组是满足条件的向量组中行编号字典序最小的. 此时的方案数为 ((m)k)q.
对于剩下的 n−k 个向量, 第 r 行的向量必须落在前 r−1 行张成的空间内. 熟悉组合意义的你可以直呼方案数为 [nk]q. 因此总方案为 ((m)k)q[nk]q.
当然, ((m)k)q[nk]q=((m)k)q((n)k)q((k)k)q=((n)k)q[mk]q, 可以验证考虑列秩将得到一样的结果.
Example 2.4. U,V 是 Fq 上的线性空间, dimU=n,dimV=m. 求 VU 中的单射数量.
Solution. 对于线性变换 A:U→V, 取 U 的一组基 {u1..n}, 则 A 满秩当且仅当 V 上的向量组 {Au1..n} 线性无关. 另一方面, A 亦被 {Au1..n} 唯一确定. 因此答案就是 ((m)n)q.
Example 2.5. U,V 是 Fq 上的线性空间, dimU=n,dimV=m. 求 VU 中的满射数量.
Solution. 即 Fq 上秩为 m 的 m×n 的矩阵数量. ((n)m)q.
Example 2.6. U,V 是 Fq 上的线性空间, dimU=n,dimV=m. 求 VU 中的双射数量.
Solution. 要求 n=m. 此时答案为 ((n)n)q.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2021-07-13 Solution -「LOJ #141」回文子串 ||「模板」双向 PAM
2021-07-13 Solution -「LOJ #150」挑战多项式 ||「模板」多项式全家桶
2020-07-13 Solution -「SV 2020 Round I」SA