引言

最近,基于近邻图的近似最近邻搜索算法(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个依次邻接的顶点形成的路径(v1,v2,⋯,vm)(v_{1},v_{2},\cdots, v_{m})(v1​,v2​,⋯,vm​),若dist(v1,vm)>dist(v2,vm)>⋯>dist(vm−1,vm)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​),则该路径是一条单调路径,dist(,)dist(,)dist(,)表示两个顶点之间的距离。如果一个图G的任意两个顶点之间均存在单调路径,则图G便是单调图了。

如何证明一个图不是单调的

只需要举一个反例就行了。任意画几个点,分别根据RNG, GG和MST的定义建立相应的图结构,很容易找到不存在单调路径的例子。

证明DG是单调的

下面证明DG是单调的。在此之前先给出一个定理。

定理1. 对于DG中的任意两个顶点vav_ava​和vjv_jvj​,存在一个德劳内边eake_{ak}eak​满足d(vk,vj)<d(va,vj)d(v_k, v_j) < d(v_a, v_j)d(vk​,vj​)<d(va​,vj​)。

证明:给定在数据集S上的DG。vav_ava​可能在DG的边界(如图1(a))或在DG的内部(如图1(b))两种情况。但无论哪一种情况,vav_ava​对应的Voronoi diagram(图1中虚线围成的绿色多边形区域,记为V(va)V(v_a)V(va​))都不包含其它点(这是由定义保证的),所以vjv_jvj​一定落在V(va)V(v_a)V(va​)外面。因此,连接vav_ava​和vjv_jvj​的线段一定经过V(va)V(v_a)V(va​)的至少一条边。记这条边为eake_{ak}eak​的垂直平分线hakh_{ak}hak​,vjv_jvj​和vkv_kvk​在hakh_{ak}hak​的同一侧,故d(vk,vj)<d(va,vj)d(v_k, v_j) < d(v_a, v_j)d(vk​,vj​)<d(va​,vj​)。

图1 (a)$v_a$位于边界,(b)$v_a$位于内部

下面证明DG是单调的。

证明:我们只需证明DG中的任意两个点vav_ava​和vjv_jvj​,总存在一条由vav_ava​至vjv_jvj​的单调路径。若vjv_jvj​是vav_ava​的邻居,则单调路径是显然的。接下来,我们考虑vav_ava​与vjv_jvj​不邻接的情况。根据定理1,存在一条边eak1e_{ak_1}eak1​​,满足d(vk1,vj)<d(va,vj)d(v_{k_1},v_j) < d(v_a,v_j)d(vk1​​,vj​)<d(va​,vj​),存在边ek1k2e_{k_{1}k_2}ek1​k2​​,满足d(vk2,vj)<d(vk1,vj)d(v_{k_2}, v_j) < d(v_{k_1},v_j)d(vk2​​,vj​)<d(vk1​​,vj​) … …,最终,存在边ekije_{k_ij}eki​j​,满足d(vj,vj)<d(vki),vj)d(v_j, v_j) < d(v_{k_i)},v_j)d(vj​,vj​)<d(vki​)​,vj​)。从而路径(va,vk1,⋯,vki,vj)(v_a, v_{k_1}, \cdots,v_{k_i},v_{j})(va​,vk1​​,⋯,vki​​,vj​)满足d(va,vj)>d(vk1,vj)>d(vk2,vj)>⋯>d(vki,vj)>d(vj,vj)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是几乎所有单调图的子图。

图2 边$e_{ik}$不属于RNG

如图2所示,边eij∈e_{ij} \ineij​∈ RNG,则lune(i,j)lune(i,j)lune(i,j)(红色圆弧包围的部分)是空的,即里面没有其它点(RNG的定义决定的)。因此,一条从viv_ivi​至vjv_jvj​且不包含eije_{ij}eij​的单调路径的中间点必然落在红色圆弧上,即图3所示的vk1v_{k_1}vk1​​。

图3 边$e_{ij}$是冗余边

在图3中,(vi,vk1,vj)(v_i, v_{{k_1}},v_j)(vi​,vk1​​,vj​)是单调路径,此时,eije_{ij}eij​就是冗余边,因为可通过其它单调路径由viv_ivi​到vjv_jvj​。因此,就RNG而言,若存在冗余边,则可替代单调路径的中间点必须落在图2的红色圆弧上,发生这种情况的概率是非常小的。

参考文献

Kurup, G. D. (1992). A database organized on the basis of similarities with applications in computer vision.

博客地址:mzwang.top

几种 Proximity Graphs 的单调性分析相关推荐

  1. php遍历数组哪个效率高,PHP遍历数组的三种方法及效率对比分析

    PHP遍历数组的三种方法及效率对比分析 发布于 2015-03-04 21:55:27 | 129 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext ...

  2. Gps高程拟合matlab代码,几种GPS高程拟合方法分析与比较.doc

    几种GPS高程拟合方法分析与比较 几种GPS高程拟合方法分析与比较 摘 要:文章论述了几种常用的GPS高程拟合的方法,并在MATLAB中编制了相应的程序,建立了相应的GPS高程拟合模型,并通过实例数据 ...

  3. Spring 获取 request 的几种方法及其线程安全性分析

    转载自  Spring 获取 request 的几种方法及其线程安全性分析 本文将介绍在Spring MVC开发的Web系统中,获取request对象的几种方法,并讨论其线程安全性. 一.概述 在使用 ...

  4. HashMap 的 7 种遍历方式与性能分析!「修正篇」

    这是我的第 57 篇原创文章 首先,给大家说声抱歉~ 事情经过是这样子的,五一节前我发布了一篇文章<HashMap 的 7 种遍历方式与性能分析!>,但是好心的网友却发现了一个问题,他说 ...

  5. App工程结构搭建:几种常见Android代码架构分析

    原文:http://mobile.51cto.com/abased-386212.htm 关于Android架构,因为手机的限制,目前我觉得也确实没什么大谈特谈的,但是从开发的角度,看到整齐的代码,优 ...

  6. diy 扫地机器人 滚刷_无滚刷PK有滚刷:关于保洁机器人两种常见清扫结构的分析...

    目前市面上销售的保洁机器人从底部清扫结构上来看,主要分为两种结构类型:一类是以iRobot Roomba为代表的有滚刷三段式清扫结构,另一类则是以V-BOT为代表无滚刷双重清扫结构,今天爸爸乐轻松网主 ...

  7. 8种 骨干级 架构设计模式 图示 分析 优缺点 总结

    8种 骨干级 架构模式 图示 分析 总结 文章目录 8种 骨干级 架构模式 图示 分析 总结 单库单应用模式 内容分发模式 查询分离模式 微服务模式 多级缓存模式 分‍‍‍库分表模式 弹性伸缩模式 多 ...

  8. 8种常用排序算法稳定性分析

    选择排序.快速排序.希尔排序.堆排序不是稳定的排序算法 冒泡排序.插入排序.归并排序和基数排序都是稳定的排序算法. [1]为什么要区分排序算法的稳定性? 排序算法的稳定性通俗地讲就是能保证排序前两个相 ...

  9. 「独立站必备工具」25种检测竞争对手网站的分析工具

    常话说:从竞争对手中能学习到更多!竞争对手才是最好的老师! 许多企业对竞争有不健康的看法.他们认为这是对他们长期的威胁.当然,竞争可能会很可怕.在大多数情况下,竞争是一件好事.当您配备了合适的竞争对手 ...

  10. 计算机网络体系结构分为几种,几种计算机网络体系结构的对比分析

    几种计算机网络体系结构的对比分析 几种计算机网络体系结构的对比分析 摘要:在这篇文章中,将要简要的介绍三种不同的计算机体系结构: OSI 体系结构.TCP/IP体系结构以及综合在这两个基础上的五层体 ...

最新文章

  1. css cursor 常用值
  2. 怎么在mac下运行映像dmg_仅用Mac OS X系统映像文件(dmg)安装系统
  3. 有了这套模板,女朋友再也不用担心我刷不动 LeetCode 了
  4. go build不从本地gopath获取_跟我一起学习go语言,包依赖管理工具go mod
  5. @ta,一起过节吧!
  6. 测试人必会:Python带你上手WebSocket
  7. Feign 重试解析
  8. MyBatis解析<if>动态sql时,Integer类型值为0,返回false
  9. 倒车雷达C语言程序,基于单片机汽车倒车雷达系统设计(含程序).doc
  10. (20190401)IGS GNSS数据下载网址与下载说明
  11. 我的Java秋招面经大合集
  12. 高等数学---用python求极限
  13. vtuber面部捕捉工具_做一名VTuber 虚拟UP主需要准备哪些?
  14. angularjs防抖
  15. 微信小助手WeChatExtension中文版安装教程
  16. win10 系统禁用笔记本自带键盘的有效方法
  17. Win10报错 Windows 找不到文件 “(null)“请确定文件名是否正确后,再试一次。
  18. 选择傲慢和残忍,会让你更加孤独
  19. 10种预防癌症的“超级”食品
  20. 【历史上的今天】1 月 20 日:Scala 问世;苹果低谷期的开始;专家系统之父诞生

热门文章

  1. Android学习笔记七之ContentProvider
  2. unreal-教程-第十八章:UI跟随的基本原理(c++)
  3. matlab制作钟表,利用Matlab制作钟表实例教程
  4. latex 中下括号 underbrace 如何对齐
  5. 客户关系管理系统(CRM)的开发过程中使用到的开发工具总结
  6. 基于Python实现自然间断点批量处理
  7. 蓝桥杯C语言算法提高:复数归一化
  8. artdialog ajax新增,artDialog 对话框组件使用简介
  9. 网络安全涉及到的知识积累(1)
  10. 公司女同事深夜11点让我去她住处修电脑,原来是C盘爆红,看我一招搞定女同事....的电脑