正交枚举

通过选择 proper k
set y1=y2=...yn-k=0 with high prob
计数在xn-k+1, ..., xn上进行
对于最短向量坐标的后k个整数值
以及其对应的正交整数表示
我们可以唯一确定出最短向量的前n-k格坐标, 在y1=y2=...yn-k=0的条件下

instead 搜索xi可能在的区间
我们将搜索范围decrease by nodes
对xi的搜索在以下两种类型的节点中进行

  • 零点: 使得||xi*bi*||最小的节点(在算xi相关的之前, xi+1,...,xn都已经定下了, 这里是为了确定xi)
  • 平衡点: 使得||xi*bi*||最接近平均值的节点
    ||xi*bi*||和平均值的距离有上界为0.5
    set tolerance bound为0.4
    如果一个平衡点不能让||xi*bi*||足够靠近平均值
    我们extend这个平衡点为使得||xi*bi*||离平均值第二近的节点

零点有1个
平衡点有 4个

xi*的值得xn,xn-1,...,xi都确定好才能定出来
bi*有bi,bi-1,...,b1以及正交系数就能算好
平均值是关于最短向量长度上界, bi*,维数n的值

大概看一下这个过程:
yn=xn=round(xn*)
yn-1=xn-1+round(u(n,n-1)xn)=round(xn-1*) //利用了上一步选的xn值和已知的u(n,n-1), 再确定xn-1就好
yn-2=xn-2+round(u(n-1,n-2)xn-1+u(n,n-2)xn)//利用了之前选的xn,xn-1的值和已知的正交系数, 再确定xn-2就好
...
y2=x2+round(u(3,2)x3+...u(n,2)xn)//利用了之前定的xn,...,x3, 再确定x2就好
y1=x1+round(u(2,1)x2+...+u(n,1)xn)//利用之前定的xn,...,x2, 再确定x1就好

Input: BKZ-reduced basis B; upper bound for the shortest vector^2:R, k
设v在正交规范基下的坐标为(w1,....,wn),
则各wi的值应该是差不多大的
Output:short vector v, ||v||^2<=R
设最短向量在
1.GSO
2.sv[n]=0, slen=0
3.un[n][n]=0
ylen[n]=0
uvec[n]=0
4.d=(d1,...,dn) average value
5.poss_v[n][5]=0 5个列向量
poss_v_cnt[n]=0
poss_v_next[n]=0
6.for xn=ceil(dn), floor(dn), 0 //前两个是使||x*nb*n||离平均值dn最近的xn, 这时候xn=xn*,
uvec[n]=xn
un[n][i]=xn*u(n,i) ,i=1,2,...,n-1
ylen[n]=xn2||bn*||2

  1. for t=n-1,...,1 do //t是当前指标
    if poss_v_cnt[t]=0 //CPV函数还没有调用
    poss_v_cnt[t],poss_v_cnt[t]=CPV(t, k, dt,un[t+1][t])
    //传入当前指标t, k, 第k个平均值, 整系数*正交系数
    poss_v_next[t]=1
    else
    poss_v_next[t]++

你可能感兴趣的:(正交枚举)