定理: 給decisionalCVP oracle, 可以有效解決searchCVP.
這里格和目標(biāo)向量都在整點(diǎn)上取值, 格的秩為n. int[m][n] B, int[m][1] t.
證明:
首先, 是可以由判定器確定出最近距離是多少的.
對(duì)于任一格B,及目標(biāo)向量t, 設(shè)r=dist(B,t), 下面估計(jì)r的上界.
令R:=|b1|+...+|bn|
t = t1b1+t2b2+...+tnbn
g=floor(t1)b1+...+floor(tn)bn
設(shè)g0是searchCVP的精確解,下用{x}表示數(shù)x-floor(x)
則|g0 - t| <=|g - t|=|{t1}b1+...+{tn}bn|<=|b1|+...+|bn|=R,
所以借助decisionalCVP oralcle, 利用二分法可以確定出optCVP.
最多問(wèn)log(R^2)次, 這對(duì)于input size來(lái)說(shuō)是多項(xiàng)式的.
一個(gè)觀察是稀疏格的最近向量問(wèn)題是容易解決的.
按照最近平面算法(the Nearest algorithm):
findCV_appr(B,t)
t=proj(t,spanB)
B~=GS(B)
b=t
for j=n to 1 do
b=b-round(miu(b,GS(B.col j)))*B.col j
return t-b
或者是寫成遞歸調(diào)用的形式:
findCV_appr(B=[b1,...,bn],t)
if n=0 then return 0
else
B~=GS(B)
s=proj(t,span(b1,...,bn))
//find c s.t. the hyperspace c\*GS(B.col n)+span(b1,...,b n-1)
// as close as possible to s
c=round(miu(b,GS(B.col j)))
return c*bn+findCV_appr(B=[b1,...,b n-1], t-c*bn)
關(guān)于目標(biāo)向量投影的注記
對(duì)于CVP, 目標(biāo)向量t如果不在span(B)里面, 可以將t投影到其上.
設(shè)投影向量為t' , 如果 y 是離 t' 最近的格向量, 那么 y 是離 t 最近的格向量.
Claim: If y=searchCVP(B, t'), x=searchCVP_gamma(B,t')
then y=searchCVP(B,t), x=searchCVP_gamma(B,t)
由searchCVPγ(B,t')返回x, 則有|t'-x|2<=γ2 |t'-y|^2.
因?yàn)閠-t'正交與span(B), 所以有t-t'垂直于t'-x和t'-y, 故而有下式:
|t-y|2=|t-t'|2(常值)+|t'-y|^2(投影里最近距離)
所以y=searchCVP(B,t);
|t-x|2=|t-t'|2+|t'-x|^2
<=|t-t'|2+γ2 |t'-y|^2
<=γ2(|t-t'|2+|t'-y|^2)
=γ2*|t-y|2
所以 x=searchCVP_gamma(B,t).
令 u = findCV_appr(B,t),
則|u-t|<=2^(n/2)dist(t,L(B))
我們的目標(biāo)向量變?yōu)?strong>原目標(biāo)+某個(gè)格向量, 對(duì)這個(gè)新目標(biāo)來(lái)求最近向量的問(wèn)題, 然后再把這個(gè)附加的格向量減掉, 就可以得到真正要求的了. 下面要做的就是稀疏化原來(lái)的格.
k取n+ceil(log r)
Sparser_1(B1,tt)
//其中B1張成了格L(B)的子格
//tt是t+v的形式, v是L(B)中的格向量
B'=(2*B1.col1, B1.col2, ...,B1.col n)
if B'.col1>=2^k*B.col 1 return (B', tt)
ans=isSmaller(L(B'), tt, r)
//query decisional CVP oracle
if ans==true
//t1離更稀疏的B'的距離小于等于r, 此時(shí)dist*(L(B'),tt)>=r
//那么說(shuō)明dist(L(B2),tt)==r
Sparser_1(B',tt) //t2=t1
else //t1離B2的距離大于r, 即稀疏化以后, 離格的最近距離遠(yuǎn)了
tt=tt-B1.col1
Sparser_1(B',tt)
return (B',tt)
1.B'是B1的子格, B1是B的子格, 所以B'是B的子格
2.調(diào)用一次Sparser_1, tt要么不變, 要么變?yōu)閠t-B1.col1, 都是 t+格點(diǎn) 的形式
3.最后返回的(B',tt), 滿足dist(L(B'),tt)==r(本算法的關(guān)鍵)
事實(shí)上, 如果isSmaller == true, 上式成立
如果isSmaller == false, 注意到L(B1)=L(B')U(L(B')+B1.col1),
這說(shuō)明在L(B')+B1.col1里面取格點(diǎn)達(dá)到最近向量,
所以dist(L(B')+B1.col1,tt)==r, 這等價(jià)于
dist(L(B'),tt-B1.col1)==r
Sparser_2(B1,t)
//改動(dòng)部分如下, 其他處理不變
B'=(B1.col1, 2B1.col2, ...,B1.col n)
if B'.col2>=2^kB.col 2 return (B', tt)
于是我們可以給出求解searchCVP的程式
findCV(B,t)
t0=t
for i=1 to n do
(B,t)=Sparse_i(B,t)
g=findCV_appr(B,t)
v=t-t0
return g-v
從Sparser_1到Sparser_n, 共有n*k次迭代步驟
在n*k步以后, 得到(B*,t*)
B*=(2k*b1,...,2k*bn)
t*=t+某格點(diǎn)v
由k=n+ceil(log r), 得2k>=r*2n
λ1(L(B*))>=2k>=r*2n
則在L(B*)里的兩個(gè)向量距離至少為r*2^n.
離t*第一近的格點(diǎn)到t的距離為r, 設(shè)離t第二近的格點(diǎn)到t*的距離為r',
則r+r'>=r*2^n, 所以r'>=r*2n-r>=2(n-1) r>2^(n/2)(n-1)r (n>2)
(n<=2的時(shí)候找最近向量是容易的, 窮舉很快, 因?yàn)榫S數(shù)很低.)
可以得到最近平面算法更優(yōu)的近似因子 γ=2(2/sqrt(3))^n.
所以findCV_appr(B*,t*)給出的最近格向量g-, 滿足
|g--t*|=dist(B*,t*)=r, 所以最后return g-v.
**Theorem: Decisional CVP is NP-complete **
decisional CVP is NP
對(duì)于使 dist(t, L(B))<=r 的實(shí)例 (B,t,r)
令x為格向量, 滿足|x-t|<=r
Claim: x 可以作為decisionalCVP為NP問(wèn)題的一個(gè)證據(jù)
|x-t|<=r可以多項(xiàng)式間驗(yàn)證, 代入算即可
x的每一個(gè)分量xi的絕對(duì)值至多為|t|+r
|xi|<=|x|=|x-t+t|<=|t|+r
Remark:本篇| |均表示算二范數(shù)decisional CVP is NP-hard
a reduction from subset-sum problem
an instance of subset-sum:
given n+1 integers a1,a2,...,an, s
goal: find A, some subset of set {1,2,...,n}
s.t. sum of ai (i ∈A)=s
下面說(shuō)明:
若有一個(gè)子集和問(wèn)題的Yes實(shí)例, 就給出了一個(gè)isSmaller(B,t,sqrt(n))的Yes實(shí)例 ;
若有一個(gè)isSmaller(B,t,sqrt(n))的Yes實(shí)例, 就給出了子集和問(wèn)題的一個(gè)Yes實(shí)例.
而子集和問(wèn)題的decision版本又是NP-hard的, 而上面這段已經(jīng)說(shuō)明了兩個(gè)問(wèn)題可以互相規(guī)約到, 所以它們兩個(gè)的復(fù)雜性是同等級(jí)別的, 又已知子集和問(wèn)題是NP-hard的, 所以第二個(gè)claim成立.
這里的B和t的構(gòu)造如下
B[n+1][n]={
{a1,a2,...,an},
{2, 0, ...,0 },
{0, 2, ...,0 },
...
{0, 0, ...,2 }
}
t[n+1][1]={
{s},
{1},
...
{1}
}
如果(a1,a2,...,an,s)是子集和問(wèn)題的Yes實(shí)例, 則isSmaller(B,t,sqrt(n))是decisionalCVP的Yes實(shí)例;
如果isSmaller(B,t,sqrt(n))是decisionalCVP的Yes實(shí)例, 則(a1,a2,...,an,s)是子集和問(wèn)題的Yes實(shí)例.
上面兩個(gè)方向由B和t的構(gòu)造容易說(shuō)明.
SVP vs CVP
對(duì)于大于等于1的近似因子γ, 找到SVP的γ-近似解的難度<=找到CVP的γ-近似解.
給一個(gè)SVP的實(shí)例, 我們用CVP的procedure, 令目標(biāo)向量為0. 但是這其實(shí)不行, 因?yàn)?向量的CV就是它本身.
remove some points of lattice to make a sublattice
try several sublattices, s.t. one of which is guaranteed to reveal the desired short vector.
a generalization of decisionalCVP: GapCVPγ
It's a promise problem.
(PI_YES, PI_NO)
對(duì)于在PI_YES∪PI_NO里的一個(gè)輸入實(shí)例I, it decides I在PI_YES里還是在PI_NO里, 不像total decision problems, PI_YES∪PI_NO不必包含全部可能性
GapCVPγ:
yes 小于等于r
no >γ*r
當(dāng)γ=1的時(shí)候, 就是確定性的CVP判定問(wèn)題.
類似地可以給出GapSVPγ的定義
**定理(判定版): 給GapCVPγ oracle, 可以有效解決GapSVPγ **
證明: 令GapSVPγ要解決的實(shí)例為(B,r)
構(gòu)造n個(gè)GapCVPγ oracle實(shí)例, 調(diào)用isCloser(格基,目標(biāo)向量,查詢距離)程式
isShorter(B,r)
flag == false
for i=1 to n do
Bi=(B.col1,...,2B.col i, ...,B.coln)
bi=B.col i
//Bi: 第i個(gè)列向量為原來(lái)B.col i的兩倍, 其他的和B的列向量相同
//目標(biāo)向量為bi
//查詢距離為r
if isCloser(Bi, bi, r) == true
flag==true
return flag
return flag
//至少有一個(gè)closer, 返回Yes, 每個(gè)都更遠(yuǎn)的話, 返回no
下面證明, 用上面這個(gè)procedure, 確實(shí)可以回答GapSVPγ的問(wèn)題
- 假設(shè)(B,r)是個(gè)No實(shí)例, 即有任何格向量長(zhǎng)度都比查詢長(zhǎng)度r的γ倍要大,
對(duì)于每一個(gè)v ∈ L(Bi), 有v-bi ∈ L(B)-{0}, 所以|v-bi|>γ*r, 這時(shí)候isCloser(Bi,bi,r)確實(shí)返回No(對(duì)任意i). - 假設(shè)(B,r)是個(gè)Yes實(shí)例, 即有L(B)中的最短向量長(zhǎng)度≤r, 令v是達(dá)到最短長(zhǎng)度的格向量, |v|≤r. v=a1b1+...+anbn, 這里ai是整數(shù). 則這些整系數(shù)里至少有一個(gè)是奇數(shù). 若不然, 全部系數(shù)都是偶數(shù)的話, v/2會(huì)在格里面, 那么找到了一個(gè)長(zhǎng)度更短的格向量, 矛盾.設(shè)ak是奇數(shù), 則bk+v ∈ L(Bk), 所以有bk+v=x ∈ L(Bk), 所以dist(bk,L(Bk))<=|bk-x|=|v|<=r. 所以isCloser(Bk,bk,r)返回了true, 所以isShorter(B,k)會(huì)返回true.
上面說(shuō)明了, 當(dāng)給出Yes實(shí)例的時(shí)候, 確實(shí)會(huì)返回true; 當(dāng)給出No實(shí)例的時(shí)候, 確實(shí)會(huì)返回False, 算法正確性得證.
**定理(搜索版): 給searchCVPγ oracle, 可以有效解決searchSVPγ **
證明: 令searchSVPγ要解決的實(shí)例為B, 秩為n.
構(gòu)造n個(gè)searchCVPγ oracle實(shí)例, 調(diào)用findCV_appr(格基,目標(biāo)向量)程式
findSV_appr(B)
for i=1 to n do
Bi=(B.col1,...,2*B.col i,....,B.col n)
bi=B.col i
//Bi: 第i個(gè)列向量為原來(lái)B.col i的兩倍, 其他的和B的列向量相同
//目標(biāo)向量為bi
xi=findCV_appr(Bi, bi)
k=1
//k keeps index
keep_dist=|x1-b1|
for i=2 to n do
if |xi-bi|<keep_dist
keep_dist=|xi-bi|
k=i
return xk
令v為達(dá)到最短長(zhǎng)度的格向量, 則v的整系數(shù)表達(dá)式中, 至少有一個(gè)為奇數(shù),該系數(shù)設(shè)為ak, 不然, 0.5倍該向量, 得到了一個(gè)更短的格向量, 矛盾. 于是v=L(Bk)的某向量 - bk, 故dist(bk,L(Bk))<=|v|,而這個(gè)距離要大于等于最短格向量的長(zhǎng)度, 所以只能取等號(hào).dist(bk,L(Bk))=|v|, 則|xk-bk|<=γ|v|, 所以可以返回某滿足要求的xk.
**定理(最優(yōu)版): 給optCVPγ oracle, 可以有效解決optSVPγ **
shortest_appr(B)
for i=1 to n do
Bi=(B.col1,...,2*B.col i,....,B.col n)
bi=B.col i
//Bi: 第i個(gè)列向量為原來(lái)B.col i的兩倍, 其他的和B的列向量相同
//目標(biāo)向量為bi
di=closest_appr(Bi, bi)
keep_dist=d1
for i=2 to n do
if di<keep_dist
keep_dist=di
return keep_dist
令v為達(dá)到最短長(zhǎng)度的格向量, 則v的整系數(shù)表達(dá)式中, 至少有一個(gè)為奇數(shù),該系數(shù)設(shè)為ak, 不然, 0.5倍該向量, 得到了一個(gè)更短的格向量, 矛盾. 于是v=L(Bk)的某向量 - bk, 故dist(bk,L(Bk))<=|v|,而這個(gè)距離要大于等于最短格向量的長(zhǎng)度, 所以只能取等號(hào).dist(bk,L(Bk))=|v|, 由于dk是由closest_appr(Bk, bk)返回, dk<=γdist(bk,L(Bk))=γλ1,而也成立dk=dist(0,L(Bk)-bk), 所以返回的滿足optSVPγ的要求.