0
$\begingroup$

Let M be the generator matrix of a $N\times N$ lattice, and $\tilde{N}$ the set of Voronoi relevant vectors. The Voronoi cell for the origin can be written as $\text{Vor}_{\bf 0}(M)=\left\{{\bf x}: |{\bf x}|\leq|{\bf x-c}|\text{ for } \forall {\bf c}\in \tilde{N}\right\}$. My question is given $\tilde{N}$, how to find the closest lattice vector for a given point ${\bf x}\in R^N$? Equivalently, given $\tilde{N}$, how to translate the given point ${\bf x}$ back to $\text{Vor}_{\bf 0}$?

If $\tilde{N}$ is not given, the closest point can be found with the algorithm introduced here, and the same algorithm can be modified to find $\tilde{N}$. The motivation for my question is that I would like to find the closest points for a large number of ${\bf x}$'s, for the same lattice. Running the closest point search algorithm is very expensive, hence I am hoping to use relevant vectors to find the closest points.

This is my attempt to translate a given point ${\bf x}$ back to $\text{Vor}_{\bf 0}$ given the relevant vectors $\tilde{N}$

for c in $\tilde{N}$
    overlap = x^T * c/norm(c)^2 
    if abs(overlap) > 1/2
        x = x - round(overlap) * c
    end
end

which seems working for 2D lattices, but not for 3D lattices. Hence I am not sure if the algorithm is correct, or if it is possible to do that for general lattices.

$\endgroup$

1 Answer 1

0
$\begingroup$

I believe state of the art for this is Short Paths on the Voronoi Graph and Closest Vector Problem with Preprocessing by Bonifas and Dadush. For instance, see the following quote from the abstract

Our main technical contribution is a randomized procedure that given the Voronoi relevant vectors of a lattice - the lattice vectors inducing facets of the Voronoi cell - as preprocessing and any "close enough" lattice point to the target, computes a path to a closest lattice vector of expected polynomial size. This improves on the $\tilde{O}(4^n)$ path length given by the MV algorithm. Furthermore, as in MV, each edge of the path can be computed using a single iteration over the Voronoi relevant vectors.

This is to say that Bonifas+Dadush should imply a (randomized) algorithm of complexity $O(\mathsf{poly}(N)|\tilde{N}|)$ (as a side note, using $N$ for a dimension and $\tilde{N}$ for a set is perhaps not the best choice of notation). Note that this may not mean efficient, as $|\tilde{N}|$ can grow exponentially in $N$. But, if you have a lattice for which you know that $|\tilde{N}|$ is small, it should efficiently solve your problem.

Note that one can often solve CVP efficiently even in lattices that have exponentially many Voronoi relevant vectors. This is true if they have small extension complexity, see Lifts for Voronoi Cells of Lattices by Schymura, Seidel, and Weltge.

It's also worth mentioning that there have been improvements for finding $\tilde{N}$. In particular, see A Deterministic Single Exponential Time Algorithm for Most Lattice Problems by Micciancio+Voulgaris.

$\endgroup$
6
  • $\begingroup$ This is so useful, many thanks! Let me make sure I understand it correctly. For my problem, namely, finding the closest points for like 10^6 random given points for a given lattice, there are the following three approaches 1. Using the closest point search algorithm for all the points as in this 2002 paper 2. Using the MV algorithm with the relevant vectors as the additional input 3. Using the Bonifas+Dadush randomized algorithm The needed runtime is lowered as in this order. Is that right? $\endgroup$
    – fagd
    Commented Aug 15, 2022 at 0:40
  • $\begingroup$ I probably won't need the state-of-the-art randomized algorithm for now. If MV is better than naively running the closest point search 10^6 times, then it will be awesome! $\endgroup$
    – fagd
    Commented Aug 15, 2022 at 0:44
  • $\begingroup$ Yes, that is my impression, though there are likely more efficient things you can do when you have to compute CVP for many points at once (though I don't know if anyone has written about it). $\endgroup$ Commented Aug 15, 2022 at 0:45
  • $\begingroup$ Another question/clarification regarding the time complexity. The time complexity for the above three approaches are respectively 10^6 * n^(n/2), 10^6 * 4^n and 10^6 * 2^n, right? I include the 10^6 factor to make sure I get it right, and let us assume no other tricks or parallelism involved here. $\endgroup$
    – fagd
    Commented Aug 15, 2022 at 0:55
  • $\begingroup$ It depends on how large $|\tilde{N}|$ is. In particular, the Bonifas + Dadush result should have complexity roughly $10^6|\tilde{N}|\mathsf{poly}(N)$, i.e. (for certain $\tilde{N}$) not even exponential in $N$. $\endgroup$ Commented Aug 15, 2022 at 1:13

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .