是平面上的一组点。随机点是在同一平面上给出。任务是要排序的所有通过之间欧氏距离和。
无脑方法是计算之间的距离和所有,然后排序它们使用任何快速算法。
有什么方法可以存储或预处理从而使分类过程变得更快?
是平面上的一组点。随机点是在同一平面上给出。任务是要排序的所有通过之间欧氏距离和。
无脑方法是计算之间的距离和所有,然后排序它们使用任何快速算法。
有什么方法可以存储或预处理从而使分类过程变得更快?
Answers:
解决方案1:找出点对之间的垂直平分线,并构造这些线的排列。该布置具有Θ (n 4)个单元,其排序顺序是恒定的。因此,为该布置构建点位置数据结构,并使用要为该单元中的点返回的排序顺序来装饰每个单元。相邻单元格之间的排序顺序仅在单个换位中有所不同,因此您可以使用持久性数据结构来允许这些排序顺序的表示形式共享空间。总空间为O (n 4),查询时间为O。
解决方案2:从这些相同的垂直平分线中随机选择一个样本,构建其排列,并通过两条采样线的每次交叉按垂直线段划分每个排列单元。所得的分区具有Θ (n 2)个像元,每个像元都有很高的概率被O (n )个非采样平分线所交叉。从单元格中的某些x角度来看,按点的有效排序顺序装饰分区的每个单元格。总空间为O (n 3)。
现在,要进行查询,请在分区中找到查询点,查找与分区单元格一起存储的顺序,并使用Levcopoulos&Petersson(1989)的笛卡尔树比较排序算法从此存储的顺序开始。该步骤的时间与成比例,其中k i是与点y i乱序的点数。但是∑ k i是O (n )(每个未采样的等分线最多导致一对无序点),因此查询时间也是 O (n )。
您可能无法以任何方式切分时间。即使是与所有可能的排序顺序相对应的预计算区域也可以(我相信)产生O (n !)个区域,因此通过任何有意义的搜索技术找到“您的”区域都将使O (log (n !))= O (n log (n ))时间。(编辑:这是绝对错误的;另一方面,请参阅David Eppstein的出色答案!)另一方面,这是一种降低复杂度的有用方法-特别是如果您不需要一次完整排序,而只需要能够随机抽取最近的动态-可能是通过高阶Voronoi图进行的:标准Voronoi单元的扩展不仅适用于最近的邻居,而且适用于第二近邻等。Frank Dehne关于k最近邻搜索的论文,http://people.scs .carleton.ca /〜dehne / publications / 2-02.pdf似乎是规范的参考;他在http://www.dehne.carleton.ca/publications上的主页上还有许多其他有关Voronoi图的论文,这些论文可能有用。