06 Babai 最近平面算法与近似 CVP
整理日期:2026-10-16。
前置笔记:02 基本区域、格行列式与正交化、04 基本计算格问题:SVP、CVP 与 SIVP、05 格基约化与 LLL 算法。
本篇使用欧氏范数,先讨论满秩情形:
B=(b1,…,bn)∈Zn×n,Λ=L(B),t∈Qn.
记 b1∗,…,bn∗ 为 Gram–Schmidt 正交化向量。
目标是找到 v∈Λ,使 ∥t−v∥ 尽可能接近
dist(t,Λ)=x∈Λmin∥t−x∥.
1. 为什么叫“最近平面”
固定最后一个基向量的整数系数,可以把格分成若干层:
Λ=c∈Z⋃(cbn+L(b1,…,bn−1)).
每一层位于一个仿射超平面
Hc=cbn+span(b1,…,bn−1).
这些超平面互相平行,法向量为 bn∗,相邻平面的距离为 ∥bn∗∥。因此,离 t 最近的平面对应
cn=round(∥bn∗∥2⟨t,bn∗⟩).
算法先选这一层,再在该层中处理剩余的基向量,逐步把问题降到一维。
这里采用的是贪心选择:最近的平面不一定包含最近的格点,所以一般只能得到近似解。
2. 算法步骤
NearestPlane(B, t):
计算 B 的正交化向量 b₁*, …, bₙ*
r ← t
v ← 0
对 i = n, n−1, …, 1:
c ← round(〈r, bᵢ*〉 / ||bᵢ*||²)
v ← v + c bᵢ
r ← r − c bᵢ
返回 v
其中 round 表示取最近整数;恰好位于中点时,固定采用一种取整规则即可。
理解算法时,需要区分两个操作:
- 计算系数使用 bi∗:利用正交方向判断当前目标离哪一层最近。
- 更新残差使用 bi:每次减去原格中的向量,保证最终输出仍属于 Λ。
每轮都对当前残差 r 计算系数。按下标从大到小处理,是因为后续使用的 b1,…,bi−1 都与 bi∗ 正交,不会改变已经处理好的这个方向。
最终
v=i=1∑ncibi∈Λ,r=t−v.
3. 任意基下的误差上界
每个正交方向都进行了一次最近整数取整,因此最终误差可以写成
t−v=i=1∑nεibi∗,∣εi∣≤21.
由正交性,
∥t−v∥2≤41i=1∑n∥bi∗∥2.
这个结论对任意格基成立,但它给出的是由当前基决定的绝对误差上界,还没有说明误差相对最优距离有多大。相关几何解释和残差性质见 Micciancio《Basis Reduction》,Fall 2017,§2,第 3–5 页,尤其 Lemma 5。
4. 配合 LLL 得到近似 CVP 算法
先使用第五篇的 LLL 算法约化输入基,再运行最近平面算法:
B′←LLL3/4(B),v←NearestPlane(B′,t).
得到
∥t−v∥≤2n/2dist(t,Λ).
因此,这一组合是一个多项式时间的 2n/2-近似 CVP 算法。这里固定 LLL 参数 δ=3/4,复杂度按整数基和有理目标的输入位长计算。见 Regev《Lecture 3: CVP Algorithm》,Fall 2004,第 1 页算法及第 3–4 页 Lemma 6。
近似保证的证明只需记住两个要点。
首先,LLL 条件给出
∥bi∗∥2≤2n−i∥bn∗∥2,
于是
i=1∑n∥bi∗∥2≤(2n−1)∥bn∗∥2.
其次,比较算法选中的层与一个最近格点所在的层:
- 如果处于同一层,就在这一层中递归分析。
- 如果处于不同层,最优距离至少为半个层间距,即 ∥bn∗∥/2。结合上面的误差上界,就能控制相对误差。
LLL 控制正交化长度之间的关系,使逐层取整的误差能够与最优距离建立联系。
5. 一个二维例子
沿用第二篇的基:
b1=(2,0),b2=(1,2).
其正交化向量为
b1∗=(2,0),b2∗=(0,2).
这组基本身已经满足 δ=3/4 的 LLL 条件。
取目标
t=(56,109).
先处理第二个方向:
c2=round(∥b2∗∥2⟨t,b2∗⟩)=round(209)=0.
因此选中 y=0 这一层,残差仍为 t。
再处理第一个方向:
c1=round(53)=1.
算法输出
v=b1=(2,0),∥t−v∥2=2029.
但另一层中的格点 b2=(1,2) 满足
∥t−b2∥2=45<2029.
这说明:即使输入基已经经过 LLL 约化,最近平面算法仍可能错过真正的最近格点。
另外,若直接对原基坐标取整,
B−1t=(3/89/20),Bround(B−1t)=(0,0).
它与最近平面算法的输出不同。两者的区别在于:直接坐标取整一次性处理原基坐标;最近平面算法沿正交方向,依据当前残差逐层取整。
LLL 提供基的质量保证,Babai 算法利用这组基逐层选取格点;二者结合,得到具有明确近似因子的 CVP 算法。
引用此笔记