(搁置, 填坑看心情.)

\[\mathfrak{Defining~\LaTeX~macros\cdots}
\newcommand{\qnum}[1]{\lbrack{#1}\rbrack_q}
\newcommand{\qbino}[2]{{{#1}\brack{#2}}_q}
\newcommand{\vct}[1]{\boldsymbol{#1}}
\]

  所谓 \(q-\text{analog}\), 即对一个对象 \(u\), 构造关于 \(q\) 的表达式 \(f(q)\), 使得

\[u=\lim_{q\rightarrow1}f(q).
\]

  就组合数学来说, 也许可以理解为: \(u\) 是某类对象的 "总数", 而 \(f(q)\) 则以 \(q\) 的指标为这类对象赋予不同的组合意义, 得到一个 GF. 当然, 带入 \(q\rightarrow 1\) 的时候, GF 的值也就是总数了.


  先来看一些定义.

  \(\textbf{Definition 1.}\) \((q-\text{integer})\) \(\displaystyle \qnum n:=\sum_{i=0}^{n-1}q^i\).

  \(\textbf{Definition 2.}\) \((q-\text{factorial})\) \(\displaystyle \qnum n!:=\prod_{i=1}^n[i]_q=\frac{\prod_{i=1}^n(1-q^i)}{(1-q)^n}\).

  \(\textbf{Definition 3.}\) \((q-\text{binomial coefficient})\) \(\displaystyle \qbino{n}{m}:=\frac{[n]_q!}{[m]_q![n-m]_q!}~(n\ge m\ge 0)\).

  \(\textbf{Definition 4.}\) \((q-\text{polynomial coefficient})\) \(\displaystyle \qbino{\sum a}{\{a\}}:=\frac{[\sum a]_q!}{\prod_i[a_i]_q!}\).

  需要关注的是这些 \(q-\text{analog}\) 所引出的 \(f(q)\) 的组合意义. 我们用 \(\qnum n!\) 来举例:

  \(\textbf{Theorem 1.}\) 令 \(S_n\) 为 \(n\) 阶排列集合, \(\pi(\sigma)\) 表示排列 \(\sigma\) 的逆序对数, 则

\[\qnum n!=\sum_{\sigma\in S_n}q^{\pi(\sigma)}.
\]

组合意义上, 这表明 \([n]_q!\) 是 \(n\) 阶排列数量关于逆序对数的 GF.

  \(\textbf{Proof.}\) 枚举 \(\sigma\) 的反序表 (每个位置对逆序对的贡献), 则

\[\begin{aligned}
\sum_{\sigma\in S_n}q^{\pi(\sigma)}
&= \sum_{r_1=0}^{n-1}\sum_{r_2=0}^{n-2}\cdots\sum_{r_n=0}^0q^{r_1+r_2+\cdots+r_n}\\
&= \sum_{r_1=0}^{n-1}q^{r_1}\sum_{r_2=0}^{n-2}q^{r_2}\cdots\sum_{r_n=0}^nq^{r_n}\\
&= \prod_{i=1}^{n}[i]_q\\
&= \qnum n!.
\end{aligned}
\]
$\square$

  尝试把传统的结论搬到 \(q-\text{analog}\) 上. 比如对于组合数的递推 \(\binom{n}{m}=\binom{n-1}{m-1}+\binom{n-1}{m}\), 可以推导其类似的 \(q-\text{analog}\) 形式:

  \(\textbf{Theorem 2.}\) 对于 \(q-\text{binomial}\), \(n\ge1\) 时存在递推

\[\qbino{n}{m}=\qbino{n-1}{m-1}+q^m\qbino{n-1}{m}.
\]

  \(\textbf{Proof.}\) 循规蹈矩展开即证.

\[\begin{aligned}
\qbino{n-1}{m-1}+q^m\qbino{n-1}{m}
&= \frac{[n-1]_q!}{[m-1]_q![n-m]_q!}+q^m\frac{[n-1]_q!}{[m]_q![n-m-1]_q!}\\
&= \frac{\prod_{i=n-m+1}^{n-1}(1-q^i)}{\prod_{i=1}^{m-1}(1-q^i)}+\frac{q^m\prod_{i=n-m}^{n-1}(1-q^i)}{\prod_{i=1}^m(1-q^i)}\\
&= \frac{\prod_{i=n-m+1}^n(1-q^i)}{\prod_{i=1}^{m}(1-q^i)}\\
&= \qbino{n}{m}.
\end{aligned}
\]
$\square$

  所以 ... 组合意义到底是什么呢? 考虑 "在网格图上行走" 这一经典情景, 由于

\[\qbino{n+m}{m}=\qbino{n+m-1}{m-1}+q^m\qbino{n+m-1}{m}.
\]

所以 \([q^k]\qbino{n+m}{n}\) 就表示从 \((0,0)\) 走折线到 \((n,m)\), 折线与 \(x\) 轴间的网格数量为 \(k\) 的方案数. 明显 "与 \(x\) 轴" 和 "与 \(y\) 轴" 没有区别, 从这个角度我们也能说明

\[\qbino{n}{m}=\qbino{n}{n-m}.
\]

  有二项式系数自然有二项式定理啦!

  \(\textbf{Theorem 3.}\) \((q-\text{binomial theorem})\)

\[\prod_{i=0}^{n-1}(1+q^iz)=\sum_{i=0}^nq^{\binom{i}{2}}\qbino{n}{i}z^i.
\]

  \(\textbf{Proof.}\) 和二项式定理一样, 尝试归纳证明. 对于 \(n=1\) 是显然的. 对于 \(n>1\):

\[\begin{aligned}
\prod_{i=0}^{n-1}(1+q^iz)
&= (1+q^{n-1}z)\prod_{i=0}^{n-2}(1+q^iz)\\
&= (1+q^{n-1}z)\sum_{i=0}^{n-1}q^{\binom{i}{2}}\qbino{n-1}{i}z^i.\\
&= \sum_{i=0}^nz^i\left(q^{\binom{i}{2}}\qbino{n-1}{i}+q^{n-1}q^{\binom{i-1}{2}}\qbino{n-1}{i-1}\right)\\
&= \sum_{i=0}^nz^iq^{\binom{i}{2}}\left(\qbino{n-1}{n-i-1}+q^{n-i}\qbino{n-1}{n-i}\right)\\
&= \sum_{i=0}^nq^{\binom{i}{2}}\qbino{n}{i}z^i.
\end{aligned}
\]
$\square$

  反过来, \(\qbino{n}{m}\) 的组合意义仍然是我们所关心的. 从二项式定理反向构造, 我们可以得到一个重要的结论:

  \(\textbf{Theorem 4.}\)

\[\qbino{n}{m}=\sum_{S\in\{1..n\},|S|=m}q^{\sum_{x<y}[x\notin S][y\in S]}.
\]

即, 在 \(\binom{n}{m}\) 所描述的 \(n\) 个盒子放 \(m\) 个球的基础上, 方案数关于 "是否有球" 这一 \(01\) 序列逆序对的 GF.

  \(\textbf{Proof.}\) 在 \(\text{Theorem 3.}\) 中左右提取 \([z^m]\), 那么

\[\begin{aligned}[]
[z^m]\prod_{i=0}^{n-1}(1+q^iz)
&= \sum_{S\in\{0..n-1\},|S|=m}q^{\sum_{x\in S}x}\\
&= \sum_{S\in\{1..n\},|S|=m}q^{\sum_{x\in S}\sum_{y=0}^{x-1}1}\\
&= \sum_{S\in\{1..n\},|S|=m}q^{\sum_{x\in S}\left(\sum_{y\in S}[y<x]+\sum_{y\notin S}[y<x]\right)}\\
&= q^{\binom{i}{2}}\sum_{S\in\{1..n\},|S|=m}q^{\sum_{x\in S}\sum_{y\notin S}[y<x]}.
\end{aligned}
\]
$\square$

  利用这个难以描述的结论可以推出很多东西, 比如范德蒙德卷积:

  \(\textbf{Theorem 5.}\)

\[\qbino{n+m}{k}=\sum_{i=0}^kq^{(n-i)(k-i)}\qbino{n}{i}\qbino{m}{k-i}.
\]

  嗯, 再找点组合数的出现情景 ... 欸? 我们在研究 GF, 那就不得不提到

\[[z^m]\frac{1}{(1-z)^n}=\binom{n+m-1}{m},
\]

那有没有一种可能 ...

  \(\textbf{Theorem 6.}\)

\[\prod_{i=0}^{n}\frac{1}{1-q^iz}=\sum_{i\ge0}\qbino{n+i}{i}z^i.
\]

  \(\textbf{Proof.}\) 不喜欢归纳? 组合意义! 展开左式的级数, 依次选择 \(q^{ij}z^j\) 的过程中, 将 \(z\) 的指标视为 \(x\) 方向的移动, \(q\) 的指标视为 \(y\) 方向的移动, 最终走到 \(z^m\) 时, \(q\) 的指标正好对应走出的折线与 \(y\) 轴间的网格数量. 套用 \(\text{Theorem 2.}\) 的推论即证.

$\square$

  又解决一个, 接下来看看 Lucas 定理

\[\binom{n}{m}\equiv\binom{n/p}{m/p}\binom{n\bmod p}{m\bmod p}\pmod p\quad(p\in\mathbb P).
\]

现在, 我们来研究 \(\qbino{n}{m}\bmod p\) 的结果. 有结论:

  \(\textbf{Theorem 7.1.}\) \((q-\text{Lucas's theorem})\)

\[\qbino{n}{m}=\binom{n/p}{m/p}\qbino{n\bmod p}{m\bmod p}\pmod{\Phi_p(q)}.
\]

其中 \(\Phi_p(q)\) 表示关于 \(q\) 的 \(p\) 阶分圆多项式. 当然, 在 \(\mathbb R[q]\) 上利用 CRT, 也能得到:

  \(\textbf{Theorem 7.2.}\)

\[\qbino{n}{m}=\binom{n/p}{m/p}\qbino{n\bmod p}{m\bmod p}\quad(q\rightarrow e^{\frac{2\pi i}{p}k},~k\perp p).
\]

  \(\textbf{Proof.}\)   令 \(d=\operatorname{ord}_p(q)\), 有引理:

  \(\textbf{Lemma.}\)

\[\qbino{d}{m}\equiv0\pmod p\quad(m\in(0,d)).
\]

  \(\textbf{Proof.}\) 展开左式多项式, 分母非 \(0\), 分子为 \(0\).

$\square$

  因此再由 \(\text{Theorem 3.}\) 可知

\[\prod_{i=0}^{d-1}(1+q^iz)\equiv 1+z^d\pmod p.
\]

  继续在二项式形式上研究, 发现

\[\begin{aligned}[]
[z^m]\prod_{i=0}^{n-1}(1+q^iz)
&= [z^m]\left(\prod_{i=0}^{d-1}(1+q^iz)\right)^{n/d}\left(\prod_{i=0}^{(n\bmod d)-1}(1+q^iz)\right)\\
&\equiv \left([z^{m/d}](1+z)^{n/d}\right)\left([z^{m\bmod d}]\prod_{i=0}^{(n\bmod d)-1}(1+q^iz)\right)\\
&= \binom{n/d}{m/d}\qbino{n\bmod d}{m\bmod d}\pmod{p}.
\end{aligned}
\]
$\square$

  \(\textbf{Example 1.}\) 求 \(\qnum n!\bmod q^m\).

  \(\textbf{Solution.}\) 存在许多没用 \(q-\text{analog}\) 的做法, 这里不提.

  欲求

\[\frac{\prod_{i=1}^n(1-q^i)}{(1-q)^n}\bmod q^m.
\]

用 \(\text{Theorem 3.}\) 变形分子:

\[\begin{aligned}[]
\prod_{i=1}^n(1-q^i)
&= \prod_{i=0}^{n-1}(1-q\cdot q^i)\\
&= \sum_{i=0}^n(-1)^iq^{\binom{i+1}{2}}\qbino{n}{i}.
\end{aligned}
\]

显然只有前 \(\sqrt m\) 项有用. 此外, 注意组合数本身的递推是容易的. 例如

\[\qbino{n}{i}=\frac{1-q^{n-i+1}}{1-q^i}\qbino{n}{i-1},
\]

其中 \(\frac{1-q^{n-i+1}}{1-q^i}\) 对系数的变化非常规整, 可以线性地求出来. 因此, 维护 \(\qbino{n}{i}/(1-q)^n\), 可以做到 \(\mathcal O(m\sqrt m)\). 值得注意的是, 分母 \((1-q)^n\) 可以换成任意多项式.

  有趣的是, \(\qnum n!\) 的分子之倒数形似拆分数的 GF. 进一步, 可以指出:

\[\qbino{n}{m}=[z^n]\frac{1}{1-z}\prod_{i=1}^m\frac{1}{1-q^iz}.
\]

即, 左式是拆分项数不超过 \(n\), 每项都不超过 \(m\) 时, 划分方案关于被划分数的 GF.

  怎么这不标个 \(\text{Theorem}\) 也不给证明? 你看这玩意儿和 \(\text{Theorem 2.}\) 的推论分明一个意思嘛!

  \(\textbf{Example 2.}\) 有限域上的计数问题.

  \(\textbf{Example 2.1.}\) 求 \(\mathbb F_q^n\) 中大小为 \(k\) 的线性无关有序向量组个数.

  \(\textbf{Solution.}\) 答案显然是

\[\prod_{i=0}^{k-1}(q^n-q^i).
\]

当然, 这个例子是为了引出一个定义来描述这个比较基本的式子:

  \(\textbf{Definition 5.}\) \(((n)_k)_q:=\prod_{i=0}^{k-1}(q^n-q^i)=\frac{(q-1)^kq^{\binom{k}{2}}\qnum n!}{\qnum{n-k}!}\).

  \(\textbf{Example 2.2.}\) 求 \(\mathbb F_q^n\) 中 \(k\) 维子空间的个数.

  \(\textbf{Solution.}\) 先找钦定空间的一个基. 其方案数为 \(((n)_k)_q\). 此时每个 \(k\) 维空间会被计数 \(((k)_k)_q\) 次. 所以答案为 \(\frac{((n)_k)_q}{((k)_k)_q}\). 正巧:

\[\qbino{n}{k}=\frac{((n)_k)_q}{((k)_k)_q}.
\]

计算意义上不难验证. 怎么编个组合意义?

  在 \(\binom{n}{m}\) 所描述的 \(n\) 个盒子放 \(m\) 个球的基础上, 方案数关于 "是否有球" 这一 \(01\) 序列逆序对的 GF.

  考虑 \(k\) 个基行向量消元后得到的 \(k\times n\) 的上三角矩阵, 我们按列计数. 每选一列, 如果这一列上出现了一个新的向量, 那么方案数为 \(1\) (消元过程已确定), 否则方案数为已有向量的张成空间里任选一个的方案数, 即前面有的 \(1\) 的个数.

$\square$

  \(\textbf{Example 2.3.}\) 求 \(\mathbb F_q\) 上秩为 \(k\) 的 \(n\times m\) 的矩阵个数.

  \(\textbf{Solution.}\) 不妨考虑行秩. 先在 \(\mathbb F_q^m\) 上取一个大小为 \(k\) 的线性无关向量组, 钦定其为矩阵的一个极大线性无关向量组. 顺便需要钦定这个向量组是满足条件的向量组中行编号字典序最小的. 此时的方案数为 \(((m)_k)_q\).

  对于剩下的 \(n-k\) 个向量, 第 \(r\) 行的向量必须落在前 \(r-1\) 行张成的空间内. 熟悉组合意义的你可以直呼方案数为 \(\qbino{n}{k}\). 因此总方案为 \(((m)_k)_q\qbino{n}{k}\).

  当然, \(((m)_k)_q\qbino{n}{k}=\frac{((m)_k)_q((n)_k)_q}{((k)_k)_q}=((n)_k)_q\qbino{m}{k}\), 可以验证考虑列秩将得到一样的结果.

  \(\textbf{Example 2.4.}\) \(U,V\) 是 \(\mathbb F_q\) 上的线性空间, \(\dim U=n,\dim V=m\). 求 \(V^U\) 中的单射数量.

  \(\textbf{Solution.}\) 对于线性变换 \(\mathcal A: U\rightarrow V\), 取 \(U\) 的一组基 \(\{\vct u_{1..n}\}\), 则 \(\mathcal A\) 满秩当且仅当 \(V\) 上的向量组 \(\{\mathcal A\vct u_{1..n}\}\) 线性无关. 另一方面, \(\mathcal A\) 亦被 \(\{\mathcal A\vct u_{1..n}\}\) 唯一确定. 因此答案就是 \(((m)_n)_q\).

  \(\textbf{Example 2.5.}\) \(U,V\) 是 \(\mathbb F_q\) 上的线性空间, \(\dim U=n,\dim V=m\). 求 \(V^U\) 中的满射数量.

  \(\textbf{Solution.}\) 即 \(\mathbb F_q\) 上秩为 \(m\) 的 \(m\times n\) 的矩阵数量. \(((n)_m)_q\).

  \(\textbf{Example 2.6.}\) \(U,V\) 是 \(\mathbb F_q\) 上的线性空间, \(\dim U=n,\dim V=m\). 求 \(V^U\) 中的双射数量.

  \(\textbf{Solution.}\) 要求 \(n=m\). 此时答案为 \(((n)_n)_q\).

Note -「q-analog」组合意义灭天地的更多相关文章

  1. Note -「动态 DP」学习笔记

    目录 「CF 750E」New Year and Old Subsequence 「洛谷 P4719」「模板」"动态 DP" & 动态树分治 「洛谷 P6021」洪水 「S ...

  2. Note -「Lagrange 插值」学习笔记

    目录 问题引入 思考 Lagrange 插值法 插值过程 代码实现 实际应用 「洛谷 P4781」「模板」拉格朗日插值 「洛谷 P4463」calc 题意简述 数据规模 Solution Step 1 ...

  3. Note -「单位根反演」学习笔记

    \(\mathcal{Preface}\)   单位根反演,顾名思义就是用单位根变换一类式子的形式.有关单位根的基本概念可见我的这篇博客. \(\mathcal{Formula}\)   单位根反演的 ...

  4. Note -「Mobius 反演」光速入门

    目录 Preface 数论函数 积性函数 Dirichlet 卷积 Dirichlet 卷积中的特殊函数 Mobius 函数 & Mobius 反演 Mobius 函数 Mobius 反演 基 ...

  5. 「CTSC 2013」组合子逻辑

    Tag 堆,贪心 Description 给出一个数列 \(n\) 个数,一开始有一个括号包含 \([1,n]\),你需要加一些括号,使得每个括号(包括一开始的)所包含的元素个数 \(\leq\) 这 ...

  6. Note -「Min_25 筛」“你就说这素因子你要不要吧?你要不要?”

      赛上想写,Track Lost 了属于是. \(\mathscr{Intro}\)   Min_25 筛是用于求积性函数前缀和,同时顺带求出一些"有意思"的信息的筛法.   一 ...

  7. Linux 小知识翻译 - 「Linux」和「发行版」之间的关系

    「Linux」本来指的仅仅是内核.5年之前大多都是这么认为的,但是最近不这么说了. 最近一般都说「Linux」是个 OS,这里的OS,不仅仅是内核,而是指电脑的整体环境(除了内核,还包括一些外围的软件 ...

  8. LOJ 3399 -「2020-2021 集训队作业」Communication Network(推式子+组合意义+树形 DP)

    题面传送门 一道推式子题. 首先列出柿子,\(ans=\sum\limits_{T_2}|T_1\cap T_2|·2^{T_1\cap T_2}\) 这个东西没法直接处理,不过注意到有一个柿子 \( ...

  9. Note -「多项式」基础模板(FFT/NTT/多模 NTT)光速入门

      进阶篇戳这里. 目录 何为「多项式」 基本概念 系数表示法 & 点值表示法 傅里叶(Fourier)变换 概述 前置知识 - 复数 单位根 快速傅里叶正变换(FFT) 快速傅里叶逆变换(I ...

  10. Note -「圆方树」学习笔记

    目录 圆方树的定义 圆方树的构造 实现 细节 圆方树的运用 「BZOJ 3331」压力 「洛谷 P4320」道路相遇 「APIO 2018」「洛谷 P4630」铁人两项 「CF 487E」Touris ...

随机推荐

  1. Git项目提交规范结合Husky + commitlint使用

    一.前置条件 为了更好地 GIT 提交,加入了代码提交规范和规范校验,优雅的提交: 方便团队协作和快速定位问题,采取 Husky + commitlint 辅助项目做约定.  npm install ...

  2. 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现九

    一.前言介绍: 1.1 项目摘要 随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势.古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力.然而,在现代社会中 ...

  3. 开源 - Ideal库 - 常用枚举扩展方法(一)

    今天和大家享一些关于枚举操作相关的常用扩展方法. 我们平时用的比较多的是正常枚举,同时还有加[Flags]特性的位标志枚举,因此以下所有扩展方法同时适用正常枚举以及位标志枚举. 我们首先定义两种枚举用 ...

  4. bootstrapTable初始化常用参数

    bootstrapTable初始化常用参数,前端分页排序,后端获取表格数据 $('#table').bootstrapTable({ toolbar: '#mybar', //工具按钮用哪个容器 st ...

  5. Solr学习总结-Facet

    返回查询集合中指定field的统计情况,例如找到city一样的文档数目: 加入文档 <add> <doc> <field name="id">1 ...

  6. ScheduledThreadPoolExecutor与System#nanoTime

    一直流传着Timer使用的是绝对时间,ScheduledThreadPoolExecutor使用的是相对时间,那么ScheduledThreadPoolExecutor是如何实现相对时间的? 先看看S ...

  7. Java的多线程编程模型5--从AtomicInteger开始(自增长实现)

    AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字.而AtomicIn ...

  8. 使用 LLVM 框架创建有效的编译器,第 2 部分

    使用 clang 预处理 C/C++ 代码 无论您使用哪一种编程语言,LLVM 编译器基础架构都会提供一种强大的方法来优化您的应用程序.在这个两部分系列的第二篇文章中,了解在 LLVM 中测试代码,使 ...

  9. Java深度历险(八)——Java I/O

    在应用程序中,通常会涉及到两种类型的计算:CPU计算和I/O计算.对于大多数应用来说,花费在等待I/O上的时间是占较大比重的.通常需要等待速度较慢的磁盘或是网络连接完成I/O请求,才能继续后面的CPU ...

  10. golang之命令行工具Cobra

    github地址: https://github.com/spf13/cobra [安装] go get -u github.com/spf13/cobra@latest 使用cobra_cli工具 ...