引言
最近,基于近邻图的近似最近邻搜索算法(ANNS)取得了最优的效率和精度权衡。在图索引上,路径的单调性对相关ANNS算法的搜索性能起着至关重要的影响。几种当前最优的ANNS算法比如HNSW,NSG普遍能使搜索路径尽可能的单调递减,从而避免由于“绕远路”而降低搜索效率。本文介绍的几种proximity graphs是这些ANNS算法的基础,与当前的实用算法相比,这些proximity graphs有着严格的形式化定义,这给理论分析相关性质带来便利,从而也给实用的ANNS算法提供理论保证和优化方向。接下来,我们主要分析proximity graphs的单调性,proximity graphs包括德劳内图(Delaunay Graph, 它与voronoi diagram对偶)、Relative Neighborhood Graph (RNG)、Gabriel Graph (GG)、Minimum Spanning Trees (MST)。
首先给出结论:Delaunay Graph 是单调的图,而RNG, GG和MST都不是单调的图。
何为图的单调性
在此之前,我们需要先了解一下什么是单调路径?对于图G上的一个m个依次邻接的顶点形成的路径 ( v 1 , v 2 , ⋯ , v m ) (v_{1},v_{2},\cdots, v_{m}) (v1,v2,⋯,vm),若 d i s t ( v 1 , v m ) > d i s t ( v 2 , v m ) > ⋯ > d i s t ( v m − 1 , v m ) dist(v_1,v_m) > dist (v_2, v_m) > \cdots > dist(v_{m-1},v_m) dist(v1,vm)>dist(v2,vm)>⋯>dist(vm−1,vm),则该路径是一条单调路径, d i s t ( , ) dist(,) dist(,)表示两个顶点之间的距离。如果一个图G的任意两个顶点之间均存在单调路径,则图G便是单调图了。
如何证明一个图不是单调的
只需要举一个反例就行了。任意画几个点,分别根据RNG, GG和MST的定义建立相应的图结构,很容易找到不存在单调路径的例子。
证明DG是单调的
下面证明DG是单调的。在此之前先给出一个定理。
定理1. 对于DG中的任意两个顶点 v a v_a va和 v j v_j vj,存在一个德劳内边 e a k e_{ak} eak满足 d ( v k , v j ) < d ( v a , v j ) d(v_k, v_j) < d(v_a, v_j) d(vk,vj)<d(va,vj)。
证明:给定在数据集S上的DG。 v a v_a va可能在DG的边界(如图1(a))或在DG的内部(如图1(b))两种情况。但无论哪一种情况, v a v_a va对应的Voronoi diagram(图1中虚线围成的绿色多边形区域,记为 V ( v a ) V(v_a) V(va))都不包含其它点(这是由定义保证的),所以 v j v_j vj一定落在 V ( v a ) V(v_a) V(va)外面。因此,连接 v a v_a va和 v j v_j vj的线段一定经过 V ( v a ) V(v_a) V(va)的至少一条边。记这条边为 e a k e_{ak} eak的垂直平分线 h a k h_{ak} hak, v j v_j vj和 v k v_k vk在 h a k h_{ak} hak的同一侧,故 d ( v k , v j ) < d ( v a , v j ) d(v_k, v_j) < d(v_a, v_j) d(vk,vj)<d(va,vj)。
![](https://img-blog.csdnimg.cn/20210116121515966.png)
下面证明DG是单调的。
证明:我们只需证明DG中的任意两个点 v a v_a va和 v j v_j vj,总存在一条由 v a v_a va至 v j v_j vj的单调路径。若 v j v_j vj是 v a v_a va的邻居,则单调路径是显然的。接下来,我们考虑 v a v_a va与 v j v_j vj不邻接的情况。根据定理1,存在一条边 e a k 1 e_{ak_1} eak1,满足 d ( v k 1 , v j ) < d ( v a , v j ) d(v_{k_1},v_j) < d(v_a,v_j) d(vk1,vj)<d(va,vj),存在边 e k 1 k 2 e_{k_{1}k_2} ek1k2,满足 d ( v k 2 , v j ) < d ( v k 1 , v j ) d(v_{k_2}, v_j) < d(v_{k_1},v_j) d(vk2,vj)<d(vk1,vj) … …,最终,存在边 e k i j e_{k_ij} ekij,满足 d ( v j , v j ) < d ( v k i ) , v j ) d(v_j, v_j) < d(v_{k_i)},v_j) d(vj,vj)<d(vki),vj)。从而路径 ( v a , v k 1 , ⋯ , v k i , v j ) (v_a, v_{k_1}, \cdots,v_{k_i},v_{j}) (va,vk1,⋯,vki,vj)满足 d ( v a , v j ) > d ( v k 1 , v j ) > d ( v k 2 , v j ) > ⋯ > d ( v k i , v j ) > d ( v j , v j ) d(v_a, v_j) > d(v_{k_1}, v_j) > d(v_{k_2},v_j) > \cdots > d(v_{k_i},v_j) > d(v_j, v_j) d(va,vj)>d(vk1,vj)>d(vk2,vj)>⋯>d(vki,vj)>d(vj,vj),即是一条单调路径。
RNG几乎是单调的
虽然不能确保RNG是单调的,但在大部分情况下RNG是单调的,而且RNG是几乎所有单调图的子图。
![](https://img-blog.csdnimg.cn/20210116121515872.png)
如图2所示,边 e i j ∈ e_{ij} \in eij∈ RNG,则 l u n e ( i , j ) lune(i,j) lune(i,j)(红色圆弧包围的部分)是空的,即里面没有其它点(RNG的定义决定的)。因此,一条从 v i v_i vi至 v j v_j vj且不包含 e i j e_{ij} eij的单调路径的中间点必然落在红色圆弧上,即图3所示的 v k 1 v_{k_1} vk1。
![](https://img-blog.csdnimg.cn/20210116121515885.png)
在图3中, ( v i , v k 1 , v j ) (v_i, v_{{k_1}},v_j) (vi,vk1,vj)是单调路径,此时, e i j e_{ij} eij就是冗余边,因为可通过其它单调路径由 v i v_i vi到 v j v_j vj。因此,就RNG而言,若存在冗余边,则可替代单调路径的中间点必须落在图2的红色圆弧上,发生这种情况的概率是非常小的。
参考文献
Kurup, G. D. (1992). A database organized on the basis of similarities with applications in computer vision.
博客地址:mzwang.top