4.1. 基于扩展MBR重叠的剪枝策略
给定一个drtree数据库节点N个d日,用于N个d日和查询轨迹T型q个,基本修剪策略包括以下两个步骤:
检查N个d日与时间间隔重叠T型q个,如果,然后N个d日应该修剪。
确定MBR与N个d日和MBRT型q个不大于距离阈值d日,如果,然后N个d日应该修剪。
在基本修剪策略的步骤(2)中,虽然基于Mindist的方法可以有效地排除不满足查询条件的轨迹数据,但其计算过程复杂,需要大量的CPU时间。计算Mindist的值时和,它首先确定是否与重叠如果是,那么Mindist的值为0。否则,它需要计算到任何边缘的最小距离到,并选择最小值作为Mindist的值,即计算MBR-to-MBR Mindist需要在线段和矩形之间进行四次Mindist计算。此外,分段到矩形的Mindist计算被细分为六次距离计算。如所示图3,计算线段之间的最小距离时L(左)和矩形M(M),有必要从L(左)到M(M)每个顶点有四个心智主义者M(M)到L(左),然后选择其中的最小值作为结果。因此,如果不与重叠,需要24次距离计算才能获得Mindist的值和. 显然,在两个MBR之间计算Mindist的成本很高,如果可以优化计算成本,查询效率可以显著提高。在计算Mindist的过程中,可以注意到,检查两个MBR是否重叠的成本远小于多重距离计算,只需比较MBR顶点之间的空间位置关系。假设的左下角和右上角的空间坐标是和,的左下角和右上角的空间坐标是和,如果Discriminant(3)的结果为真,则与重叠利用重叠计算的低开销,我们提出了一种基于扩展MBR重叠的剪枝策略来优化计算开销。 首先,我们使用距离阈值d日扩展在二维欧氏空间中,我们可以得到一个覆盖区域形状为圆形矩形。很容易知道,如果drtree数据库节点与重叠然后是介于它和不大于d日然而,由于覆盖面积不是矩形区域,确定与重叠不能仅基于顶点之间的空间位置关系,需要进行额外的计算。考虑到这一点,我们使用外切矩形属于近似,如果不与重叠,则它也不会与因此,我们总结了修剪策略1。
修剪策略 1 给定drtree节点Nd日和查询轨迹Tq个,距离阈值d,如果,然后是Nd日不能包含与查询结果相关的数据,并且应该对其进行修剪.
修剪策略1不涉及复杂的计算,因此可以有效地减少计算开销。然而,与相比,增加了覆盖面积,对于这样的drtree数据库MBR与重叠的节点但不与,修剪策略1无法对其进行修剪。例如,在图4,修剪策略1无法修剪节点N个4因此,使用修剪策略1生成的候选集可能包含更多不相关的候选,这在一定程度上增加了求精的处理开销。 为了克服这个问题,一个直观的方法是进一步检查drtree数据库通过计算Mindist通过了修剪策略1检查的节点。然而,如前所述,Mindist计算需要大量的CPU时间,应该在修剪过程中避免。在这方面,我们认为该属性是一个或多个矩形区域,完全由,如果与其中任何一个重叠,那么此外,为了确保修剪效果,这些矩形区域应完全覆盖。这样的矩形空间区域可以通过扩展每个维度的空间范围来获得通过使用d日。假设的左下角和右上角的坐标是和分别是。因此是和,以及的左下角和右上角的坐标是和很容易知道和被完全覆盖、和被他们完全覆盖。因此,我们得到了修剪策略2。
修剪策略 2 给定查询轨迹Tq个,距离阈值d,drtree节点Nd日已通过修剪策略1的检查。如果,则Minist在M(N)之间的值d日)和M(Tq个)不大于d。否则,我们应该计算确定是否修剪Nd日.
例如,在图4,个节点N个三和N个5与…重叠,无需修剪,而节点N个2和N个4不要与重叠和,有必要进一步计算Mindist的值以决定是否修剪N个2和N个4. 综上所述,我们将这种结合了剪枝策略1和剪枝策略2的方法命名为扩展的基于MBR重叠的剪枝策略(EMOB剪枝策略),算法1给出了其详细的流程。遍历每个drtree公司节点N个d日。如果返回值为true,则N个d日不应修剪。否则,N个d日应该修剪一下。算法的一般流程如下:
算法首先确定N个d日与时间间隔重叠T型q个。如果两者之间存在重叠,算法将执行下一步,否则返回false(第1行到第3行)。
是否与重叠已选中。如果存在,算法将继续下一步。否则,返回false(第4行到第6行)。
算法判断是否与重叠或。如果不存在重叠,将执行下一步。否则返回true(第7行到第9行)。
是否不大于d日已选中。如果满足以下条件,则返回值为true。否则返回false(第10行到第14行)。
算法1。EMOB修剪策略 |
输入:查询轨迹T型q个,drtree数据库节点N个d日,距离阈值d日; 输出:真正的价值意味着保留N个d日,假值表示修剪N个d日;- 1
如果然后 - 2
返回false; - 三
结尾 - 4
如果然后 - 5
返回false; - 6
结尾 - 7
如果然后 - 8
返回true; - 9
结尾 - 10
如果然后 - 11
返回false; - 12
其他的 - 13
返回true; - 14
结尾
|
与基本修剪策略一样,当T型q个用作修剪引用对象。因此,我们的方法适用于更高精度的修剪场合。在第4.3节,我们将在最佳优先遍历算法中应用EMOB剪枝策略。 4.3. 最佳优先遍历算法
我们设计了一个最佳优先遍历算法,该算法遍历drtree数据库和qrtree树同时处理修剪过程。与遍历drtree数据库仅此一项,它就可以通过访问较少的节点来生成准确的结果。其基本原理是根据访问对象的高度选择下一次迭代的访问对象drtree数据库节点和qrtree树节点。随着迭代次数的增加,修剪精度不断提高,最终会为每个轨迹段生成一组候选轨迹段T型q个.
为了支持最佳首次遍历算法,我们使用一个第一优先级队列(FirstPQ)和多个次优先级队列(SecPQ)来记录遍历过程中的中间结果[18]. FirstPQ用于控制qrtree树节点,SecPQ用于控制drtree公司节点。首先,介绍了FirstPQ条目(F-entry)和SecPQ条目的数据结构。 定义 3 每个F条目的属性如下所述:
- (1)
节点Nq个-qrtree节点,可以是索引节点或轨迹段;
- (2)
高度hq个-距离N的高度q个到qrtree的轨迹段层。如果,然后是Nq个是轨迹段。此外,FirstPQ中的F条目按h排序q个值(从最大到最小).
- (3)
时间戳tq个-N的时间间隔的起始时间戳q个.此外,tq个当两个F条目具有相同的h时,是排序F条目的次要关键字q个值,它们按t排序q个值(从最小到最大).
- (4)
SecPQ SPQ-记录通过N修剪检查的qrtree节点的SecPQq个.
定义 4 每个S条目的属性描述如下:
- (1)
节点Nd日-drtree节点,可以是索引节点或轨迹段;
- (2)
高度hd日-距离N的高度d日到drtree的轨迹段层。如果,然后是Nd日是轨迹段。此外,SecPQ中的S条目按h排序d日值(从最大到最小).
- (3)
时间戳td日-时间间隔N的开始时间戳d日.此外,td日当两个S条目具有相同的h时,是用于排序S条目的次要关键字d日值,它们按t排序d日值(从最小到最大).
算法2给出了最佳第一遍历算法的详细流程,它分为初始化(第1行到第8行)和迭代(第9行到第19行)两个步骤,并使用集合Ps公司收集所有修剪结果。
在初始化步骤中,E3DR树qrtree(qrtree)首先为查询轨迹创建T型q个(第1行)。A秒PQ标准贯标质量和FirstPQ首件鉴定然后初始化(第2行到第3行)。接下来,的根节点qrtree树和drtree数据库并执行修剪检查。如果的根节点drtree数据库不进行修剪,创建S条目和F条目并将其插入标准贯标质量和首件鉴定分别是。否则,算法结束(第4行到第8行)。
对于while循环的每次迭代,第一个F条目铁1从退出队列首件鉴定和头部S入口东南方1的铁1.SPQ(标准贯入质量)也会在不出列的情况下进行检查(第10行到第11行)。基于铁1.小时q个和标准高度d日,决定是否遍历qrtree树,以遍历drtree数据库或将修剪结果添加到Ps公司,三个案例的处理如下:
案例1(至少一个铁1.小时q个和东南方1.小时d日不是0,并且-):的子节点铁1.Nq个由函数TRA-Q遍历(首件鉴定,铁1,d日),当访问每个子节点时,将对drtree数据库中每个S条目的节点铁1.标准贯标质量(第12至13行)。函数TRA-Q的伪代码(首件鉴定,铁1,d日)如算法3所示。
案例2(至少一个铁1.小时q个和东南方1.小时d日不是0,并且):的子节点东南方1.N个d日由功能TRA-D遍历(首件鉴定,铁1,d日),并且在访问每个子节点时执行修剪检查(第14行到第15行)。函数TRA-D的伪代码(首件鉴定,铁1,d日)如算法4所示。
案例3(两者铁1.小时q个和东南方1.小时d日为0):即两者铁1.N个q个和东南方1.N个d日是轨迹段。此外,根据SecPQ的排序规则drtree数据库中任何S条目的节点铁1.标准贯标质量也是一个轨迹段,是铁1.N个q个因此,铁1可以视为修剪结果并添加到Ps公司(第16至17行)。
算法2。最佳优先遍历算法 |
输入:查询轨迹T型q个,距离阈值d日,drtree数据库; 输出:修剪结果Ps公司;- 1
qrtree树←为轨迹创建E3DR-树T型q个; - 2
标准贯标质量←初始化SecPQ实例; - 三
首件鉴定←初始化FirstPQ的一个实例; - 4
N个d日←根(drtree数据库); - 5
N个q个←根(qrtree树); - 6
如果EMOB公司(N个d日,N个q个,d日)=真然后 - 7
标准贯标质量.排队((N个d日,H(H)(N个d日),TS公司(N个d日))); - 8
首件鉴定.排队((N个q个,H(H)(N个q个),TS公司(N个q个),标准贯标质量)); - 9
虽然 做 - 10
铁1←首件鉴定.dequeue(); - 11
东南方1←铁1.标准贯标质量.getFirst(); - 12
如果 然后 - 13
TRA-Q公司(首件鉴定,铁1,d日); - 14
否则,如果 然后 - 15
TRA-D型(首件鉴定,铁1,d日); - 16
否则,如果 然后 - 17
Ps公司.添加(铁1); - 18
结尾 - 19
循环结束 - 20
结尾 - 21
返回Ps公司;
|
在函数TRA-Q中(首件鉴定,铁1,d日),对于每个子节点C类q个节点的铁1.N个q个,执行以下处理:
算法3。TRA-Q公司(首件鉴定,铁1,d日) |
输入:第一次资格预审首件鉴定,F项铁1,距离阈值d日; 输出:无效的;- 1
对于每个子节点C类q个属于铁1.N个q个 做 - 2
CSPQ公司←初始化SecPQ实例; - 三
对于每个条目cse公司属于铁1.标准贯标质量 做 - 4
如果EMOB公司(cse公司。N个d日,C类q个,d日)=真然后 - 5
CSPQ公司.排队(cse公司); - 6
结尾 - 7
外循环 - 8
首件鉴定.排队((C类q个,H(H)(C类q个),TS公司(C类q个),CSPQ公司)); - 9
外循环
|
功能TRA-D的过程(首件鉴定,铁1,d日)如下所示:
算法4。TRA-D型(首件鉴定,铁1,d日) |
输入:第一次资格预审首件鉴定,F输入铁1,距离阈值d日; 输出:无效的;- 1
东南方1←铁1.标准贯标质量.dequeue(); - 2
对于每个子节点C类d日属于东南方1.N个d日 做 - 三
如果EMOB公司(C类d日,铁1.N个q个,d日)=真然后 - 4
铁1.标准贯标质量.排队(C类d日,H(H)(C类d日),TS公司(C类d日)); - 5
结尾 - 6
外循环 - 7
首件鉴定.排队(铁1);
|
当中没有F项时,最好的第一次遍历算法结束首件鉴定.根据F项结构Ps公司记录的查询轨迹段T型q个和一组候选轨迹段,以及Ps公司根据查询轨迹段的时间顺序进行排序,因此在细化步骤中Ps公司将按时间顺序自然处理,从而有效地减少排序的处理开销。与修剪方法相比drtree数据库以整个查询轨迹为修剪参考对象的节点,最佳优先级遍历算法可以生成更准确的候选结果,并减少细化步骤所需的开销。此外,由于我们的方法采用遍历策略drtree数据库和qrtree树同时,它确保drtree数据库在获得高精度修剪结果的情况下,不会多次遍历,因此访问索引节点的成本大大降低。
修剪步骤完成后,需要对候选轨迹段进行细化以获得最终结果。由于我们的研究重点是剪枝优化,所以这里只简单解释了细化步骤,历史连续查询的细化步骤的详细过程可以在文献中找到[6]. 在修剪结果中Ps公司,对于每个轨迹段我q个属于T型q个,假设其候选轨迹段之一是我d日首先,我d日进行插值以获得时间间隔钛q个与…重叠我q个.然后是我d日和我q个中的任何时间实例钛q个计算得出,该距离的平方是以时间为参数的二次表达式。接下来,距离阈值d日将其引入表达式以获得二次方程不等式,求解该不等式以获得时间间隔钛c(c)其中我d日和我q个小于d日.如果钛q个与重叠钛c(c)(将重叠时间间隔命名为钛o(o)),然后是移动对象我d日.oid类是的查询结果钛o(o).在所有数据之后Ps公司处理后,将所有查询结果返回给用户,查询结束。