笔记分享: 香港中文大学CSCI5610高级数据结构——最邻近查询

news2024/11/15 22:04:43

文章目录

Approximate   Nearest   Neighbor   Search \textbf{Approximate Nearest Neighbor Search} Approximate Nearest Neighbor Search

1.   Doubling   Dimension \textbf{1. Doubling Dimension} 1. Doubling Dimension

1.0.   Intro \textbf{1.0. Intro} 1.0. Intro

1️⃣度量空间 (metric space) \text{(metric space)} (metric space):可看作距离二元组即 ( U , dist ) (U, \text{dist}) (U,dist)

  1. 点集 U U U
    • 非空且可能无限,其中的元素称之为对象 (object) \text{(object)} (object)
    • 对象间的距离: dist ( e 1 , e 2 ) \text{dist}(e_1, e_2) dist(e1,e2),其中 e 1 , e 2 ∈ U e_1, e_2 \in U e1,e2U
  2. 距离函数 dist \text{dist} dist:是一个 U × U → R ≥ 0 U\text{×}U\to{}\mathbb{R}_{\geq 0} U×UR0(非负实数)的映射,满足以下条件
    • 自己到自己距离为 0 \text{0} 0 e ∈ U →dist ( e , e ) = 0 e \in U\text{→}\text{dist}(e, e)=0 eUdist(e,e)=0
    • 任意两点距离大于 1 \text{1} 1 e 1 , e 2 ∈ U ∧ e 1 ≠ e 2 →dist ( e 1 , e 2 ) ≥ 1 e_1, e_2 \in U\land{}e_1 \neq e_2\text{→}\text{dist}(e_1, e_2) \geq 1 e1,e2Ue1=e2dist(e1,e2)1
    • 两点间互相距离不变, e 1 , e 2 ∈ U →dist ( e 1 , e 2 ) = dist ( e 2 , e 1 ) e_1, e_2 \in U\text{→}\text{dist}(e_1, e_2) = \text{dist}(e_2, e_1) e1,e2Udist(e1,e2)=dist(e2,e1)
    • 满足三角不等式, e 1 , e 2 , e 3 ∈ U →dist ( e 1 , e 2 ) ≤ dist ( e 1 , e 3 ) + dist ( e 3 , e 2 ) e_1, e_2, e_3 \in U\text{→}\text{dist}(e_1, e_2) \leq \text{dist}(e_1, e_3) + \text{dist}(e_3, e_2) e1,e2,e3Udist(e1,e2)dist(e1,e3)+dist(e3,e2)

2️⃣ Nearest Neighbor Search \text{Nearest Neighbor Search} Nearest Neighbor Search是个啥​

image-20240731222415006
  1. 算法输入: U U U中的 n n n个对象(即子集 S S S),以及 S S S外的一点 q q q
  2. 算法输出: n n n个对象中使得 dist ( q , e ) \text{dist}(q, e) dist(q,e)最小的对象 e ∗ e^* e
    • 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)=eSmindist(q,e)​​
    • 称这个对象 e ∗ e^* e q q q 的最近邻 (nearest neighbor) \text{(nearest neighbor)} (nearest neighbor) e ∗ e^* e不一定唯一

3️⃣ Nearest Neighbor Search \text{Nearest Neighbor Search} Nearest Neighbor Search的解决

  1. 理想情况:将 S S S预处理为一种数据结构,不论度量空间如何,都可高效得到 min ⁡ e ∈ S dist ( q , e ) \min\limits_{e \in S} \text{dist}(q, e) eSmindist(q,e)
  2. 最坏情况:(朴素方法)计算单个 q ↔ 一共 n 组距离 n q\xleftrightarrow{一共n组距离}n q一共n组距离 n e e e​之间的距离,选出最大距离
  3. 近似情况: c- \text{c-} c-最近似邻 (c-ANN) \text{(c-ANN)} (c-ANN),即 { NN: dist ( q , e ) = dist ( q , e ∗ ) c-ANN: dist ( q , e ) ≤ c ∗ dist ( q , e ∗ ) \begin{cases}\text{NN: }\text{dist}(q, e)=\text{dist}(q, e^*)\\\\\text{c-ANN: }\text{dist}(q, e)\leq{}c*\text{dist}(q, e^*)\end{cases} NN: dist(q,e)=dist(q,e)c-ANN: dist(q,e)cdist(q,e)
    • q q q可能有多个 (c-ANN) \text{(c-ANN)} (c-ANN)​点,算法一般返回其中任意一个
    • 找到 (c-ANN) \text{(c-ANN)} (c-ANN)任然极其困难了,近似条件下的最坏情况仍需计算 n n n​次距离
  4. c-ANN \text{c-ANN} c-ANN能够高效解决:
    • 必要条件: ( U , dist ) (U, \text{dist}) (U,dist)要满足 U = N d U=\mathbb{N}^d U=Nd 且维度 d d d为常数 ( d d d维空间)且 dist \text{dist} dist是欧几里得距离
    • 倍增维度:即使 ( U , dist ) (U, \text{dist}) (U,dist)很难,但特定 S S S ( S , dist ) (S, \text{dist}) (S,dist)倍增维度小,其 c-ANN \text{c-ANN} c-ANN也能高效解决

4️⃣ Measure the space and query time of a structure \text{Measure the space and query time of a structure} Measure the space and query time of a structure

  1. 将对象和距离函数视为黑箱
  2. 结构的空间复杂度:结构占用的内存单元数 + + +存储的对象数
  3. 查询的时间复杂度: RAM \text{RAM} RAM原子操作的数量 + \text{+} +距离函数 dist \text{dist} dist​被调用的次数

5️⃣纵横比 (aspect ratio):  \text{(aspect ratio): } (aspect ratio):  S S S 中最大和最小成对距离之间的比率

  • Δ ( S ) = ( sup ⁡ e 1 , e 2 ∈ S dist ⁡ ( e 1 , e 2 ) ) / ( inf ⁡ distinct  e 1 , e 2 ∈ S dist ⁡ ( e 1 , e 2 ) ) \displaystyle\Delta(S)=\left(\sup _{e_1, e_2 \in S} \operatorname{dist}\left(e_1, e_2\right)\right) /\left(\inf _{\text {distinct } e_1, e_2 \in S} \operatorname{dist}\left(e_1, e_2\right)\right) Δ(S)=(e1,e2Ssupdist(e1,e2))/(distinct e1,e2Sinfdist(e1,e2))

1.1.   Doubling   Dimension \textbf{1.1. Doubling Dimension} 1.1. Doubling Dimension

1️⃣直径: X X X U U U非空子集, X X X直径是 X X X距离最远的两点的距离,即 diam ⁡ ( X ) = sup ⁡ e 1 , e 2 ∈ X dist ⁡ ( e 1 , e 2 ) \displaystyle\operatorname{diam}(X)=\sup _{e_1, e_2 \in X} \operatorname{dist}\left(e_1, e_2\right) diam(X)=e1,e2Xsupdist(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 X1X2...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} m2λdiam(Xi)21diam(X)

3️⃣倍增维度

  1. 含义:使得每个非空有限子集 X X X都可被 2 λ 2^\lambda 2λ-划分的 λ \lambda{} λ​​

    • 即倍增维度就是最小的那个 λ \lambda λ,使得数量
  2. 实例:当 X X X含有八个点,满足 { U = N 2 dist为欧氏距离 → \begin{cases}U\text{=}\mathbb{N}^2\\\\\text{dist}为欧氏距离\end{cases}\to{} U=N2dist为欧氏距离 该度量空间的倍增维度为 log ⁡ 2 7 < 3 \log_2 7 < 3 log27<3

    img
    • D D D为覆盖 X X X所有点的最小圆(图中实线), diam ( D ) = diam ( X ) \text{diam}(D)=\text{diam}(X) diam(D)=diam(X)
    • 七个直径为 1 2 diam ( X ) \cfrac{1}{2}\text{diam}(X) 21diam(X)的小圈 D 1 D 2 . . . D 7 D_1D_2...D_7 D1D2...D7(图中虚线),就可实现对 D D D​的全覆盖
    • 将每个 e e e分配到(唯一的)小圆盘 D i D_i Di中,由此将 X X X分为 X 1 X 2 . . . X 7 X_1X_2...X_7 X1X2...X7
    • max { diam ( X i ) } ≤ diam ( D i ) = 1 2 diam ( X ) \text{max}\{\text{diam}(X_i)\}\leq{}\text{diam}(D_i)=\cfrac{1}{2}\text{diam}(X) max{diam(Xi)}diam(Di)=21diam(X)所以 X X X 可以被 2 log ⁡ 2 7 2^{\log_2 7} 2log27 分割

4️⃣在 X ⊆ U X\subseteq{}U XU情况下 ( X , dist ) (X, \text{dist}) (X,dist)的倍增维度 ≤ ( U , dist ) \leq(U, \text{dist}) (U,dist)​的倍增维度

1.2.   Two   Properties   in   Metric   Space \textbf{1.2. Two Properties in Metric Space} 1.2. Two Properties in Metric Space

1.2.1.   Balls \textbf{1.2.1. Balls} 1.2.1. Balls

1️⃣球体:

  1. 传统意义:在 R d \mathbb{R}^d Rd中位于 d d d​ 维球体内的点集,比如二维圆/三维球
  2. 推广到度量空间:
    • 对于 ∀ e ∈ U \forall{}e\in{}U eU以及半径 r ≥ 0 r\geq{}0 r0,所有满足 dist ( e , e ′ ) ≤ r \text{dist}\left(e, e^{\prime}\right) \leq r dist(e,e)r e ′ e^{\prime} e集合就是球
    • 记作 B ( e , r ) = { e 1 ′ e 2 ′ . . . e k ′ } B(e, r)=\{e^{\prime}_1e^{\prime}_2...e^{\prime}_k\} B(e,r)={e1e2...ek}

2️⃣球体性质

  1. 对于传统球体: 半径为 r r r d d d 维球体可以被 2 O ( d ) 2^{O(d)} 2O(d) 个半径为 Ω ( r ) \Omega(r) Ω(r)​​ 的球体覆盖
  2. 对度量空间的球体
    • 条件:度量空间 ( U , dist ) (U, \text{dist}) (U,dist)的倍增维度为 λ \lambda λ c c c为常数
    • 表述 1:  \text{1: } 1: 任何球体 B ( e , r ) B(e, r) B(e,r) 都可被至多 2 O ( λ ) 2^{O(\lambda)} 2O(λ) 个半径为 r c \cfrac{r}{c} cr​ 的球体覆盖
    • 表述 2:  ∃   e 1 , … , e m ∈ U \text{2: }\exist{}\text{ }e_1, \ldots, e_m \in U 2:  e1,,emU使得 { m ≤ 2 O ( λ ) B ( e , r ) ⊆ ⋃ i = 1 m B ( e i , r c ) \begin{cases}m \leq 2^{O(\lambda)} \\\\B(e, r) \subseteq \bigcup\limits_{i=1}^m B\left(e_i, \cfrac{r}{c}\right)\end{cases} m2O(λ)B(e,r)i=1mB(ei,cr)

1.2.2.   Constant   Aspect-Ratio   Object   Sets \textbf{1.2.2. Constant Aspect-Ratio Object Sets} 1.2.2. Constant Aspect-Ratio Object Sets

1️⃣常数纵横比对象集: r = 1 r=1 r=1的球体中可放入最多 2 O ( d ) 2^{O(d)} 2O(d) 个点,并确保任意两点间距离 ≥ 1 2 \geq{}\cfrac{1}{2} 21

2️⃣引理:度量空间 ( X , dist ) (X, \text{dist}) (X,dist)的倍增维度为 λ \lambda λ X X X的纵横比为常数,则 X X X最多只有 2 O ( λ ) 2^{O(\lambda)} 2O(λ)​个对象

1.3.   A   3-ANN   Structure \textbf{1.3. A 3-ANN Structure} 1.3. A 3-ANN Structure

1.3.0.   Inro \textbf{1.3.0. Inro} 1.3.0. Inro

1️⃣一些要用到的符号

  1. ( U , dist ) (U, \text{dist}) (U,dist)为基础度量空间, S ⊆ U S \subseteq U SU为包含 n ≥ 2 n \geq 2 n2个对象的 Input \text{Input} Input
  2. h = ⌈ log ⁡ 2 diam ( S ) ⌉ h=\left\lceil\log _2 \text{diam}(S)\right\rceil h=log2diam(S)
  3. λ \lambda λ​为 ( S , dist ) (S, \text{dist}) (S,dist)​的倍增维数

2️⃣本节讨论的定理:存在结构可在 { 空间复杂度:  2 O ( λ ) h 时间复杂度:  2 O ( λ ) h n \begin{cases}空间复杂度\text{: }2^{O(\lambda)}h\\\\时间复杂度\text{: }2^{O(\lambda)}hn\end{cases} 空间复杂度2O(λ)h时间复杂度2O(λ)hn内回答 3-ANN \text{3-ANN} 3-ANN问题

1.3.1.   Sample   Nets \textbf{1.3.1. Sample Nets} 1.3.1. Sample Nets

1️⃣样本网定义:对于 X ⊆ S X \subseteq S XS,要求 Y Y Y X X X r r r-样本网需要满足

  1. Y ⊆ X Y \subseteq X YX
  2. ∀ y 1 , y 2 ∈ Y \forall{}y_1, y_2 \in Y y1,y2Y dist ( y 1 , y 2 ) > r \text{dist}\left(y_1, y_2\right) > r dist(y1,y2)>r
  3. X ⊆ ⋃ y ∈ Y B ( y , r ) X \subseteq \bigcup\limits_{y \in Y} B(y, r) XyYB(y,r) ∀ x ∈ X ,   ∃ y ∈ Y \forall{}x\in{}X,\,\exists{}y\in{}Y xX,yY使得 dist ( x , y ) ≤ r \text{dist}(x, y) \leq r dist(x,y)r

2️⃣样本网络实例:度量空间为 ( N 2 , dist=Euclidean ) \left(\mathbb{N}^2,\text{dist=Euclidean})\right. (N2,dist=Euclidean)

image-20240802224755982
  1. Y ⊆ X ⇒ { Y = { 黑点 } X = { 黑点 + 白点 } Y \subseteq X\Rightarrow\begin{cases}Y=\{黑点\}\\\\X=\{黑点+白点\}\end{cases} YX Y={黑点}X={黑点+白点}
  2. dist ( y 1 , y 2 ) > r ⇒ \text{dist}\left(y_1, y_2\right) > r\Rightarrow dist(y1,y2)>r​单个黑点不能出现在两个圆中
  3. X ⊆ ⋃ y ∈ Y B ( y , r ) ⇒ X \subseteq \bigcup\limits_{y \in Y} B(y, r)\Rightarrow XyYB(y,r)所有点只出现在圆的重叠平面内

1.3.2.   Structure   G \textbf{1.3.2. Structure G} 1.3.2. Structure G

1️⃣结构的定义

image-20240803124118507
  1. 定义每层结点: Y i Y_i Yi层的点即为 S S S 2 i 2^i 2i-样本网 ( i = 0 , 1 , . . . , h ) (i=0,1,...,h) (i=0,1,...,h)
    • Y h Y_h Yh只有一个对象,并且 2 h ≥ diam ( S ) 2^h\geq{}\text{diam}(S) 2hdiam(S)
    • 框定 ∣ Y i ∣ ≤ n |Y_i|\leq{}n Yin后,使得 G G G的空间复杂度变为了 O ( h n ) O(hn) O(hn)
  2. 定义结点的连接
    • 对于 y ∈ Y i y\in{}Y_{i} yYi z ∈ Y i − 1 z\in{}Y_{i-1} zYi1如果满足 dist ( y , z ) ≤ 7 ⋅ 2 i \text{dist}(y, z) \leq 7 \cdot 2^i dist(y,z)72i则建立有向连接 y ⟶ z y\longrightarrow{}z yz
    • N i + ( y ) N_i^{+}(y) Ni+(y)表示 y y y 的出度 (out-neighbors) \text{(out-neighbors)} (out-neighbors)

2️⃣结构的性质: ∣ N i + ( y ) ∣ = 2 O ( λ ) \left|N_i^{+}(y)\right|=2^{O(\lambda)} Ni+(y) =2O(λ) ∣ N i + ( y ) ∣ \left|N_i^{+}(y)\right| Ni+(y) 随着 λ \lambda λ​的增加指数级增加

1.3.3.   Query \textbf{1.3.3. Query} 1.3.3. Query

1️⃣查询过程

image-20240731222415006
  1. 先将 S S S转化为图 G G G​的结构
  2. 对于查询对象 q ∈ U \ S q \in U \backslash S qU\S我们在图 G G G中沿某条路径下降(称之为 π \pi π)
    • 起始:访问 G G G根节点 Y h Y_h Yh
    • 下降: y ∈ Y i y\in{}Y_{i} yYi z ∈ Y i − 1 z\in{}Y_{i-1} zYi1 i ≥ 1 i\geq1 i1时,按照 dist ( q , z ) \text{dist}(q, z) dist(q,z)​ 最小化原则下降,平局时任选
  3. 查询结果即返回 π \pi π路径中离 q q q最近的一点,即 e ∗ e^{*} e

2️⃣查询性质

  1. 查询的时间复杂度: ∣ N i + ( y ) ∣ h = 2 O ( λ ) h \left|N_i^{+}(y)\right|h=2^{O(\lambda)}h Ni+(y) h=2O(λ)h​​
  2. 该查询是 q q q 3-ANN \text{3-ANN} 3-ANN,即 ∃ e ∈ { y h y h − 1 … y 0 } \exist{}e\in{}\{y_hy_{h-1}\ldots{}y_0\} e{yhyh1y0}满足 dist ( q , e ) ≤ 3 ∗ dist ( q , e ∗ ) \text{dist}(q,e)\leq{}3*\text{dist}(q,e^*) dist(q,e)3dist(q,e)

1.4.   Remarks \textbf{1.4. Remarks} 1.4. Remarks

1️⃣结构 G G G在度量空间 ( U , dist ) (U, \text{dist}) (U,dist)倍增维度 λ \lambda{} λ较小时高效,比如以下情况

  1. ( N d , dist=Euclidean ) \left(\mathbb{N}^d,\text{dist=Euclidean})\right. (Nd,dist=Euclidean)的倍增维度为 λ = O ( d ) → 如果 d 是常数 O ( 1 ) \lambda{}=O(d)\xrightarrow{如果d是常数}O(1) λ=O(d)如果d是常数 O(1)
    • 可将 ∣ S ∣ = n |S|=n S=n的集合存储在 N d \mathbb{N}^d Nd结构中 → { 空间复杂度:  O ( n log ⁡ Δ ( S ) ) 时间复杂度:  O ( log ⁡ Δ ( S ) ) \to\begin{cases}空间复杂度\text{: }O(n \log \Delta(S))\\\\时间复杂度\text{: }O(\log \Delta(S))\end{cases} 空间复杂度O(nlogΔ(S))时间复杂度O(logΔ(S))
  2. ( N d , dist= L t -Norm ) \left(\mathbb{N}^d,\text{dist=}L_t\text{-Norm})\right. (Nd,dist=Lt-Norm)的倍增维度也为 λ = O ( d ) → 如果 d 是常数 O ( 1 ) \lambda{}=O(d)\xrightarrow{如果d是常数}O(1) λ=O(d)如果d是常数 O(1)

2️⃣关于 λ \lambda λ的其它注意事项

  1. λ \lambda λ很大会导致度量空间“困难”,不论输入 S S S是什么都无法解决 3-ANN \text{3-ANN} 3-ANN​问题
  2. λ \lambda λ只和输入度量空间 ( S , dist ) (S, \text{dist}) (S,dist)而非基础度量空间 ( U , dist ) (U, \text{dist}) (U,dist),所以只需 S ⊆ U S\subseteq{U} SU有效就行

3️⃣算法下界: ∣ S ∣ = n |S|=n S=n

  1. 最精确的邻近查询:没有结构可以避免计算 q ↔ { e 1 e 2 . . . e n } q\xleftrightarrow{}\{e_1e_2...e_n\} q {e1e2...en} n n n​次距离,下界就是 n n n
  2. c-ANN \text{c-ANN} c-ANN查询:当 ( S , dist ) (S, \text{dist}) (S,dist)的倍增维度是 λ \lambda λ时,下界为 2 Ω ( λ ) log ⁡ ∣ S ∣ 2^{\Omega(\lambda)} \log |S| 2Ω(λ)logS

2.   Locality   Sensitive   Hashing \textbf{2. Locality Sensitive Hashing} 2. Locality Sensitive Hashing

2.0.   Intro \textbf{2.0. Intro} 2.0. Intro

1️⃣ LSH \text{LSH} LSH的优势:在 λ \lambda{} λ较大的度量空间,也可以高效回答 c-ANN \text{c-ANN} c-ANN查询问题

2️⃣一些预备知识

  1. 多重集并集 (multi-set union):  \text{(multi-set union): } (multi-set union): 和普通并集相比区别在于保留重复项
    • 比如 Z 1 = { a , b } 和 Z 2 = { b , c } Z 1 ⇒ Z 1 ∪ Z 2 = { a , b , b , c } Z_1 = \{a, b\}和Z_2 = \{b, c\}Z_1 \Rightarrow{}Z_1\cup Z_2 = \{a, b, b,c\} Z1={a,b}Z2={b,c}Z1Z1Z2={a,b,b,c}
  2. Markov \text{Markov} Markov不等式: Pr [ X ≥ t ⋅ E [ X ] ] ≤ 1 t \text{Pr}[X \geq t \cdot \mathbf{E}[X]] \leq \frac{1}{t} Pr[XtE[X]]t1

2.1.   ( r , c ) -Near   Neighbor   Search \textbf{2.1. }(r,c)\textbf{-Near Neighbor Search} 2.1. (r,c)-Near Neighbor Search

1️⃣ ( r , c ) -NN (r,c)\text{-NN} (r,c)-NN​​​概念

image-20240731222415006
  1. r ≥ 1 r \geq 1 r1 c > 1 c > 1 c>1 S ⊆ U S\subseteq{}U SU ∣ S ∣ = n |S|=n S=n q ∈ U q \in U qU

  2. ( r , c ) -NN (r,c)\text{-NN} (r,c)-NN查询返回:令== D = dist ( q , e i ) D=\text{dist}(q,e_i) D=dist(q,ei)==

    image-20240803185122335
    Case \textbf{Case} Case ∃ e i 使 D ∈ [ 0 , r ] \exist{}e_i使D\in[0,r] ei使D[0,r] ∃ e i 使 D ∈ [ r , c r ] \exist{}e_i使D\in{}[r,cr] ei使D[r,cr] ∃ e i 使 D ∈ [ c r , ∞ ] \exist{}e_i使D\in[cr,\infin{}] ei使D[cr,]返回对象
    Case 1 \text{Case 1} Case 1一定可能可能满足 D ≤ c r D\leq{cr} Dcr e i e_i ei
    Case 2 \text{Case 2} Case 2不可能不可能不可能返回寂寞
    Case 3 \text{Case 3} Case 3不可能一定可能满足 D ≤ c r D\leq{cr} Dcr e i e_i ei

2️⃣引理:按以下步骤,可回答 S S S上所有 c 2 -ANN c^{2}\text{-ANN} c2-ANN查询

  1. 条件:对任意 r ≥ 1 r \geq 1 r1 c > 1 c > 1 c>1,我们已经知道了如何在 S S S上构建结构来回答 ( r , c ) -NN (r,c)\text{-NN} (r,c)-NN查询
  2. 步骤:
    • 构建 O ( log ⁡ diam ( S ) ) O(\log \text{diam}(S)) O(logdiam(S))个这样的结构
    • 发起 O ( log ⁡ diam ( S ) ) O(\log \text{diam}(S)) O(logdiam(S)) ( r , c ) -NN (r,c)\text{-NN} (r,c)-NN查询 ( c c c相同但 r r r​​不同)

2.2.   Locality   Sensitive   Hashing \textbf{2.2. Locality Sensitive Hashing} 2.2. Locality Sensitive Hashing

1️⃣局部敏感哈希函数定义:核心思想就是将相似的点映射进同一桶,不相似的点映射到不同桶

  1. 前提
    • r / c / p 1 / p 2 r/c/p_1/p_2 r/c/p1/p2满足 r ≥ 1 / c > 1 / 0 < p 2 < p 1 ≤ 1 r\geq{}1/c>1/0 < p_2 < p_1 \leq 1 r1/c>1/0<p2<p11
    • h h h是根据某种分布从函数族 H H H中抽取的函数
  2. 随机函数 h :  U → N h\text{: }U \rightarrow \mathbb{N} hUN ( r , c r , p 1 , p 2 ) -LSH \left(r, cr, p_1, p_2\right)\text{-LSH} (r,cr,p1,p2)-LSH函数,需满足
    • ∀ x , y ∈ U → { dist ( x , y ) ≤ r ⇒ Pr [ h ( x ) = h ( y ) ] ≥ p 1 dist ( x , y ) > c r ⇒ Pr [ h ( x ) = h ( y ) ] ≤ p 2 \forall{}x,y\in{}U\to{}\begin{cases}\text{dist}(x, y) \leq r\Rightarrow{}\text{Pr}[h(x) = h(y)] \geq p_1\\\\\text{dist}(x, y) > cr\Rightarrow{}\text{Pr}[h(x) = h(y)] \leq p_2\end{cases} x,yU dist(x,y)rPr[h(x)=h(y)]p1dist(x,y)>crPr[h(x)=h(y)]p2​​​​
    • 即两个数据靠得近( ≤ r \leq{}r r),哈希冲突到一个桶的概率就大;靠的远( > c r >cr >cr)则概率就小
  3. 此外定义 ( r , c r , p 1 , p 2 ) -LSH \left(r, cr, p_1, p_2\right)\text{-LSH} (r,cr,p1,p2)-LSH函数的对数比值为 ρ = ln ⁡ ( 1 p 1 ) ln ⁡ ( 1 p 2 ) = ln ⁡ p 1 ln ⁡ p 2 < 1 \rho = \cfrac{\ln \left(\cfrac{1}{p_1}\right)}{\ln \left(\cfrac{1}{p_2}\right)}=\cfrac{\ln{}p_1}{\ln{}p_2}<1 ρ=ln(p21)ln(p11)=lnp2lnp1<1

2️⃣放大引理:若已知如何获得 ( r , c r , p 1 , p 2 ) -LSH \left(r, cr, p_1, p_2\right)\text{-LSH} (r,cr,p1,p2)-LSH函数 h h h ∀ int  ℓ ≥ 1 \forall{\text{int }}\ell \geq 1 int 1 ( r , c r , p 1 ℓ , p 2 ℓ ) -LSH \left(r, cr, p_1^{\ell}, p_2^{\ell}\right)\text{-LSH} (r,cr,p1,p2)-LSH函数 g g g使

  1. ∀ x , g ( x ) \forall{}x,g(x) x,g(x)计算复杂度是 h ( x ) h(x) h(x) O ( ℓ ) O(\ell) O()
  2. g ( x ) g(x) g(x)空间复杂度为 O ( ℓ ) O(\ell) O()

3️⃣ LHS \text{LHS} LHS实例: ( N d , dist=Euclidean ) \left(\mathbb{N}^d,\text{dist=Euclidean})\right. (Nd,dist=Euclidean) ( r , c r , p 1 , p 2 ) -LSH \left(r, cr, p_1, p_2\right)\text{-LSH} (r,cr,p1,p2)-LSH函数

  1. 构建
    • 生成 d d d个随机变量 α 1 α 2 . . . α d \alpha_1\alpha_2...\alpha_d α1α2...αd α i ∼ N ( 0 , 1 ) \alpha_i\sim{}N(0,1) αiN(0,1)
    • β > 0 \beta > 0 β>0依赖于 c c c γ \gamma γ [ 0 , β ] [0, \beta] [0,β]​中均匀随机生成
    • ∀ x ∈ N d \forall{}x\in\mathbb{N}^d xNd定义 h ( x ) = [ γ + ∑ i = 1 d ( α i ⋅ x [ i ] r ) β ] h(x)=\textbf{[}\cfrac{\gamma+\displaystyle\sum\limits_{i=1}^d\left(\cfrac{\alpha_i \cdot x[i]}{r}\right)}{\beta}\textbf{]} h(x)=[βγ+i=1d(rαix[i])]
  2. 性质: p 2 p_2 p2是一个常数,该函数的对数比值 ρ ≤ 1 c \rho\leq\cfrac{1}{c} ρc1

2.3.   A   Structure   for   ( r , c ) -NN   Search \textbf{2.3. A Structure for }(r,c)\textbf{-NN Search} 2.3. A Structure for (r,c)-NN Search

2.3.0.   Inro \textbf{2.3.0. Inro} 2.3.0. Inro

1️⃣一些前置条件

  1. S ⊆ U   ( ∣ S ∣ = n ) S\subseteq{}U\,(|S|=n) SU(S=n)
  2. 若能够构建 ρ \rho ρ ( r , c r , p 1 , p 2 ) -LSH \left(r, cr, p_1, p_2\right)\text{-LSH} (r,cr,p1,p2)-LSH函数,该结构用于在 S S S上回答 ( r , c ) -NN (r,c)\text{-NN} (r,c)-NN查询
  3. t l s h t_{lsh} tlsh为评估 ( r , c r , p 1 , p 2 ) -LSH \left(r, cr, p_1, p_2\right)\text{-LSH} (r,cr,p1,p2)-LSH​函数值所需时间

2️⃣需要证明的定理:存在这样一种结构

  1. 复杂度:
    • 空间复杂度:使用 O ( n 1 + ρ ⋅ log ⁡ 1 p 2 n ) O\left(n^{1+\rho} \cdot \log_{\frac{1}{p_2}} n\right) O(n1+ρlogp21n)个内存单元 + + +存储 O ( n 1 + ρ ) O\left(n^{1+\rho}\right) O(n1+ρ)个对象
    • 时间复杂度:查询耗时 O ( n ρ ⋅ log ⁡ 1 p 2 n ⋅ t l s h ) + O\left(n^\rho \cdot \log_{\frac{1}{p_2}} n \cdot t_{lsh}\right)+ O(nρlogp21ntlsh)+计算距离耗时 O ( n ρ ) O\left(n^\rho\right) O(nρ)
  2. 效果:能够至少以 1 10 \cfrac{1}{10} 101的概率,正确回答一次 ( r , c ) -NN (r,c)\text{-NN} (r,c)-NN查询

2.3.1.   Structure \textbf{2.3.1. Structure} 2.3.1. Structure

1️⃣哈希函数 g 1 g 2 . . . g L g_1g_2...g_L g1g2...gL:令 ℓ ≥ 1 \ell \geq 1 1 L ≥ 1 L \geq 1 L1为待定的整数,则

  • 由函数 h : ( r , c r , p 1 , p 2 ) -LSH h\text{:}\left(r, cr, p_1, p_2\right)\text{-LSH} h:(r,cr,p1,p2)-LSH放大到为 L L L个独立函数 → { g 1 : ( r , c r , p 1 , p 2 ) -LSH g 2 : ( r , c r , p 1 2 , p 2 2 ) -LSH          . . . . . . .  g ℓ : ( r , c r , p 1 ℓ , p 2 ℓ ) -LSH          . . . . . . .  g L : ( r , c r , p 1 L , p 2 L ) -LSH \to\begin{cases}g_1\text{:}\left(r, cr, p_1, p_2\right)\text{-LSH}\\g_2\text{:}\left(r, cr, p_1^2, p_2^2\right)\text{-LSH}\\\,\,\,\,\,\,\,\,\text{. . . . . . . }\\g_{\ell}\text{:}\left(r, cr, p_1^{\ell}, p_2^{\ell}\right)\text{-LSH}\\\,\,\,\,\,\,\,\,\text{. . . . . . . }\\g_L\text{:}\left(r, cr, p_1^L, p_2^L\right)\text{-LSH}\end{cases} g1:(r,cr,p1,p2)-LSHg2:(r,cr,p12,p22)-LSH. . . . . . . g:(r,cr,p1,p2)-LSH. . . . . . . gL:(r,cr,p1L,p2L)-LSH

2️⃣桶定义:让所有 x ∈ S x\in{}S xS通过所有哈希函数 g i g_i gi算出哈希值,所有哈希值相同的 x x x分到一个桶里

3️⃣哈希表: T i T_i Ti收集了由 g i g_i gi哈希出来的若干非空桶,一共 L L L张哈希表 T 1 , … , T L T_1, \ldots, T_L T1,,TL 构成了我们的结构

  • 空间消耗: { 内存单元:  O ( n ⋅ L ⋅ ℓ ) 对象:  O ( n ⋅ L ) → \begin{cases}内存单元\text{: }O(n \cdot L \cdot \ell)\\\\对象\text{: }O(n \cdot L)\end{cases}\to{} 内存单元O(nL)对象O(nL) { ℓ = log ⁡ 1 p 2 n L = n ρ → \begin{cases}\ell{}=\log_{\frac{1}{p_2}}n\\\\L=n^{\rho}\end{cases}\to{} =logp21nL=nρ空间复杂度符合 Intro \text{Intro} Intro中的定理

2.3.2.   Query   \textbf{2.3.2. Query } 2.3.2. Query 

1️⃣查询信息:对 q ∈ U / S q\in{U\text{/}S} qU/S执行 ( r , c ) -NN (r,c)\text{-NN} (r,c)-NN查询

2️⃣查询步骤

  1. q q q分别通过 g 1 g 2 . . . g L g_1g_2...g_L g1g2...gL哈希函数,分别被分进桶 g 1 ( q ) g 2 ( q ) . . . g L ( q ) g_1(q)g_2(q)...g_L(q) g1(q)g2(q)...gL(q)记作 b 1 b 2 . . . b L b_1b_2...b_L b1b2...bL
  2. Z = Z= Z= b 1 b 2 . . . b L b_1b_2...b_L b1b2...bL的多重集并集中任选 2 L + 1 2L+1 2L+1
    • 特殊情况:如果 ∑ i = 1 L ∣ b i ∣ ≤ 4 L + 1 \displaystyle\sum_{i=1}^L |b_i| \leq 4L+1 i=1Lbi4L+1,则 Z Z Z​会包括所有桶的所有对象
  3. Z Z Z中找到距 q q q最近的对象 e e e,若 dist ( q , e ) ≤ c r \text{dist}(q, e) \leq cr dist(q,e)cr则返回 e e e

3️⃣查询时间: { 原子操作:  O ( t l s h ⋅ ℓ ⋅ L ) 计算距离:  O ( L ) → \begin{cases}原子操作\text{: }O\left(t_{lsh} \cdot \ell \cdot L\right)\\\\计算距离\text{: }O(L)\end{cases}\to{} 原子操作O(tlshL)计算距离O(L) { ℓ = log ⁡ 1 p 2 n L = n ρ → \begin{cases}\ell{}=\log_{\frac{1}{p_2}}n\\\\L=n^{\rho}\end{cases}\to{} =logp21nL=nρ时间复杂度符合 Intro \text{Intro} Intro中的定理

2.3.3.   Analysis   \textbf{2.3.3. Analysis } 2.3.3. Analysis 

0️⃣ Good \text{Good} Good的标准: x ∈ S x\in{S} xS good ⇔ dist ( q , x ) ≤ c r \text{good}\xLeftrightarrow{}\text{dist}(q, x) \leq c r good dist(q,x)cr 否则就为 Bad \text{Bad} Bad,算法至少返回一个 good \text{good} good才成功

1️⃣引理 1 :  1\text{: } 1查询能被正确回答,需要满足以下两个条件

  1. C 1 : \mathbf{C 1:} C1 e ∗ e^* e至少出现在 b 1 , … , b L b_1, \ldots, b_L b1,,bL中的一个
  2. C 2 : \mathbf{C 2:} C2 b 1 b 2 . . . b L b_1b_2...b_L b1b2...bL的多重集并集中,至少含有 2 L 2L 2L bad \text{bad} bad对象

2️⃣引理 2 2 2 C 1 \mathbf{C 1} C1不成立的概率小于 1 e \cfrac{1}{e} e1,即 Pr [ e ∗ ∉ ⋃ i = 1 L b i ] ≤ 1 e \text{Pr}\left[e^* \notin \displaystyle\bigcup\limits_{i=1}^L b_i\right]\leq{}\cfrac{1}{e} Pr[e/i=1Lbi]e1 ,其中这个 e = 2.718... e=2.718... e=2.718...

3️⃣引理 3 3 3 C 2 \mathbf{C 2} C2不成立的概率小于 1 2 \cfrac{1}{2} 21

🤕所以 C 1 \mathbf{C}1 C1 C 2 \mathbf{C}2 C2同时成立的概率至少为 1 − ( 1 e + 1 2 ) > 0.1 1-(\cfrac{1}{e}+\cfrac{1}{2})>0.1 1(e1+21)>0.1

X.   一些预备知识​ \textbf{X. 一些预备知识​} X. 一些预备知识

X.1.   O / Ω   Notation \textbf{X.1. }O/\Omega{}\textbf{ Notation} X.1. O Notation

1️⃣渐进上界​

渐进类型含义
f ( n ) = O ( 1 ) f(n)=O(1) f(n)=O(1) ∃ K \exists{}K K使得无论 n n n如何变化,都有 f ( n ) ≤ K f(n)\leq{}K f(n)K
f ( n ) = O ( n ) f(n)=O(n) f(n)=O(n) ∃ K \exists{}K K使得无论 n n n如何变化,都有 f ( n ) ≤ K n f(n)\leq{}Kn f(n)Kn
f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n)) ∃ K \exists{}K K使得无论 n n n如何变化,都有 f ( n ) ≤ K g ( n ) f(n)\leq{}Kg(n) f(n)Kg(n)

2️⃣渐进下界

渐进类型含义
f ( n ) = Ω ( 1 ) f(n)=\Omega{}(1) f(n)=Ω(1) ∃ K \exists{}K K使得无论 n n n如何变化,都有 f ( n ) ≥ K f(n)\geq{}K f(n)K
f ( n ) = Ω ( n ) f(n)=\Omega{}(n) f(n)=Ω(n) ∃ K \exists{}K K使得无论 n n n如何变化,都有 f ( n ) ≥ K n f(n)\geq{}Kn f(n)Kn
f ( n ) = Ω ( g ( n ) ) f(n)=\Omega{}(g(n)) f(n)=Ω(g(n)) ∃ K \exists{}K K使得无论 n n n如何变化,都有 f ( n ) ≥ K g ( n ) f(n)\geq{}Kg(n) f(n)Kg(n)

X.2.   L-Norm \textbf{X.2. }\textbf{L-Norm} X.2. L-Norm

1️⃣ L t L_t Lt-范数: p ∈ N d p \in \mathbb{N}^d pNd p [ i ] p[i] p[i]表示 p p p在维度 i i i的坐标,则 p q pq pq间范数为 ( ∑ i = 1 d ∣ p [ i ] − q [ i ] ∣ t ) 1 / t \left(\displaystyle\sum\limits_{i=1}^d |p[i] - q[i]|^t\right)^{1/t} (i=1dp[i]q[i]t)1/t

2️⃣ L 2 L_2 L2范数:就是欧几里得距离,即 { 二维:  ( p x − q x ) 2 + ( p y − q y ) 2 三维:  ( p x − q x ) 2 + ( p y − q y ) 2 + ( p z − q z ) 2 \begin{cases}二维\text{: }\sqrt{(p_x-q_x)^2+(p_y-q_y)^2}\\\\三维\text{: }\sqrt{(p_x-q_x)^2+(p_y-q_y)^2+(p_z-q_z)^2}\end{cases} 二维(pxqx)2+(pyqy)2 三维(pxqx)2+(pyqy)2+(pzqz)2

X.3.   Adversary   Argument \textbf{X.3. Adversary Argument} X.3. Adversary Argument

1️⃣对抗性论证:算法分析的技巧,用来寻求最坏情况下的复杂度

2️⃣对抗者:算法的执行者,不仅知道算法的策略,并且还尽可能给出使得算法表现最坏的输入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2053224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对于mp4 ios和mac safari不能播放问题处理

直接对原mp4文件进行重新转码就可以了 ffmpeg -i origin.mp4 -vcodec h264 -profile:v high -level 4.1 orgin_hl.mp4 原因源文件不符合苹果基本规则 苹果官网文档

Shell:控制脚本 - 信号量

1. 处理信号 1.1 重温Linux信号 Linux系统和应用程序可以生成超过30个信号。表16-1列出了在Linux编程时会遇到的最常见 的Linux系统信号。 通过SIGINT信号&#xff0c;可以中断shell。 你可能也注意到了&#xff0c;shell会将这些信号传给shell脚本程序来处理。而shell脚本…

图像增强技术简介

目录 一、概论 二、图像噪声 三、图像增强处理分类 一、概论 图像增强作为基本的图像处理技术&#xff0c;其目的是对图像进行加工&#xff0c;以得到对具体应用来说视觉效果更“好”更“有用”的图像。图像增强算法并不能增加原始图像的信息&#xff0c;而是通过某种技术手…

基础数据结构 -- 图

1 简介 图是一种用 节点 和 边 来表示相互关系的数学模型&#xff0c;其中节点代表事物&#xff0c;边代表事物间的联系。图作为一种数据结构&#xff0c;在各种领域都有广泛应用&#xff0c;如社交网络、城市交通网络、互联网页面链接等。 图由两个主要部分构成&#xff1a; 节…

XXX【4】策略模式

如上图所示&#xff0c;如果要加入一个新的货币&#xff0c;那么就需要对类中的Calculate函数进行修改&#xff0c;这违背了封闭开放原则。 上图中的方式更加合适&#xff0c;搞一个抽象类&#xff08;方法中可以用多态调用&#xff09;&#xff0c;然后每个货币自己是一个类&a…

井盖异动传感器:为城市安全加码

城市的地下管网错综复杂&#xff0c;井盖作为连接地面与地下的重要通道&#xff0c;其安全性至关重要。然而&#xff0c;由于各种原因导致的井盖丢失或损坏事件时有发生&#xff0c;给行人和车辆带来了极大的安全隐患。 一、智能科技&#xff0c;守护脚下安全 旭华智能井盖异…

3D可视化项目

3D可视化项目是指利用3D技术和工具来将数据、场景或概念以可视化的方式呈现出来&#xff0c;以便更好地理解和分析。这些项目通常涉及使用3D建模、渲染和动画技术&#xff0c;将数据或概念转化为具有深度和逼真感的可视化场景或对象。3D可视化项目涉及到的技术栈主要包括以下几…

从零开始掌握限流技术:计数器、滑动窗口、漏桶与令牌桶详解

为什么需要限流呢&#xff1f; &#x1f539;想象一下&#xff0c;你的服务器就像一个繁忙的餐馆&#xff0c;而你的应用就像是餐馆的服务员。餐馆里人山人海&#xff0c;每个人都在争先恐后地想要点餐。这时候&#xff0c;如果没有一个好的限流机制&#xff0c;会发生什么呢&…

【轻松拿捏】设计模式六大基本原则(一)单一职责原则(SRP - Single Responsibility Principle)

&#x1f388;边走、边悟&#x1f388;迟早会好 一. 概述 单一职责原则&#xff08;SRP - Single Responsibility Principle&#xff09;是面向对象设计中的一个基本原则。它的核心思想是&#xff1a;一个类只应有一个引起它变化的原因&#xff0c;也就是说&#xff0c;一个类…

使用Docker-compose一键部署Wordpress平台

一、Docker-compose概述&#xff1a; docker-compose&#xff1a;单机容器编排 Dockerfile&#xff1a;先配置好文件&#xff0c;然后build&#xff0c;镜像——>容器。 docker-compose&#xff1a;即可基于Dockerfile&#xff0c;也可以基于镜像&#xff0c;可以一键式拉…

扎心“我学了六个月 Python,怎么还是会找不到工作”

前言 &#x1f449; 小编已经为大家准备好了完整的代码和完整的Python学习资料&#xff0c;朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费】 在编程界&#xff0c;Python是一种神奇的存在。有人认为&#xff0c;只有用Python才能优雅写代码…

qt-16可扩展对话框--隐藏和展现

可扩展对话框 知识点extension.hextension.cppmain.cpp运行图初始化隐藏展现--点击--详细按钮 知识点 MainLayout->setSizeConstraint(QLayout::SetFixedSize);//固定窗口大小 extension.h #ifndef EXTENSION_H #define EXTENSION_H#include <QDialog>class Extens…

如何对 GitLab 中文版进行升级?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…

EVE-NG导入锐捷镜像

安装搭建好了EVE-NG之后&#xff0c;我们想要做虚拟实验还需要载入虚拟镜像&#xff0c;下面我来演示如何导入锐捷镜像 准备工作&#xff1a; 1.安装EVE-NG 2.FTP远程传输工具 正式开始&#xff1a; 第一步&#xff1a;下载镜像 前往锐捷官网下载锐捷设备镜像 锐捷镜像下…

以太网链路聚合(LACP模式)

1. 实验目的 掌握使用静态LACP模式配置链路聚合的方法掌握控制静态LACP模式下控制活动链路的方法掌握静态LACP的部分特性的配置 实验拓扑 实验拓扑如图11-12所示&#xff1a; 图11-12以太网聚合LACP模式 3. 实验步骤 PC机IP地址的配置 PC1的配置&#xff0c;在ipv4下选…

内存(动态开辟)———C语言

内存管理&#xff1a; 1.C语言运行时的内存分配 2.static关键字 1.修饰变量 局部变量&#xff1a; <1>在编译的过程中&#xff0c;会在数据区为该变量开辟空间&#xff0c;如果代码中未对其进行初始化&#xff0c;则系统默认初始化为0。 <2>用static修饰的局部变量…

a股市场的股票怎么做期权交易

在金融市场中&#xff0c;A股股票期权是一种重要的衍生金融工具&#xff0c;它赋予持有者在未来某一特定日期以预定价格买入或卖出股票的权利。了解期权交易流程对于投资者至关重要&#xff0c;本文将详细介绍a股市场的股票怎么做期权交易&#xff1f;本文来自&#xff1a;期权…

【软件测试】测试阶段、评审、瀑布式流程

软件测试 测试阶段评审瀑布式流程 测试阶段 冒烟测试&#xff08;Smoke Testing&#xff09;&#xff1a; 冒烟测试是一种快速的初步测试&#xff0c;通常在开发周期的早期进行&#xff0c;用以验证软件的基本功能是否按预期工作。它通常在软件构建完成后立即执行&#xff0c;以…

【windows系统】应用与功能下卸载程序提示Windows找不到文件解决办法

我们使用windows系统的时候&#xff0c;想要删除某个程序&#xff0c;可以通过windows系统设置中的添加或删除程序来操作&#xff0c;如下图所示 打开如图下所示应用和功能界面&#xff0c;可以对程序进行卸载 如图下所示&#xff0c;我们可以通过这种方式卸载掉电脑中的程序 但…

ClickHouse集群的安装

目录 1.clickhouse中文文档地址 2.centos安装部署 2.1采用tgz的方式安装 2.2修改配置文件 2.3修改数据目录 2.4创建角色和目录 3 集群安装 3.1配置文件修改 3.2启动zookeeper 3.3启动clickhouse-server 3.4任意节点连接clickhouse 3.5查看集群 3.6建库 3.7查看数…