不是那么标准的定义
有一组线性无关的空间向量
(
b
1
,
b
2
,
…
,
b
n
)
∈
R
n
(b_1,b_2,\ldots,b_n) \in \mathbb{R^n}
(b1,b2,…,bn)∈Rn作为基,该组的每个向量若乘以某个整数系数(也就是通过线性变换)所产生的离散基向量生成空间向量集合就称为格。
L
(
b
1
,
b
2
,
…
,
b
n
)
=
{
Σ
x
i
b
i
∣
x
i
∈
Z
}
\mathcal{L}\left(b_{1}, b_{2}, \ldots, b_{n}\right)=\left\{\Sigma x_{i} b_{i} \mid x_{i} \in \mathbb{Z}\right\}
L(b1,b2,…,bn)={Σxibi∣xi∈Z}
如果把基向量组合用合成矩阵
B
B
B来表示
L
(
B
)
=
L
(
b
1
,
b
2
,
…
,
b
n
)
=
∑
i
=
1
n
b
i
⋅
Z
=
{
B
x
∣
x
∈
Z
n
}
\mathcal{L}(B)=\mathcal{L}\left(b_{1}, b_{2}, \ldots, b_{n}\right)=\sum_{i=1}^{n} \mathbf{b}_{i} \cdot \mathbb{Z}=\left\{B x \mid x \in \mathbb{Z}^{n}\right\}
L(B)=L(b1,b2,…,bn)=i=1∑nbi⋅Z={Bx∣x∈Zn}
帮助理解: 假如把空间里的向量的末端视为一个点,则格就是某空间里面的具有一些规律的离散的点集合,也可以说格是某空间中的一个离散的、具有加法运算的子群。类似这样
值得注意的是:
如何判定两个格基是否能生成同一个格呢?
当一个格基能通过幺模矩阵进行变换到另一个格基的时候,这两个格基就可以生成相同的格。
由格基 B B B线性组合,系数在 [ 0 , 1 ) [0,1) [0,1)之间组成的一块区域。
P
(
B
)
=
{
B
x
∣
x
∈
R
n
,
∀
i
:
0
⩽
x
i
<
1
}
\mathcal{P}(B)=\left\{B x \mid x \in \mathbb{R}^{n}, \forall i: 0 \leqslant x_{i}<1\right\}
P(B)={Bx∣x∈Rn,∀i:0⩽xi<1}
大概像这样,
如何判定给定的向量集是否构成格的“basis”?
由向量生成的"basic parallelepiped"不应该包含除原点外的任何格点,即基础区域与格的交集为0。
如下图
图2(c)中所示的"basic parallelepiped"包含格点 (1,0),而图2(a)和图2(b)中的基本平行不包含任何非零格点。
一个格的任意基础区域都拥有相同的体积(体积不是狭义的三维体积,可以扩展到n维,如二维是面积,三维是体积)。
类似于线性空间里,一个格的行列式代表了对应基向量所组成的几何体体积
定义格的行列式作为基础区域的n维体积
d
e
t
(
L
)
=
∑
i
b
i
⋅
[
0
,
1
)
=
v
o
l
(
P
(
B
)
)
det(\mathcal{L})=\sum_{i}{\mathbf{b}_{i}}\cdot[0,1)=vol(\mathcal{P(\mathbf{B})})
det(L)=i∑bi⋅[0,1)=vol(P(B))
注意
给定任意一组基向量,这个Determinant大小是不变的,也就是无论怎么变换,都能找到这个值,即一个格的任意基础区域体积都相同。它不依赖于计算它的某个具体基础区域,是格的不变量。证明过程如下
格的密度可以理解为,在空间里任意取一个超球体,然后看这个球体里面覆盖了多少格点,点的数量平均于球体体积,这个就是密度
格的行列式与其密度成反比
F
o
r
a
l
l
s
u
f
f
i
c
i
e
n
t
l
y
l
a
r
g
e
S
⊆
R
n
:
∣
S
∩
L
∣
≈
vol
(
S
)
/
det
(
L
)
For\ all\ sufficiently\ large\ S \subseteq \mathbb{R}^{n} :\\ |S \cap \mathcal{L}| \approx \operatorname{vol}(S) / \operatorname{det}(\mathcal{L})
For all sufficiently large S⊆Rn:∣S∩L∣≈vol(S)/det(L)
格的一个基本参数是格中最短非零向量的长度,也就是点与点之间的最短距离,为了方便可以把其中一个点设置为坐标轴的原点。
λ
1
=
min
x
,
y
∈
L
,
x
≠
y
∥
x
−
y
∥
=
min
x
∈
L
,
x
≠
0
∥
x
∥
记为
λ
1
(
L
)
,
\lambda_1(\mathcal{L}),
λ1(L),同理可定义第二近到第
n
n
n近的
λ
2
(
L
)
,
λ
3
(
L
)
,
…
,
λ
n
(
L
)
\lambda_2(\mathcal{L}),\lambda_3(\mathcal{L}),\ldots,\lambda_n(\mathcal{L})
λ2(L),λ3(L),…,λn(L)。
给定一个任意点
t
\mathbf{t}
t(可以不在格上),定义距离函数
μ
(
t
,
L
)
\mu(\mathbf{t},\mathcal{L})
μ(t,L)为这个点到附近的格点的最短距离。
μ
(
t
,
L
)
=
min
x
∈
L
∥
t
−
x
∥
\mu(\mathbf{t},\mathcal{L})=\min _{\mathbf{x} \in \mathcal{L}}\|\mathbf{t}-\mathbf{x}\|
μ(t,L)=x∈Lmin∥t−x∥
可以通过移动
t
\mathbf{t}
t位置得到这个格中最大的
μ
\mu
μ,这个就称为覆盖半径(Covering Radius)
μ
(
L
)
=
max
t
∈
s
p
a
n
(
L
)
μ
(
t
,
L
)
\mu(\mathcal{L})=\max _{\mathbf{t} \in span(\mathcal{L})} \mu(\mathbf{t}, \mathcal{L})
μ(L)=t∈span(L)maxμ(t,L)
注意
μ
\mu
μ是点到格点的最短距离,如果把点换为格点,以每个格点为圆心画圆并逐步扩大,直到这些圆正好完美的覆盖所有空间的时候,这个半径就是最大的
μ
\mu
μ,即覆盖半径了。
假如将上述的圆,改变为叠加圆形范围内取值的随机噪音,而当达到覆盖半径的时候将会出现取值分布很不平均的问题,那么为了解决此问题就需要smooth一下格。
理论上当半径到无限大的时候,得到的分布是很完美的,但是这种构造就没了意义,所以就出现了一个Smoothing的半径最大上限,该上限由格中距离最大的最短向量
λ
n
\lambda_{n}
λn来决定的,大于这个距离之后,必然会覆盖其他的格点。
凸集定理(Convex body theorem)
用于寻找一个格点周围最近的其他格点的。
给出一个Lattice中最短向量的一个上限值。
λ
1
(
L
)
≤
n
r
=
n
⋅
det
(
L
)
1
/
n
\lambda_{1}(\mathcal{L}) \leq \sqrt{n} r=\sqrt{n} \cdot \operatorname{det}(\mathcal{L})^{1 / n}
λ1(L)≤nr=n⋅det(L)1/n
假如把格的Determinant对应空间压缩为一个立方体,那么该立方体的对角线长度就是
n
r
\sqrt{n}r
nr,对角线的另一头必然是下一个格点(但不一定是最近的格点),所以肯定要小于等于这个对角线的长度
第二定理
给出一个对于其他最短向量
λ
i
\lambda_{i}
λi的一个取值上限
λ
1
(
L
)
≤
(
∏
i
λ
i
(
L
)
)
1
/
n
≤
n
⋅
det
(
L
)
1
/
n
\lambda_{1}(\mathcal{L}) \leq\left(\prod_{i} \lambda_{i}(\mathcal{L})\right)^{1 / n} \leq \sqrt{n} \cdot \operatorname{det}(\mathcal{L})^{1 / n}
λ1(L)≤(i∏λi(L))1/n≤n⋅det(L)1/n
第二定理指出全部
n
n
n个最短向量的几何平均数,小于之前的对角线长度,由于任意一个格的Determinant对应空间的Parallelepiped是不规则的,所以用几何平均数能很好约束Parallelepiped边的长度
定义
在格中需找一个最短的非零格点
可以理解为:寻找一组整数与基向量线性组合使得组合后的向量的长度最短。或者,理解为给定一个基的格,找到一个这个基构成的格点,使得这个点距离坐标原点距离最近。
宽松版(
S
V
P
γ
SVP_\gamma
SVPγ):找到
γ
\gamma
γ倍距离就行
判定版(GapSVP)
定义
给定一个格,找到n个线性无关的向量,并且这些向量的长度都要小于定于最长的最短向量。
宽松版(
S
I
V
P
γ
SIVP_\gamma
SIVPγ):找到
γ
\gamma
γ倍距离就行
判定版(GapSIVP)
定义
在离散线性集合中逼近目标向量的问题
给定一个不在格中的目标向量,在各种寻找一个向量使得该向量与目标向量距离最近。
可以理解为:给定一组格基向量,和一个目标向量,很难找到一组整数与基向量线性组合使得组合后的向量距离目标向量最近。或者,理解为给定连续空间中任意一个点,找到距离这个点最近的格点。这个距离一定是小于等于覆盖半径的。
还有一种定义是给定一个格,一个随机点和搜索距离,并且假设覆盖半径小于等于搜索距离,CVP问题就是找到一个合理的格点并且这个点到随机点的距离小于等于搜索距离。
宽松版(
C
V
P
γ
CVP_\gamma
CVPγ):找到
γ
\gamma
γ倍距离就行
判定版(GapCVP)
在上述问题中,都需要输入格的基,来形成一个格,从而找到相应的值。同一个格有很多基,有些基是短的,尽可能垂直的,称为“好”的基。而有些基又是长的,且方向接近于同一方向或相反方向的,称为“坏”的基。比如整数格 Z n \mathbb{Z}^n Zn就是一个“好”的基,在它上面解决CVP问题,只需要通过上下取整即可。
所以,需要将“坏”基转变为“好”基,目标是找到一组非常接近垂直基,这个过程称之为 格基约减,就是为了发现一组又短又垂直的基。
比较常见的算法就是施密特正交化,即输入一组基,通过反复迭代最后输出一组垂直的基,这组基能够张成与输入基相同的空间。由于格的系数都是整数,所以应用于格的时候需要把系数进行四舍五入的取整到最近整数。
施密特方法高度依赖向量的顺序问题,不同的基向量顺序将导致不同的结果,为解决这个问题,诞生了LLL算法,但LLL算法只是一次考虑两个向量,由此又诞生了BKZ算法。