基于R-Tree的最近邻查询
BAB(Branch.and.Band)算法是由Nick Roussopoulousnl等人于1995年提出的,是最早的基于R.树的静态最近邻查询算法。该算法使用MINDIST和MINMAXDIST两个距离作为查询过程中的判断条件,对R树进行深度优先
搜索以查找最近邻,适用于基于静态对象的最近邻搜索。BAB思想已经被广泛的应用于人工智能以及运筹学等领域。如果搜索顺序和剪枝的规则选取适当,可以有效的减少系统在大规模空间搜索过程中的结点访问数目。
一、The MBR Face Property
Lemma:Every face of any MBR contains at least one point of an
actual spatial object 如图:

二、距离度量MINDIST和MINMAXDIST
为了减少计算量,文中的距离都以实际欧式距离的平方为标准。
给定一个查询点p及包含在一个MBR中的空间数据对象O,定义两个距离MINDIST和MINMAXDIST作为最近邻的度量和约束。其中:
MINDIST(P,R): the shortest distance from P to R
MINMAXDIST(P,R):the minimum over all dimensions distance from P to the furthest point of the closest face of the R
Theorem:
1. Any object O in R has distance from P that is at least as large as MINDIST
2.There exists at least one object within R with distance <= to MINMAXDIST
so:
MINDIST(P,R) <= NN(P) <= MINMAXDIST(P,R) (1)
三、MINDIST和MINMAXDIST的计算
MINDIST:
1.查询点p在R内或R的边界上则MINDIST=0
2.查询点p在R外,若最短距离距离(p到R的边)存在,则MINDIST=p到R的边的最短距离
否则,MINDIST=p到R的顶点的最短最短距离。
MINMAXDIST的计算过程:
1.找出与第k轴垂直的并且离查询点p最近的面,记为H
2.选择从查询点p到面H中距离最远的那个点,记为a
3.计算查询点p到点a的距离,记为dk
4.对每个坐标轴重复步骤1-步骤3,记计算所得距离为d1,d2,...dk
5.从所有计算所得距离中选出最小的那一个,即MINMAXDIST
例如:下图中查询点p在外接矩形R之外,根据上面的计算步骤我们可得:
X轴:找到点(4,8,12) 计算p到此点的距离的平方dx=185
y轴:找到点(13,2,12) 计算p到此点的距离的平方dy=313
z轴:找到点(13,8,4) 计算p到ci点的距离的平方dz=210
所以此例中的MINMAXDIST(p,R)=185
下图表示了二维空间中点P与几个最小包含矩形MBR的MINDIST和MINMAXDIST的一个例子。二维空间中共有四个MBR,点P到它们的MINDIST和MINMAxDIST值在图中用箭头标出。如果点P位于MBR内部MINDIST值为0。

下图表示了三维空间中的MINDIST和MINMAXDIST。

四、减枝策略
由以上讨论,剪枝过程按以下三种策略进行:
1.若一个最小包含矩形E的MINDIST值大于另一个最小包含矩形E’的MINMAXDIST值,则最小包含矩形E内不可能包含最近邻对象。所以E可以被忽略。该策略用于向下剪枝。
2.若查询点q到某对象O的距离值大于点q到最小包含矩形E的MINMAXDIST的值则对象O被丢弃。因为最小包含矩形层此时包含距离查询点口更近的对象O’。该策略用于向上剪枝。
3.若最小包含矩形E的MINDIST值大于查询点g到某对象O的距离,则E被丢弃,因为最小包含矩形E内部不可能包含比对象O更近的对象。该策略用于向上剪枝。
尽管规定在向下剪枝时用MINMAXDIST进行判断,然而在某些情况下使用MINDIST效果会更好。例如当R树的结点中不存在死区或者死区很少时,在R树的某一层上MINDIST相对于MINMAxDIST而言是查询点到最近邻对象实际距离的更好估计。此时使用MINDIST可以剪掉更多无关的候选MBR。
五、Branch and Bound算法
该算法从根结点开始向下访问各层MBR。算法中首先假定最近邻距离Nearest为无穷大。随着搜索的下降,对每个最新访问的非叶结点首先计算出其中所有的MBR的MINDIST值,并将这些值排序后放入活动分支链表ABL(Active
Branch
List)中,接着对ABL运用剪枝策略1和策略2来移除不必要的分支。算法在ABL上重复进行直至ABL为空。每次重复过程中都选择链表中的下一个分支,并在与该分支的MBR相应的结点上递归进行以上过程。对于叶结点算法对每个对象调用一个特定类型的距离函数,并将计算出的值逐个与Nearest比较,选择其中更小的值替换Nearest。在递归过程返回时使用这个新的最近邻距离的估计值作为判断条件,采用策略3剪枝以移除ABL中所有MINDIST值大子Nearest的MBR所在的分支。
算法伪代码:

参考:
Nearest Neighborhood Queries.Nick Roussopoulos等.
http://www.doc88.com/p-146668818114.html
http://zh.scribd.com/doc/73414427/32/Fig-4-4-Example-of-MINDIST-and-MINMAXDIST
基于R-Tree的最近邻查询的更多相关文章
- 基于R树索引的点面关系判断以及效率优化统计
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在之前的博客中,我分别介绍了基于网格的空间索引(http:// ...
- 基于Impala平台打造交互查询系统
本文来自网易云社区 原创: 蒋鸿翔 DataFunTalk 本文根据网易大数据蒋鸿翔老师DataFun Talk--"大数据从底层处理到数据驱动业务"中分享的<基于Impal ...
- SQLite R*Tree 模块测试
目录 SQLite R*Tree 模块测试 1.SQLite R*Tree 模块特性简介 2.SQLite R*Tree 模块简单测试代码 SQLite R*Tree 模块测试 相关参考: MySQL ...
- 【转载】 使用Anemometer基于pt-query-digest将MySQL慢查询可视化
原文地址:使用Anemometer基于pt-query-digest将MySQL慢查询可视化 作者:84223932 本文主要介绍使用Anemometer基于pt-query-digest将MySQL ...
- 统计学习导论:基于R应用——第二章习题
目前在看统计学习导论:基于R应用,觉得这本书非常适合入门,打算把课后习题全部做一遍,记录在此博客中. 第二章习题 1. (a) 当样本量n非常大,预测变量数p很小时,这样容易欠拟合,所以一个光滑度更高 ...
- 概率图模型 基于R语言 这本书中的第一个R语言程序
概率图模型 基于R语言 这本书中的第一个R语言程序 prior <- c(working =0.99,broken =0.01) likelihood <- rbind(working = ...
- 基于R语言的时间序列指数模型
时间序列: (或称动态数列)是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列.时间序列分析的主要目的是根据已有的历史数据对未来进行预测.(百度百科) 主要考虑的因素: 1.长期趋势(Lon ...
- 基于R语言的ARIMA模型
A IMA模型是一种著名的时间序列预测方法,主要是指将非平稳时间序列转化为平稳时间序列,然后将因变量仅对它的滞后值以及随机误差项的现值和滞后值进行回归所建立的模型.ARIMA模型根据原序列是否平稳以及 ...
- django之 使用views.py里面的函数对表进行增删改查 内容(models.py中表的创建、views.py中函数的使用,基于对象的跨表查询)
models之对于表的创建有以下几种: 一对一:ForeignKey("Author",unique=True), OneToOneField("Author" ...
随机推荐
- abaqus二次开发概述
说明 abaqus二次开发概述 导语 用户子程序特点 abaqus用户程序接口与调用方式 abaqus用户子程序分类 常用用户子程序介绍 Refence 说明 本系列文章本人基本没有原创贡献,都是在学 ...
- html中注释的问题
在修改jsp页面的时候遇到了一个有点难懂的注释,mark一下 <script> <!-- alert("js code"); //--> </scri ...
- verilog RTL编程实践之四
1.verilog平时三个级别: 1.gate level: and or not xor 2.RTL level: reg comb seq 3.behavior:+ – * / 2.system ...
- 在centos7中为php7安装redis扩展
在此之前一直是用php5.6,安装redis也没遇到啥问题,嗖嗖的就安装上了 更新php版本到php7后,编译的时候报错 include <ext/standard/php_smart_str. ...
- (转)automaticallyAdjustsScrollViewInsets(个人认为iOS7中略坑爹的属性)
转自http://m.blog.csdn.net/blog/humingtao2013/27662093 automaticallyAdjustsScrollViewInsets(个人认为iOS7中略 ...
- u-boot顶层Makefile分析
1.u-boot制作命令 make forlinx_nand_ram256_config: make all; 2.顶层mkconfig分析,参考 U-BOOT顶层目录mkconfig分析 mkcon ...
- PAT Basic 1067
1067 试密码 当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死.本题就请你实现这个小功能. 输入格式: 输入在第一行给出一个密码(长度不超过 20 ...
- PAT Basic 1019
1019 数字黑洞 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有“数字 ...
- bash中的算术运算
bash中的算术运算 +, -, *, /, % 实现算术运算: (1) let var=算术表达式 (2) var=$[算术表达式] ...
- Ubuntu新装系统要装软件
1. 在虚拟机中新安装系统的时候,通常因为时间过了很长,软件有更新之后,安装vim的时候会出错,因此,装完系统先要做的: cd /var/lib/dpkg/updates/ ls sudo apt-g ...