EGZ 定理的一个确定性算法
定理(Erdős–Ginzburg–Ziv 定理)
对任意 \(2n−1\) 个整数,总存在 \(n\) 个数,其和被 \(n\) 整除。
嗯,对。这篇文章基本是对这篇论文的复读。
构造性证明
下边定义 \(\displaystyle A\oplus_{p}B=\left\{(a+b)\bmod p\,|\,a\in A,b\in B\right\}\)
Lemma(Cauchy-Davenport 定理)
对于 \(\mathbb Z/p\mathbb Z\) 的非空子集 \(A,B\),有以下不等式:
\[|A+B|\ge\min\{p,|A|+|B|-1\} \]
对集合大小归纳即可,在此略过。
先来考虑 \(n\) 为素数的情况。
对这 \(2n-1\) 个数模 \(n\) 并排序,记这个数列为 \(\{a_n\}\)。
如果存在 \(a_i=a_{i+n}\),则 \(\{a_i, a_{i+1},\dots,a_{i+n-1}\}\) 的和被 \(n\) 整除。
如果不存在,那么根据引理,\(\displaystyle |\{a_1,a_{n+1}\}\oplus_{n}\{a_2,a_{n+2}\}\oplus_{n}\cdots\oplus_{n}\{a_n\}|=n\),定理得证。
\(n\) 为合数,设 \(n=pm\),其中 \(p\) 为素数。
考虑每次对前 \(2p-1\) 个数找到符合条件的 \(p\) 个数,然后打包成一个 \(B_i\) 并从总的 \(2pm-1\) 个数中去除。
总共能进行 \(2m-1\) 次以上操作,设新数列 \(\displaystyle b_i=\frac{\sum B_i}{p}\),我们对这 \(2m-1\) 个数递归地继续做下去,找到其中 \(m\) 个和被 \(m\) 整除的 \(b_i\),\(\displaystyle m\mid \sum b_i\Rightarrow pm\mid \sum p\cdot b_i\Rightarrow n\mid \sum \sum B_i\) 得证。
实现
不难发现瓶颈在 \(n\) 为素数的情况,直接维护这个余数集合的话大概是 \(O(n^2)\) 的,考虑如何改进,设 \(\displaystyle S_i=\left(\bigoplus\limits_{j=1}^{i-1} \,\{a_j,a_{n+j}\}\right)\oplus_n\left(\bigoplus\limits_{j=i}^{n} \,\{a_j\}\right)\),提取一下系数,可以得到 \(\displaystyle S_1=\left(\sum_{i=1}^n a_i\right)\bmod p\),\(S_i=S_{i-1}\oplus_p\{0,a_{i+p-1}-a_{i-1}\}\),下边设 \(d_i=a_{i+n}-a_i\)。
根据引理不难得出,\(|S_i|\ge i\),所以可以设计一个辅助集合 \(T_i\subset S_i\) 满足 \(|T_i|=i\) 且 \(T_{i-1}\subset T_i\),不难得出,\(T_n=S_n\),所以这里转化为了如何去求每次新增进来的那个元素。
因为 \(T_{i-1}\subset T_{i-1}\oplus_n \{0,d_{i-1}\}\),所以存在一个 \(t_i\) 满足 \(t_i-d_{i-1}\in T_{i-1}\) 且 \(t_i\not\in T_{i-1}\),又因为 \(t_i\in T_{i-1}\oplus_n \{0,d_{i-1}\}\subset S_{i-1}\oplus_n \{0,d_{i-1}\}=S_i\),所以可以构造 \(T_i=T_{i-1}\cup\{t_i\}\)。
对于所有的 \(T_i\) 来说,我们知道 \(\left(\sum_{i=1}^n a_i\right)\bmod p\in T_1\subset T_i\),而且 \(0\not\in T_i\),设前者为 \(l\cdot d_{i-1}\),后者为 \(r\cdot d_{i-1}\),所以一定存在一个边界 \(x\) 使得 \((x-1)\cdot d_{i-1}\in T_{i-1}\) 且 \(x\cdot d_{i-1}\in T_{i-1}\),这个 \(x\) 就是我们要找的 \(t_i\),虽然这个边界不唯一,但也可以通过二分查找来找到某个边界。
路径的话记录下每个 \(t_i\) 的编号最后从 \(0\) 开始跳就好。
记号和证明写的稀烂,凑活看吧,写这篇主要是因为我前几天偶然看到的,觉得颇为巧妙,再加上现在从身体和精神上都半废的人确实也没什么可干的。
好像还有 \(O(n\log\log\log n )\) 的算法,看得我胃痛,不看了。

浙公网安备 33010602011771号