Sorting 有序格点枚举

Sorting 有序格点枚举,sorting,enumeration,mathematical-lattices,Sorting,Enumeration,Mathematical Lattices,设置:设ei为n维欧氏空间的正交基,但假设ei具有无理L1范数。设L是通过采用自然数中系数为零的ei的线性组合获得的点集。现在先按L1范数对L中的点进行排序,然后按字典顺序排列 问题:有没有一种有效的算法可以将L中的点按递增顺序生成到某个预定义的界限?请注意,我不希望生成点然后对它们进行排序,而是希望按顺序遍历晶格 观察:如果ei是正交基础,这很容易做到。比如,这个问题就解决了。原则上,类似的方法也可以在这里使用,但是确定要迭代的半径几乎和解决枚举问题一样困难,所以它不是很有用 这个怎么样: 让

设置:设ei为n维欧氏空间的正交基,但假设ei具有无理L1范数。设L是通过采用自然数中系数为零的ei的线性组合获得的点集。现在先按L1范数对L中的点进行排序,然后按字典顺序排列

问题:有没有一种有效的算法可以将L中的点按递增顺序生成到某个预定义的界限?请注意,我不希望生成点然后对它们进行排序,而是希望按顺序遍历晶格

观察:如果ei是正交基础,这很容易做到。比如,这个问题就解决了。原则上,类似的方法也可以在这里使用,但是确定要迭代的半径几乎和解决枚举问题一样困难,所以它不是很有用

这个怎么样:

让我₁ 还有我₂ 是向量列表,其中₁ 是访问/处理的晶格向量列表,L₂ 是下一步将访问的向量列表

集合L₁={}和L₂ = {[0]},其中0是零向量。 设v为L中第一个列表的最小向量₂. 访问/处理向量v。 添加列表L={v+e₁,...,v+en}到L₂, 使列表按其最小元素排序。只生成v+ei,只要其标准值小于预定义的界限。 在L的末尾插入v₁ 并将其从第一个列表L的前面删除₂. 如果第一个列表现在为空,请将其从L中删除₂. 如果没有,请将其移动到正确的位置。 如果我₂ 不是空的,转到2。 该算法要求ei按照其范数从小到大进行排序

此算法最多向L添加n个向量₂ 每轮。设B为预定义的上界,则最多有要访问的nk-1向量,其中k=1+B/| e₁||. 第一轮约为nk,列表大小为n,其中k'=B/| | en | |。因此,总的来说,您必须存储少于N=nk'+nk-1/nk'+1个列表。您可以在中生成一个新列表,并将其添加到L中₂ 在Olog N二进制文件中,搜索正确的位置,并将其链接插入其中

因此,总体复杂性将类似于⋅N⋅log N,但请注意,N是关于要查找的向量数

注意:很可能有一个更快的算法,但这是你可以尝试的