更快的线性基算法

最近原创了一个更快的线性基算法,不知道学界有没有类似的东西?

问题是说,有 \(n\) 个长度为 \(L\)\(01\) 串,你要建立它们的线性基。

目前可以做到的最优复杂度是 \(O(\frac{nL\log \frac{1}{p}}{w}+\frac{L^3}{w})\),其中 \(p\) 是错误率。两种传统做法均是 \(O(\frac{nL^2}{w})\) 的。

新做法在 \(n=\frac{L^2}{\log \frac{1}{p}}\),且 \(L\) 远大于 \(w\) 时显著优于传统做法,新做法复杂度 \(O(\frac{L^3}{w})\),传统做法为 \(O(\frac{L^4}{w\log \frac{1}{p}})\)

我们先来回顾一下经典算法:

1、朴素加入,\(O(\frac{nL^2}{w})\)

2、尝试随机,我们每次随机一个向量集合,异或起来,再加入线性基,这样随机 \(O(L)\) 次,随机部分的复杂度是 \(O(\frac{nL^2}{w})\),线性基部分复杂度是 \(O(\frac{L^3}{w})\)。随机部分成为了瓶颈,这不够优秀。

我们结合这两部分的思想,尝试做一点改进。

考虑平衡这两者,我们考虑这样一个算法。

我们对长度为 \(n\) 的序列建立线段树,维护一个队列,一开始队列中只有根节点。我们每次尝试“扩展”一个节点,如果“扩展”成功,我们就递归地将线段树节点的两个儿子加入队列。

扩展的意思是说,我们不断在这个线段树节点的 \([l,r]\) 区间的向量张成出来的空间中,花费 \(O(\frac{(r-l+1)L}{w})\) 的代价随机一个向量出来,然后尝试加入线性基。如果连续 \(\log\frac{1}{p}\) 次没有成功,我们就认为这个子树内以高概率不存在我们想要的元素了,我们就终止扩展;否则,一旦加入成功,我们就停止随机,并扩展两个儿子求解。

我们尝试说明这个算法是正确的。

关于正确性:
首先一个引理是,两个线性空间的交也是线性空间。所以在线段树区间上的子空间随机一个向量,如果可以成功加入,那么和主空间交的部分一定只占这个子空间一半以下,那么成功率至少是 \(\frac{1}{2}\)

关于复杂度,我们分为两部分说明:
1、随机向量部分的复杂度为 \(O(\frac{nL(\log\frac{1}{p}+\log L)}{w})\)。我们把节点分为叶子和非叶子。

)关于叶子:叶子的区间之间是无交的,所以叶子的总长度是 \(O(n)\) 的,我们每个叶子要随机 \(\log{\frac{1}{p}}\) 次才有把握停止,所以对于叶子随机向量的复杂度是 \(O(\frac{nL\log\frac{1}{p}}{w})\)

)关于非叶子:我们每次有至少 \(\frac{1}{2}\) 的把握加入,所以期望 \(O(1)\) 次就能成功加入一个向量;而受线性基大小约束,最多成功加入 \(L\) 次,非叶子也最多 \(L\) 个,所以简单计算即可知道,非叶子的总长度最多为 \(O(n\log L)\),那么随机向量的复杂度就是 \(O(\frac{nL\log L}{w})\)

2、加入线性基部分的复杂度是 \(O(\frac{L^3\log \frac{1}{p}}{w})\) 的。

我们发现非叶子节点期望加入 \(O(L)\) 次线性基;而叶子节点一共有 \(O(L)\) 个,每个都会尝试加入 \(\log \frac{1}{p}\) 次,所以一共是 \(O(L\log \frac{1}{p})\) 次。所以这部分复杂度为 \(O(\frac{L^3\log {\frac{1}{p}}}{w})\)

至此,我们完整说明了这个算法。


upd: 20250310

首先是cxm提出,我们可以直接每次从 \(n\) 个里面随机 \(L\) 个出来,复杂度就是在 \(n=L^2\) 时就是 \(O(\frac{L^3\log L}{w})\) 的!

我发现我们复杂度其实可以做到更好。沿用 cxm 的思路做不下去了,还是考虑数据结构。

我们对序列按 \(L\) 定长分块,我们把序列分成 \(\frac{n}{L}\) 块,对于每个块,我们从中不断的随机异或出一个向量,直到连续 \(\log{\frac{1}{p}}\) 次插入失败。此时我们发现,我们随机向量和插入的复杂度是一样的,都是 \(O(\frac{L^2}{w})\),而我们随机的次数是 \(O(L+\frac{n\log{\frac{1}{p}}}{L})\) 的,复杂度就是 \(O(\frac{nL\log \frac{1}{p}}{w}+\frac{L^3}{w})\),注意到 \(O(\frac{L^3}{w})\) 是验证一组方程是否线性无关的下界(不考虑更快的矩阵乘法),而 \(O(\frac{nL\log \frac{1}{p}}{w})\) 很有可能是验证这个序列张成的空间中的向量是否都在这个线性基中的下界。(随机 \(\log \frac{1}{p}\) 次 check),所以这个复杂度是非常优的。

posted @ 2025-03-10 07:55  皮皮的橙子树  阅读(15)  评论(0)    收藏  举报