一种多维正交区域上基于属性的范围查询方法与流程

文档序号:15144250发布日期:2018-08-10 20:15阅读:181来源:国知局

本发明属于计算几何的技术领域,具体涉及一种多维正交区域上基于属性的范围查询方法。



背景技术:

范围查询与搜索是计算几何的基本问题之一。它出现在应用领域,包括地理信息系统,计算机图形学,计算机辅助设计,空间数据库和时间序列数据库等。范围查询与搜索包括不同类型的问题,例如范围计数、范围报告、空虚查询和优化查询等。

任意给定一个d维网格,网格中的每个点为0或1,表示该网格点某属性为真或假。本方法中,给定d维(d≥1)输入位矩阵a,通过对a进行预处理,使得对于a的任何区域r,都可以有效地回答r中是否包含1,由此解决基于属性的范围查询问题。方法考虑r的正交形状,包括一维至多维的情况,并且提供具有常数时间(相同维度)的空间有效的确定性算法,算法的复杂度分析基于word-ram模型。取决于算法的不同,a所占位数的空间可以是亚线性的,线性的或近似线性的。

传统的方法可以使用诸如平衡二叉搜索树、kd树、四叉树、范围树、分区树和切割树的数据结构来解决基于属性的范围查询问题,这取决于输入的比特1的位置。也有一些方法使用overmars的数据结构来解决该问题,该数据结构使用优先搜索树、y快速尝试和q快速尝试,并将整个网格作为输入。然而d≥2时,在最坏的情况下,这些数据结构至少需要多重对数的查询时间,并且占据近似线性的空间。

基于属性的范围查询问题也可以通过基于属性的范围偏序和查询(rangepartialsumquery)与范围最小值查询(rangeminimumquery)来解决。现阶段已有一些方法来解决1维和2维的情况,但无法确认是否能推广至占据线性空间的3维或更高维度。也可以使用等级查询来解决该问题,但无法确定其是否适用于2维和更高维度。

现阶段,解决基于属性的范围查询问题的典型方法是由farzan等人提出的。该方法设计了一种数据结构,以便在所有维度的常量时间内解答正交秩查询。方法呈现简单的线性空间结构和较为复杂但是熵有限的结构。



技术实现要素:

本发明的目的在于提供一种普适性强,占据空间少,查询时间短的多维正交区域上基于属性的范围查询方法。

定义1,网格点属性:任意给定一个d维网格,网格中的每个点为0或1,表示该网格点某属性为真或假。

定义2,基于属性的范围查询问题:给定一个d维空间,d为一个常数,空间上任意的点对某属性可能为真或为假,对于该d维空间上任意的一个正交区域,判断该区域内某属性是否为真,即是否包含某属性为真的点。

定义3,输入位矩阵a[0…n-1],n∈[1,2w),w是机器位宽大小(即字的大小),这里假定n是2的偶数幂。

定义4,范围(i,j)上基于属性的范围查询定义为r1q(i,j),则r1q(i,j)就是查询子矩阵a[i…j]中是否存在点1。

本发明提供的多维正交区域上基于属性的范围查询方法,分为1维基于属性的范围查询和多维基于属性的范围查询两个部分:

一、1维基于属性的范围查询的具体步骤如下:

(一)预处理:设输入位矩阵a有个字。对于每个p∈[0,logm],构造两个大小为的数组lp和rp。令w(i)表示a中的第i(i∈[0,m-1])个字。

定义lp如下:如果w(i)为1,l0[i]为0,反之为1。且有:

rp公式类似得出:

数组元素lp[i]存储从a开始测量2p个连续字的第i个块中包含最左边的1的距离。而数组元素rp[i]存储从a结尾测量2p个连续字的第i个块中包含最右边的1的距离。lp[i]=2p(rp[i]=2p)意味着a的2p个连续字中的第i个块不包含1。

(二)执行查询:为了回答r1q(i,j),考虑两种情况:

(1)字内查询:如果(i,j)位于一个字内,则使用位偏移来得到基于属性的范围查询结果。

(2)字间查询:如果(i,j)跨越多个字,则将查询分为三个子查询:

(a)从i到其字结尾的基于属性的范围查询;

(b)包含i的字和包含j的字之间的基于属性的范围查询;

(c)从包含j的字开始到j的基于属性的范围查询。

当且仅当三个子查询中的至少一个的基于属性的范围查询的结果为1时,字间查询的答案为1。

第一和第三个子查询是字内查询,可以使用位偏移得到结果。假设包含索引i和j的字分别为i和j,且由r1ql0(i+1,j-1)表示第二个子查询:使用j-i-1的最高有效位msb,找出最大的整数p,使得2p≤j-i-1。

将r1ql0(i+1,j-1)分解为以下两个大小为2p的重叠查询:r1ql0(i+1,i+2p)和r1ql0(j-2p,j-1)。如果这两个范围中的任一个包含1,则原始查询的结果将为1,否则为0。

下面说明如何解答r1ql0(i+1,i+2p)。首先将l0分割成大小为2p的块,然后范围r1ql0(i+1,i+2p)可以被一个或两个连续的块覆盖,假设i+1在第k个块。如果范围在一个块中,通过检查lp[k]<2p是否为真来判断该块是否存在1。如果范围被两个连续的块覆盖,通过检查rp[k]≤(k+1)2p-i和lp[k+1]≤i+2p-(k+1)2p的或值来判断块中是否存在1。

同样地可以说明查询r1ql0(i+1,i+2p)。

二、多维基于属性的范围查询的具体步骤如下:

多维基于属性的范围查询问题定义如下:对于d维(d≥2)基于属性的范围查询,输入位矩阵a的大小为n=nd。为了说明简便,假定维度为2。这里给出一个n=n*n的2维矩阵的方法,但是该方法可以延伸到更高的维度。查询r1q([i1,j1][i2,j2])就是查询子矩阵a[i1…j1][i2…j2]中是否存在1。

(一)预处理:对于每个p,q∈[0,logn],将a分成个块,每个大小为2p×2q,称为(p,q)块。对于每个(p,q)块,构造四个大小为的表,使用tl、bl、tr和br代指左上、左下、右上和右下四个方向:

(1)tlp,q:如果p≤q,tlp,q[i,j][k]表示从当前块的左上角开始高度为k的矩形,k∈[0,2p),必须具有至少tlp,q[i,j][k]的宽度,以包括至少一个1。

(2)bl,tr,br:与tl类似,但表示时分别从左下角,右上角和右下角开始。

在所有情况下,存储值若为max(2p,2q)则表示该块没有1。

(二)执行查询:给定一个查询[i1,j1][i2,j2],找出最大的整数p和q,使得2p≤j1-i1+1和2q≤j2-i2+1。之后原始查询范围就可以分解为四个重叠的(p,q)块,称为功率矩形。每个块都具有原始矩形的四个角中的一个角。如果这四个矩形中的任何一个包含1,则原始查询的答案将为1,否则为0。

接下来解释如何进行功率矩形的基于属性的范围查询:

考虑预处理(p,q)块中a的划分。容易看出,四个大小为2p的功率矩形中每个最多相交四个预处理(p,q)块。定义每个包含在功率矩形和(p,q)块中的矩形叫做分割矩形。可以通过使用表查找来解答分割矩形的基于属性的范围查询,即检查适当(p,q)块的表值是否在功率矩形的边界内。

本发明方法与farzan等人提出的传统方法有以下主要区别和优势。

首先,本方法中,用于解决问题确定性的二次幂方法具有较强的扩展性。在允许一些误差的情况下,当比特1的数量渐近地小于总比特数时,可以将空间显著减小到亚线性大小,并在常量时间给出查询结果。二次幂方法也可以用于在常量时间内直角三角形的基于属性的范围查询,其结果是构成一些多边形查询的基础。方法占用近似线性的空间,和标准方法的空间消耗相比显著减小。

其次,目前还不清楚farzan等人的方法是否可以扩展到使用亚线性空间的一些情况,而本方法不存在类似的限制。

最后,本方法中几乎所有的查询执行方法都可以使用比较、位运算和存储器访问三个简单的操作完成,没有空间和时间范围的渐近增加。这些操作不需要复杂的算术运算,因此可以在更简单的硬件上实现。而farzan等人的方法使用加法、减法和其他cpu开销更大的操作,例如对值的乘法。

附图说明

图1为基于属性的范围查询的解答流程图。流程对输入的d维位矩阵预处理后执行查询算法,在常量时间得到内基于属性的范围查询的结果。

图2为1维基于属性的范围查询的预处理和执行查询流程图。该图是以1维基于属性的范围查询为例,对具体实施中描述的流程进行展示的流程图。块2~块3是预处理部分,之后为执行查询部分。

图3为多维基于属性的范围查询的预处理和执行查询示例图。该图是以多维基于属性的范围查询为例,对具体实施中描述的流程进行补充说明的示例图。a图表示给定查询矩形被分割成4个重叠的功率矩形。b图表示功率矩形被4个分割矩形分成了4部分。

具体实施方式

下面分别以1维基于属性的范围查询和多维基于属性的范围查询为例,进一步介绍本发明。

一、1维基于属性的范围查询

首先说明后文符号的定义:输入位矩阵定义为a[0…n-1],n∈[1,2w),w是机器位宽大小(即字的大小)。定义范围(i,j)上基于属性的范围查询定义为r1q(i,j),则r1q(i,j)就是查询子矩阵a[i…j]中是否存在点1。为了简单起见,这里假定n是2的偶数幂。

(一)预处理:矩阵a有个字。对于每个p∈[0,logm],构造两个大小为的数组lp和rp。令w(i)表示a中的第i(i∈[0,m-1])个字。

定义lp如下:如果w(i)为1,l0[i]为0,反之为1。且有:

rp公式类似得出:

数组元素lp[i]存储从a开始测量2p个连续字的第i个块中包含最左边的1的距离。而数组元素rp[i]存储从a结尾测量2p个连续字的第i个块中包含最右边的1的距离。lp[i]=2p(rp[i]=2p)意味着a的2p个连续字中的第i个块不包含1。

(二)执行查询:为了回答r1q(i,j),我们考虑两种情况:

(1)字内查询:如果(i,j)位于一个字内,则使用位偏移来得到基于属性的范围查询结果。

(2)字间查询:如果(i,j)跨越多个字,则将查询分为三个子查询:

(a)从i到其字结尾的基于属性的范围查询;

(b)包含i的字和包含j的字之间的基于属性的范围查询;

(c)从包含j的字开始到j的基于属性的范围查询。

当且仅当三个子查询中的至少一个的基于属性的范围查询的结果为1时,字间查询的答案为1。

第一和第三个子查询是字内查询,可以使用位偏移得到结果。假设包含索引i和j的字分别为i和j,且由r1ql0(i+1,j-1)表示第二个子查询:使用j-i-1的最高有效位msb,找出最大的整数p,使得2p≤j-i-1。

将r1ql0(i+1,j-1)分解为以下两个大小为2p的重叠查询:r1ql0(i+1,i+2p)和r1ql0(j-2p,j-1)。如果这两个范围中的任一个包含1,则原始查询的结果将为1,否则为0。

下面说明如何解答r1ql0(i+1,i+2p)。首先将l0分割成大小为2p的块,然后范围r1ql0(i+1,i+2p)可以被一个或两个连续的块覆盖,假设i+1在第k个块。如果范围在一个块中,通过检查lp[k]<2p是否为真来判断该块是否存在1。如果范围被两个连续的块覆盖,通过检查rp[k]≤(k+1)2p-i和lp[k+1]≤i+2p-(k+1)2p的或值来判断块中是否存在1。

同样地可以说明查询r1ql0(i+1,i+2p)。

现来分析1维情况下的时间、空间复杂度,以说明本方法的优势。除非另有说明,否则空间默认以比特为单位给出。

我们存储lp和rp数组,对于每个p∈[0,logm],lp(rp)数组存储占据每个p+1比特的个条目。因此,所有lp(rp)阵列占用的总空间是

o(n/logn)。我们使用位msb表中的比特用于支持常量时间的msb查询。因此,空间复杂度为o(n/logn)位,而常规方法中需要线性甚至指数级别的空间复杂度来解决相同的问题。

本方法的预处理时间分析如下:当我们扫描一次a时,预处理p=0的lp和rp表格需要o(n/logn)时间。对于p∈[1,logm]中的每一个p,使用动态规划构建两个表需要时间。因此,构建这两个表的总时间是

本方法的执行查询时间分析如下:执行查询时间主要是通过找到小于或等于特定整数的最大幂来实现的。花费θ(1)时间构建大小为的msb表。查询的其余部分花费θ(1)的时间用来比较和进行表查找。

由此可见,相较于常规方法中对数级别的时间复杂度,本方法在时间和空间复杂度上都有着显著的提高,并且可以推广至更高的维度,而传统方法在高维度上并不适用。

二、多维基于属性的范围查询

多维基于属性的范围查询问题定义如下:对于d维(d≥2)基于属性的范围查询,输入是大小为n=nd的位矩阵a。为了说明简便,假定维度为2。这里给出一个n=n*n的2维矩阵的方法,但是该方法可以延伸到更高的维度。查询r1q([i1,j1][i2,j2])就是查询子矩阵a[i1…j1][i2…j2]中是否存在1。

(一)预处理:对于每个p,q∈[0,logn],我们将a分成个块,每个大小为2p×2q,称为(p,q)块。对于每个(p,q)块,我们构造四个大小为的表,使用tl、bl、tr和br代指左上、左下、右上和右下四个方向:

(1)tlp,q:如果p≤q,tlp,q[i,j][k]表示从当前块的左上角开始高度为k的矩形,k∈[0,2p),必须具有至少tlp,q[i,j][k]的宽度,以包括至少一个1。

(2)bl,tr,br:与tl类似,但表示时分别从左下角,右上角和右下角开始。

在所有情况下,存储值若为max(2p,2q)则表示该块没有1。

(二)执行查询:给定一个查询[i1,j1][i2,j2],找出最大的整数p和q,使得2p≤j1-i1+1和2q≤j2-i2+1。之后原始查询范围就可以分解为四个重叠的(p,q)块,称为功率矩形。每个块都具有原始矩形的四个角中的一个角。如果这四个矩形中的任何一个包含1,则原始查询的答案将为1,否则为0。

接下来解释如何进行功率矩形的基于属性的范围查询:

考虑预处理(p,q)块中a的划分。容易看出,四个大小为2p的功率矩形中每个最多相交四个预处理(p,q)块。定义每个包含在功率矩形和(p,q)块中的矩形叫做分割矩形。可以通过使用表查找来解答分割矩形的基于属性的范围查询,即检查适当(p,q)块的表值是否在功率矩形的边界内。

现来分析多维情况下本法发的空间和时间复杂度,以说明本方法的优势。以2维为例,对于p,q∈[0,logn],大小为2p·2q的块数量为每个块有四个表,每个表存储2min(p,q)个条目,每个条目占用空格的max(p,q)+1比特空间。对于大小为2p·2q的所有块的四个表占用的空间是因此,总空间为∑p,qs(p,q)=θ(n)比特。在d维中,对于大小为n=nd(n∈z+)的给定输入矩阵的方法,所需的总空间计算如下:所有大小为2p1·2p2…2pd的块占用的空间,其中pi∈[0,logn],有:

由于不同高度不同维度的每个块所存储的信息比特数是块的最大尺寸加1的对数,即max(p1,p2,…,pd)+1。所以:

max(p1,p2,…,pd)可以是从0到logn的任何值。由此可知,使用d求和的上述表达式可以通过对于i∈[0,logn]进行分组生成包含i的最大值的所有d元组,将其写为具有单次求和的表达式。从而,

预处理时间复杂度分析如下:在2维中,对于p,q∈[0,logn],动态规划构建4个表需要花费的时间。在d维中,构建一个大小为n=n*n*…*n的超立方体矩阵“数据结构”总预处理时间为:

我们使用动态规划来计算所有块中所有表的信息。上述表达式可以使用分析总空间的方法简化。最后结果为的总预处理时间。

执行查询时间复杂度分析如下:在2维中,我们至多处理了42次表。因此,查询时间是o(1)的。在d维中,至多有2d个功率超矩形。每个功率超矩形有至多2d个分割超矩形,并且处理每个坐标需要花费θ(d)的时间。因此,查询时间为o(4dd)。

常规方法中,大部分方案并不能无条件地推广至多维的情况。并且在有限制的多维查询下,常规方法的空间复杂度和时间复杂度会逐渐逼近指数或对数级别。因此,本方案在这两方面具有很大的优势。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1