首页 > 编程语言 >文献分享: DiskANN查询算法的复杂度下界

文献分享: DiskANN查询算法的复杂度下界

时间:2024-08-16 19:52:17浏览次数:13  
标签:log DiskANN 0.1 text 复杂度 下界 alpha ANN

文章目录


原文章

0. 写在前面

0.1. 预备知识

1️⃣最邻近搜索:给定数据库 U U U中的 n n n个对象(子集),以及输入的查询点 q q q

image-20240809200459993
  1. 精确定义( NN \text{NN} NN):返回 e ∗ ∈ S e^*\in{S} e∗∈S满足 dist ( q , e ∗ ) = min ⁡ e ∈ S dist ( q , e ) \text{dist}(q, e^*) = \min\limits_{e \in S} \text{dist}(q, e) dist(q,e∗)=e∈Smin​dist(q,e)
  2. 近似定义( c-ANN \text{c-ANN} c-ANN):返回 e ∈ S e\in{S} e∈S满足 dist ( q , e ) ≤ c ∗ dist ( q , e ∗ ) \text{dist}(q, e)\leq{}c*\text{dist}(q, e^*) dist(q,e)≤c∗dist(q,e∗)

2️⃣倍增维度

  1. 直径:点集中距离最远的两点的距离,即 diam ( X ) = sup ⁡ e 1 , e 2 ∈ X dist ( e 1 , e 2 ) \text{diam}(X)=\displaystyle\sup_{e_1, e_2 \in X} \text{dist}\left(e_1, e_2\right) diam(X)=e1​,e2​∈Xsup​dist(e1​,e2​)
  2. 2 λ - 2^{\lambda}\text{-} 2λ-分割: X X X可被分为 m m m个子集 X 1 X 2 . . . X m X_1X_2...X_m X1​X2​...Xm​,且满足 { m ≤ 2 λ diam ( X i ) ≤ 1 2 diam ( X ) \begin{cases}m\leq{}2^{\lambda}\\\\\text{diam}(X_i)\leq{}\cfrac{1}{2}\text{diam}(X)\end{cases} ⎩ ⎧​m≤2λdiam(Xi​)≤21​diam(X)​
  3. 倍增维度:就是 λ m i n \lambda_{min} λmin​,即用最少 2 λ m i n 2^{\lambda_{min}} 2λmin​个半径不超过 1 2 r X \cfrac{1}{2}r_{_X} 21​rX​​的球体填满 X X X

3️⃣球体的一个性质:任何球体 B ( e , r ) B(e, r) B(e,r) 都可被至多 O ( k d ) O\left(k^d\right) O(kd) 个半径为 r c \cfrac{r}{c} cr​ 的球体覆盖

0.2. 一些记号

符号含义
( X , D ) (X, D) (X,D)基础度量空间, X X X为点集 D D D为距离类型
D ( u , v ) D(u, v) D(u,v) P = { x 1 , … , x n } P = \{x_1, \ldots, x_n\} P={x1​,…,xn​}中的俩点 x u x_u xu​和 x v x_v xv​的距离
B ( p , r ) B(p, r) B(p,r)以 p ∈ X p \in X p∈X为球心 r r r为半径的球
Δ \Delta Δ点集中最远俩点 / 最近俩点的比值
d d d倍增维度

0.3. 本文的研究概述

1️⃣背景:很多 c-ANN \text{c-ANN} c-ANN算法比如 HNSW/NSG/DiskANN \text{HNSW/NSG/DiskANN} HNSW/NSG/DiskANN在基准数据集上性能不错,但其下界不可知

2️⃣研究成果

  1. 最坏情况上界:对于 DiskANN \text{DiskANN} DiskANN慢处理版,可在 O ( log ⁡ α Δ ( α − 1 ) ϵ ) O\left(\log _\alpha \cfrac{\Delta}{(\alpha-1) \epsilon}\right) O(logα​(α−1)ϵΔ​)步返回 ( α + 1 α − 1 + ϵ ) -ANN \left(\cfrac{\alpha+1}{\alpha-1}+\epsilon\right)\text{-ANN} (α−1α+1​+ϵ)-ANN
    • 但值得注意, DiskANN \text{DiskANN} DiskANN慢处理的图构建复杂度高达 O ( n 3 ) O(n^3) O(n3)
  2. 最坏情况下界:对于 DiskANN \text{DiskANN} DiskANN块预处理版/ HNSW \text{HNSW} HNSW/ NSG \text{NSG} NSG,算法找到 5 5 5个最邻近前至少要走 0.1 n 0.1n 0.1n步

3️⃣未来的研究方向:有没有一种算法,预处理和查询都低于线性复杂度 ? ? ?

1. DiskANN \text{DiskANN} DiskANN回顾

1.0. Intro

标签:log,DiskANN,0.1,text,复杂度,下界,alpha,ANN
From: https://blog.csdn.net/qq_64091900/article/details/141144031

相关文章

  • 时间复杂度为O(n)的命令
    Redis是单线程的,单线程意味着任何一条命令的执行都是串行的,也就是按顺序一条一条的执行。那么当执行的命令耗时,就会导致后续的Redis访问都会阻塞。Redis中时间复杂度为O(n)的命令主要包括以下几类:List(列表)相关的命令:lindex:根据索引获取列表中的元素。如果索引接近列表的末尾,......
  • 【算法学习】算法时间复杂度
    时间复杂度的计算时间复杂度简单计算(一层、两层、多层循环)相当于轨迹追踪法:设执行次数为k,按照循环条件阿布算法课学习链接01区别算法(Algorithm)和程序(Program)算法程序设计阶段实施阶段相关领域知识程序员任何语言、伪代码编程语言独立于硬件......
  • 算法的时间复杂度和空间复杂度
    算法的复杂度        算法在运行时需要耗费的时间资源和空间(内存)资源。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。时间复杂......
  • 阿斯蒂芬小技巧——枚举子集时间复杂度证明
    在写状压dp时,经常会见到如下句子:for(inti=0;i<(1<<n);i++){ for(intj=i;j!=0;j=(j-1)&i){ }}时间复杂度证明如下:单个\(x\)枚举子集复杂度易证(设\(y=log_2(x)\)):\[∑_{i=0}^{y}C^i_y\]使用二项式定理:\[(a+1)^n=∑_{i=0}^{n}C_n^i~a^i\]将上面的\(a\)......
  • 堆排序以及向上、向下调整算法的时间复杂度推导及实现(超详细)
    什么是堆排序?堆排序是由堆这种数据结构所设计的一种排序算法堆的分类:大根堆:每个父结点的值都大于子结点小根堆 :每个父结点的值都小于子结点 在了解完堆之后,需要先了解建堆,建堆有向上建堆建大堆或者小堆,也有向下建堆建大堆或者小堆 建大堆还是小堆看子结点和父结点的......
  • 低代码: 系统开发准备之确定一般开发流程,需求分析,复杂度分析,标准开发流程
    概述低代码系统开发之前,我们首先要进行一些准备我们首先知道我们软件开发的一般流程同时,我们还要知道,我们整个系统平台的需求如何之后,我们要基于需求进行设计,包含UI设计与系统架构设计一般开发流程系统开发一般要经过如下几个步骤,低代码系统平台也不例外我们来看下软件开......
  • 【数据结构】一文总结算法的时间复杂度与空间复杂度
    目录一.算法的复杂度二.时间复杂度1.概念2.大O的渐进表示法3.实践练习3.1练习13.2 练习23.3 练习33.4练习43.5练习5三.空间复杂度 1.概念2.实践练习2.1练习12.2练习22.3练习32.4练习4四.编程题练习 1. 消失的数字2.轮转数组 一.......
  • 在Python中,list1[::] = list2的空间复杂度是多少?
    此代码首先迭代列表nums,更新整数0、1、2(也分别称为红色、白色和蓝色)的计数。nums保证只有整数0、1和/或2。找到计数后,代码使用[::],这是一种就地修改列表的技巧,以排序numsdefsortColors(self,nums:List[int])->None:re......
  • 【每日一题 | 数据结构】时间复杂度计算
    题目解题方法对于二重循环求时间复杂度:写出外层i的变化值写出内层循环语句执行次数(看j)对次数求和找到频度和n的关系笔记视频跳转:【每日一题|数据结构】时间复杂度计算......
  • 数据结构:算法复杂度
    目录前言数据结构和算法的基本概念数据结构和算法的重要性衡量算法的好坏时间复杂度空间复杂度例子分析例子1:冒泡排序例子2:对数时间复杂度总结前言在编程学习中,理解数据结构和算法是至关重要的。这不仅是计算机科学的基础知识,也是解决复杂问题和优化代码效率的关......