设置:设ei是n维欧氏空间的正交基,但假设ei具有无理(L1)范数。设L是通过将ei与自然数(包括零)中的系数进行线性组合而获得的点集。现在首先按照L1范数对L中的点进行排序,然后按字典顺序排列。
问题:是否有一种有效的算法可以按升序生成L中的点,直到达到某个预定义的界限?请注意,我不想生成点然后对它们进行排序,而是我想按顺序遍历晶格。
观察:如果ei是标准正交基,这很容易做到。例如,此问题已解决here。原则上类似的东西可以在这里工作,但是确定迭代的半径几乎和解决枚举问题一样难,所以它不是很有用。
答案 0 :(得分:0)
这个怎么样:
设L 1和L 2是矢量列表,其中L 1是访问/处理的点阵矢量列表,L 2是接下来将访问的矢量列表。此算法要求e i 按小标准从小到大排序。
该算法每轮最多将n个向量加到L 2。设B是你预定义的上界,那么你将访问最多n个 k -1个向量,其中k = 1 + B / || e 1 ||。第一个ca. n k&#39; 轮,列表的大小为n,其中k&#39; = B / || e n ||。因此总的来说,你必须存储少于N = n k&#39; +(n k -1)/(n k&#39; +1 < / sup>)列表。您可以在O(n)中生成一个新列表,并将其添加到L 2中的O(log N)中(二进制搜索正确的位置并将其插入到那里)。
所以整体复杂性会像O(N⋅n⋅logN),但请注意N是你要找的向量的数量。
注意:很可能有一个更快的算法,但这是你可以尝试的。