CVP及SVP问题基本的复杂性结果

定理: 给decisionalCVP oracle, 可以有效解决searchCVP.
这里格和目标向量都在整点上取值, 格的秩为n. int[m][n] B, int[m][1] t.
证明:
首先, 是可以由判定器确定出最近距离是多少的.
对于任一格B,及目标向量t, 设r=dist(B,t), 下面估计r的上界.
令R:=|b1|+...+|bn|
t = t1b1+t2b2+...+tnbn
g=floor(t1)b1+...+floor(tn)bn
设g0是searchCVP的精确解,下用{x}表示数x-floor(x)
则|g0 - t| <=|g - t|=|{t1}b1+...+{tn}bn|<=|b1|+...+|bn|=R,
所以借助decisionalCVP oralcle, 利用二分法可以确定出optCVP.
最多问log(R^2)次, 这对于input size来说是多项式的.

一个观察是稀疏格的最近向量问题是容易解决的.
按照最近平面算法(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

或者是写成递归调用的形式:

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)

关于目标向量投影的注记
对于CVP, 目标向量t如果不在span(B)里面, 可以将t投影到其上.
设投影向量为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.
因为t-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))

我们的目标向量变为原目标+某个格向量, 对这个新目标来求最近向量的问题, 然后再把这个附加的格向量减掉, 就可以得到真正要求的了. 下面要做的就是稀疏化原来的格.

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, 此时dist*(L(B'),tt)>=r
//那么说明dist(L(B2),tt)==r
  Sparser_1(B',tt) //t2=t1
else //t1离B2的距离大于r, 即稀疏化以后, 离格的最近距离远了
  tt=tt-B1.col1
  Sparser_1(B',tt)
return (B',tt)

1.B'是B1的子格, B1是B的子格, 所以B'是B的子格
2.调用一次Sparser_1, tt要么不变, 要么变为tt-B1.col1, 都是 t+格点 的形式
3.最后返回的(B',tt), 满足dist(L(B'),tt)==r(本算法的关键)
事实上, 如果isSmaller == true, 上式成立
如果isSmaller == false, 注意到L(B1)=L(B')U(L(B')+B1.col1),
这说明在L(B')+B1.col1里面取格点达到最近向量,
所以dist(L(B')+B1.col1,tt)==r, 这等价于
dist(L(B'),tt-B1.col1)==r

Sparser_2(B1,t)
//改动部分如下, 其他处理不变
B'=(B1.col1, 2B1.col2, ...,B1.col n)
if B'.col2>=2^k
B.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+某格点v
由k=n+ceil(log r), 得2k>=r*2n
λ1(L(B*))>=2k>=r*2n
则在L(B*)里的两个向量距离至少为r*2^n.
离t*第一近的格点到t的距离为r, 设离t第二近的格点到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的时候找最近向量是容易的, 穷举很快, 因为维数很低.)
可以得到最近平面算法更优的近似因子 γ=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
    对于使 dist(t, L(B))<=r 的实例 (B,t,r)
    令x为格向量, 满足|x-t|<=r
    Claim: x 可以作为decisionalCVP为NP问题的一个证据
    |x-t|<=r可以多项式间验证, 代入算即可
    x的每一个分量xi的绝对值至多为|t|+r
    |xi|<=|x|=|x-t+t|<=|t|+r
    Remark:本篇| |均表示算二范数

  • 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
    下面说明:
    若有一个子集和问题的Yes实例, 就给出了一个isSmaller(B,t,sqrt(n))的Yes实例 ;
    若有一个isSmaller(B,t,sqrt(n))的Yes实例, 就给出了子集和问题的一个Yes实例.
    而子集和问题的decision版本又是NP-hard的, 而上面这段已经说明了两个问题可以互相规约到, 所以它们两个的复杂性是同等级别的, 又已知子集和问题是NP-hard的, 所以第二个claim成立.
    这里的B和t的构造如下
    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)是子集和问题的Yes实例, 则isSmaller(B,t,sqrt(n))是decisionalCVP的Yes实例;
如果isSmaller(B,t,sqrt(n))是decisionalCVP的Yes实例, 则(a1,a2,...,an,s)是子集和问题的Yes实例.
上面两个方向由B和t的构造容易说明.

SVP vs CVP

对于大于等于1的近似因子γ, 找到SVP的γ-近似解的难度<=找到CVP的γ-近似解.
给一个SVP的实例, 我们用CVP的procedure, 令目标向量为0. 但是这其实不行, 因为0向量的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)
对于在PI_YES∪PI_NO里的一个输入实例I, it decides I在PI_YES里还是在PI_NO里, 不像total decision problems, PI_YES∪PI_NO不必包含全部可能性

GapCVPγ:
yes 小于等于r
no >γ*r

当γ=1的时候, 就是确定性的CVP判定问题.
类似地可以给出GapSVPγ的定义

**定理(判定版): 给GapCVPγ oracle, 可以有效解决GapSVPγ **
证明: 令GapSVPγ要解决的实例为(B,r)
构造n个GapCVPγ oracle实例, 调用isCloser(格基,目标向量,查询距离)程式

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个列向量为原来B.col i的两倍, 其他的和B的列向量相同
  //目标向量为bi
  //查询距离为r
  if isCloser(Bi, bi, r) == true
      flag==true
      return flag
  return flag
     //至少有一个closer, 返回Yes, 每个都更远的话, 返回no

下面证明, 用上面这个procedure, 确实可以回答GapSVPγ的问题

  • 假设(B,r)是个No实例, 即有任何格向量长度都比查询长度r的γ倍要大,
    对于每一个v ∈ L(Bi), 有v-bi ∈ L(B)-{0}, 所以|v-bi|>γ*r, 这时候isCloser(Bi,bi,r)确实返回No(对任意i).
  • 假设(B,r)是个Yes实例, 即有L(B)中的最短向量长度≤r, 令v是达到最短长度的格向量, |v|≤r. v=a1b1+...+anbn, 这里ai是整数. 则这些整系数里至少有一个是奇数. 若不然, 全部系数都是偶数的话, v/2会在格里面, 那么找到了一个长度更短的格向量, 矛盾.设ak是奇数, 则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)会返回true.
    上面说明了, 当给出Yes实例的时候, 确实会返回true; 当给出No实例的时候, 确实会返回False, 算法正确性得证.

**定理(搜索版): 给searchCVPγ oracle, 可以有效解决searchSVPγ **
证明: 令searchSVPγ要解决的实例为B, 秩为n.
构造n个searchCVPγ oracle实例, 调用findCV_appr(格基,目标向量)程式

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个列向量为原来B.col i的两倍, 其他的和B的列向量相同
  //目标向量为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为达到最短长度的格向量, 则v的整系数表达式中, 至少有一个为奇数,该系数设为ak, 不然, 0.5倍该向量, 得到了一个更短的格向量, 矛盾. 于是v=L(Bk)的某向量 - bk, 故dist(bk,L(Bk))<=|v|,而这个距离要大于等于最短格向量的长度, 所以只能取等号.dist(bk,L(Bk))=|v|, 则|xk-bk|<=γ|v|, 所以可以返回某满足要求的xk.

**定理(最优版): 给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个列向量为原来B.col i的两倍, 其他的和B的列向量相同
    //目标向量为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为达到最短长度的格向量, 则v的整系数表达式中, 至少有一个为奇数,该系数设为ak, 不然, 0.5倍该向量, 得到了一个更短的格向量, 矛盾. 于是v=L(Bk)的某向量 - bk, 故dist(bk,L(Bk))<=|v|,而这个距离要大于等于最短格向量的长度, 所以只能取等号.dist(bk,L(Bk))=|v|, 由于dk是由closest_appr(Bk, bk)返回, dk<=γdist(bk,L(Bk))=γλ1,而也成立dk=dist(0,L(Bk)-bk), 所以返回的满足optSVPγ的要求.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容