LOJ 3400 Storm & CodeChef SELEDGE 命题报告(下)
关于本文
SELEDGE 是我在 CodeChef 网站上命制的题目。
后来我将该题改编为集训队作业自选题,并由 EI 鸽鸽将其公开在了 LOJ 上(赞美 EI !),题号是 LOJ 3400 。本文将以 LOJ 上的题目版本为准。
本文分为上、下两个部分,前者基本上是复制粘贴自己先前写的题解,后者是对解法二的复杂度上界进行了改进。
解法二的复杂度分析
之前关于解法二,我们给出了 \(O\big(\left(N+M\right)+F_KC_K\,\mathrm{poly}\left(K\right)\big)\) 的复杂度上界,但这个界既不够简洁也不够紧。
在本节中我们将会:
- 将这个上界改写为更简洁的形式(上界一)。
- 将上界一改进,得到上界二。
将上界二改进,得到上界三。- 讨论进一步改进的可能性。
上界一
引理1:\(C_n=\Theta\left(4^n\cdot n^{-3/2}\right)\) ,其中 \(C\) 表示卡特兰数。(证明)
引理2:\(F_n=\Theta\left(\varphi^n\right)\) ,其中 \(F\) 表示斐波那契数,\(\varphi\approx 1.618\) 表示黄金比例。(由斐波那契数通项公式易得)
那么原先的界可以改写为 \(O\big(\left(N+M\right)+(4\varphi)^K\,\mathrm{poly}\left(K\right)\big)\) 。幂底数 \(4\varphi\) 约等于 \(6.472\) 。
上界二
回顾一下复杂度上界中 \(F_K\) 与 \(C_K\) 的含义:
- \(F_K\) :把根结点的至多 \(K\) 个儿子划分的方案数上界。
- \(C_K\) :树的形态的方案数上界。
更准确地说:
- 当根结点恰有 \(d\) 个儿子时,划分儿子的方案数为 \(F_d\) 。而 \(F_K\) 就等于 \(\max_d F_d\) ,且在忽略多项式因子后等于 \(\sum_d F_d\) 。
- 当根结点恰有 \(d\) 个儿子时,不妨记树的形态的方案数为 \(C_{K,d}\) 。而 \(C_K\) 就等于 \(\sum_d C_{K,d}\) ,且在忽略多项式因子后等于 \(\max_d C_{K,d}\) 。
- 于是 \(F_KC_K\) 就是实际的总方案数 \(\sum_d F_dC_{K,d}\) 的上界。
注意到: \(F_d\) 随 \(d\) 的上升而急剧上升,但当 \(d\) 接近于上限 \(K\) 时,\(C_{K,d}\) 的值是很小的。
也就是说,和式 \(\sum_d F_dC_{K,d}\) 中, \(F_d\) 的最大值与 \(C_{K,d}\) 的最大值是错位的。我们将利用这一错位来改进上界。
先给出 \(C_{K,d}\) 的上界: \(C_{K,d}\leq C_{K-d}{K-1 \choose K-d}\) 。理由是:
- 在原树中将根结点删去,会得到一个森林。将这个森林中所有根结点合并,会得到一棵 \(K-d+1\) 个结点的树 \(T\) ,树 \(T\) 的可能形态有 \(C_{K-d}\) 种。\(T\) 中所有深度为 1 的点,是原先的树中所有深度为 2 的点。
- 要想还原出原先的树,还需要对 \(T\) 的根结点的每个儿子,确定其在原树中的父亲是谁。也就是说,需要把 \(T\) 中深度为 1 的结点划分成 \(d\) 个(长度任意、不一定非空的)连续段。深度为 1 的结点至多有 \(K-d\) 个,于是由插板法,方案数至多是 \({(K-d)+d-1 \choose d-1}={K-1\choose K-d}\) 。
于是原先的上界可以改进为:(下式中求和指标 \(i\) 表示 \(K-d\) )
综上,解法二的复杂度为 \(O\big(\left(N+M\right)+(4+\varphi)^K\,\mathrm{poly}\left(K\right)\big)\) 。幂底数 \(4+\varphi\) 约等于 \(5.618\) 。
上界三
【原文已删除】
上界三它假了,大家散了吧。
😭😭😭
进一步的改进
改进思路一
在上界三的推导中,我们做了一步“用均值的幂来作为下降幂的上界”的转化(即引理3)。
如果把这个转化改为直接使用斯特林公式(或者说用 \(e^{\int\log x}\) 来近似下降幂),再利用两个因子的最大值的错位,那么应该能够得到比上界二更紧的界。
但我已经推麻了,我不想推了。😭
改进思路二
\(C_{K,d}\) 的表达式是能求出来的。
记 \(F(x)=\frac{1-\sqrt{1-4x}}{2x}\) 为卡特兰数 OGF ,则对于固定的 \(d\) ,\(C_{K,d}\) 关于 \(K\) 的 OGF 是 \(\left(xF(x)\right)^d\) 。
而 \(F(x)\) 又有 \(F^2(x)=\frac{F(x)-1}{x}\) 这个性质,于是易见任何 \(F^n(x)\) 都可以表出为 \(\frac{P_n(x)F(x)+Q_n(x)}{x^{n-1}}\) 的形式,其中多项式 \(P_n,Q_n\) 的系数是 OEIS A102426 。
进而可以得到 \(C_{K,d}\) 的通项,我算了算大概是
然而这个 \((-1)^i\) 好像很难办,一般的求上界方法对交错和好像都不太管用。不懂,也许有牛逼做法呢。