Kd-tree在维度较小时(比如:K≤30),算法的查找效率非常高,然而当Kd-tree用于对高维数据(比如:K≥100)进行索引和查找时,就面临着维数灾难(curse of dimension)问题,查找效率会随着维度的添加而迅速下降。
通常。实际应用中,我们经常处理的数据都具有高维的特点,比如在图像检索和识别中。每张图像通经常使用一个几百维的向量来表示,每一个特征点的局部特征用一个高维向量来表征(比如:128维的SIFT特征)。因此,为了可以让Kd-tree满足对高维数据的索引,Jeffrey S. Beis和David G. Lowe提出了一种改进算法——Kd-tree with BBF(Best Bin First),该算法可以实现近似K近邻的高速搜索。
在介绍BBF算法前。我们先来看一下原始Kd-tree是为什么在低维空间中有效而到了高维空间后查找效率就会下降。在原始kd-tree的近期邻查找算法中(第一节中介绍的算法)。为了可以找到查询点Q在数据集合中的近期邻点,有一个重要的操作步骤:回溯,该步骤是在未被訪问过的且与Q的超球面相交的子树分支中查找可能存在的近期邻点。
随着维度K的增大。与Q的超球面相交的超矩形(子树分支所在的区域)就会添加,这就意味着须要回溯推断的树分支就会很多其它,从而算法的查找效率便会下降非常大。
一个非常自然的思路是:既然kd-tree算法在高维空间中是因为过多的回溯次数导致算法查找效率下降的话。我们就能够限制查找时进行回溯的次数上限&