答案已更新并从头开始重写。
给你一个多面体。运行多布金-Kirkpatric层次上P.这给你polytops序列P 1 ⊆ P 2 ⊆ ... ⊆ P ķ = P。假设您想找到P上最接近查询点q的点。基本算法从计算P 1上最接近点c 1到q开始,然后考虑与c 1相邻的所有新区域(帐篷),找到最接近点c 2到qPP1⊆P2⊆…⊆Pk=PPqc1qP1c1c2q在这些新区域中,并以这种方式继续进行,直到我们达到为止。Pk
现在,如果在边缘上,那么就没有问题-只有两个帐篷可以接触该边缘,或者只有其中一个可以覆盖边缘。这样,更新Ç 我+ 1从Ç 我在这种情况下需要一定的时间。cici+1Ci
因此问题就出在位于高度顶点上时,因为当移到P i + 1时,与其相邻的新帐篷的数量可能很大。为了克服这个问题,我们将模拟一个大度数的顶点作为具有低度数的顶点的集合。特别地,在每一个阶段,如果Ç 我位于一个顶点v,我们要记住两个连续的缘ë 我,ê ' 我相邻v,使得最近点q在P 我+ 1ciPi+1civei,e′ivqPi+1放在一个毗邻或覆盖这两个边缘之一的帐篷上。这样,我们可以在恒定时间内进行所需的计算。
因此,我们仍然面临如何在爬升时跟踪这两个边缘的问题。
为此,请为P的每个顶点切线方向t v预先计算。令Q i(v )是凸多边形,它是多边形P i的v的顶点图形(定义顶点的平面在t v方向上具有法线)。从概念上讲,Q 1(v ),Q 2(v ),。。。,Q k(v )vPtvQi(v)vPitvQ1(v),Q2(v),...,Qk(v)行为类似于2D DK层次结构。如果上的最近点至q位于上顶点瓦特则这对应于 v和相邻边缘ê在P 我,其中边缘Ë相交于顶点图的平面瓦特。如果最近点Q 我(v )到q谎言在边缘ē ',然后记住你的两个相邻边缘P 我定义的两个顶点é '(这里Qi(v)qwvePiewQi(v)qe′Pie′属于 Q 我(v ))。e′Qi(v)
现在我们完成了……确实,如果也位于Q i + 1(v )上,那么我们可以在恒定时间内对其进行更新(因为这只是2d DK层次结构)。另一方面,如果c i + 1不再位于Q i + 1(v )上,则它必须属于一个相邻或覆盖先前点c i的新帐篷。无论哪种情况,我们都可以在恒定时间内进行更新。ci+1Qi+1(v)ci+1Qi+1(v)ci