CN102456073A - 一种部分最值查询方法 - Google Patents
一种部分最值查询方法 Download PDFInfo
- Publication number
- CN102456073A CN102456073A CN2011103433097A CN201110343309A CN102456073A CN 102456073 A CN102456073 A CN 102456073A CN 2011103433097 A CN2011103433097 A CN 2011103433097A CN 201110343309 A CN201110343309 A CN 201110343309A CN 102456073 A CN102456073 A CN 102456073A
- Authority
- CN
- China
- Prior art keywords
- rbs
- data structure
- ordering
- worth
- query
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种部分最值查询方法,包括下列步骤:1)确定待查询数据结构中符合部分最值查询条件的数据单元,从而获得初始查询范围;2)从所述数据结构的排序决策树的根节点开始,逐层向下搜索所述部分最值位于哪一个排序决策树的节点内,直至得出部分最值查询结果。本发明的查询效率高,能够显著缩短查询响应时间,实现快速查询。
Description
技术领域
本发明涉及数据查询技术领域,具体地说,本发明涉及一种部分最值查询方法。
背景技术
在大规模网络安全信息系统态势分析的过程中,经常会遇到以下的数据库查询操作:查询当前网段中漏洞最多的主机或者查询某个局域网中受攻击最多的主机等,此类查询通常是随着需求不同而不断变化的。而且这些数据库查询操作有个共同的特点,即它们都是针对数据库中的部分记录进行统计,如“当前网段”或“某个局域网”,此类操作都可以归到部分查询技术中。而部分最值查询是部分查询技术中的一个重要方面。
部分最值查询是指规定了部分维属性取值的基础上,在这些维属性取值所确定的数据单元中查询满足条件的数据,并按照要求对选取的数据单元进行聚集操作(MAX或MIN)。以网络安全态势分析中多维数据立方体为例:假设一个数据立方体有3个维属性:时间维、地点维和网络攻击种类维;度量属性有:攻击的数目。其中,度量属性一般就是数值信息。例如查询时间维={2010年4月,2010年5月},地点={长沙,武汉,广州},攻击种类={木马,蠕虫}时攻击的数目。这就是一个典型的部分最值查询的例子。
现有技术中,部分最值查询通常的方法就是为查询的数据建立一个排序索引,然后顺序地搜索该索引的各数据单元,并检验索引数据单元内数值所指示的数组D的数据单元是否属于查询范围。这种方法结构简单,实现较容易,但由于这种方法需要顺序地搜索索引的每个数据单元,如果查询目标位于索引的靠后部分,则会导致响应时间较长,难以实现快速查询。总得来说,这种基于排序索引的查询方法效率较低。
因此,当前迫切需要一种具有更高效率的部分最值查询方法,以显著缩短查询响应时间,实现快速查询。
发明内容
本发明的目的是一种效率高,能够显著缩短查询响应时间,实现快速查询的部分最值查询方法。
为实现上述发明目的,本发明提供了部分最值查询方法,包括下列步骤:
1)确定部分最值查询的初始查询范围;
2)从待查询数据结构的排序决策树的根节点开始,逐层向下搜索所述部分最值位于哪一个排序决策树的节点内,直至得出部分最值查询结果;
所述数据结构的排序决策树的定义如下:
数据结构D是一个具有m个数据单元的数据结构,m>1,R是该数据结构的排序索引,则D的排序对分符RBS是一个比特向量VS=(b0b1...bm-1),满足:
其中,第一状态与第二状态互为反状态;
数据结构D的排序决策树是满足下列条件的二叉树:
(1)树的根节点是RBS0:m-1;
(2)树的叶节点是RBSv:u,满足u-v=1;
(3)RBSv:u的左孩子节点是RBSv:v+w-1,w是RBSv:u的权重(注:RBSv:u的权重为[(u-v+1)/2)]);
(4)当RBSv:u的权重大于2时,RBSv:u的右孩子节点是RBS(v+w):u,否则右孩子不存在。
以上RBS的下标对应于排序区间,RBSi:j表示在数据结构D中排序在第i至第j的数据单元所组成的子数据结构Di:j所对应的RBS,其中0<i<j<m-1。
其中,所述待查询数据结构为数组。
其中,所述步骤1)还包括根据部分最值查询的初始查询范围确定初始查询向量。
其中,所述第一状态为1,所述第二状态为0;
所述步骤2)包括下列子步骤:
21)对待查询的数组,读取该数组的排序决策树,取其根节点作为当前节点,将初始查询向量作为当前查询向量;
22)对当前节点的排序对分符和当前查询向量进行按位与运算得到判据向量V,如果|V|=1,则向量V中值为1的比特位所对应的数据单元即为部分最值所在的数据单元,本次部分最值查询结束;如果|V|=0或|V|>1,则执行步骤23);其中,|V|表示判据向量V的权重,在查询部分最大值时,判据向量V的权重是V中值为1的比特位的个数,在查询部分最小值时,判据向量V的权重是V中值为0的比特位的个数;
23)如果|V|>1则部分最值位于左孩子节点中,则取左孩子节点作为下一层搜索的目标节点;如果|V|=0则部分最值位于右孩子节点中,则取右孩子节点作为下一层搜索的目标节点;
根据当前节点的排序对分符和|V|的值,重新确定缩小范围后的部分最值查询范围,从而更新查询向量;
24)将步骤23)所确定的进行下一层搜索的目标节点作为新的当前节点,以及步骤23)所得出的更新后的查询向量作为当前查询向量,然后返回执行步骤22),这样不断循环,直至查询出所需的部分最值。
其中,所述步骤23)中,如果|V|>1,则按当前节点的排序对分符中值为1的位对V进行截取,得到新的查询向量;如果|V|=0,则按当前节点的排序对分符按位取反后得到的值为1的位对V进行截取,得到新的查询向量。
本发明还提供了一种对数据结构D构建排序决策树的方法,包括下列步骤:
1)对数据结构D排序并构建排序索引R,根据R将数据结构D中数值大小排在前半部分的数据单元对应的排序对分符RBS比特位置为第一状态,后半部分的数据单元对应的RBS比特位置为第二状态;从而构建排序对分符RBS作为根节点;第一状态与第二状态互为反状态;
2)取数据结构D作为当前数据结构D0;
3)检测当前数据结构D0的排序对分符RBS中第一状态的比特位的个数,如果大于1则继续执行步骤4),否则停止执行后续步骤;
4)将当前数据结构D0拆分,构建新的数据结构Dleft和Dright,其中Dleft由当前数据结构D0中数值大小排在前半部分的数据单元组成,Dright由当前数组D0中数值大小排在后半部分的数据单元组成;
分别构建新的数据结构Dleft和Dright的排序索引Rleft和Rright,然后构建对应的排序对分符RBSleft和RBSright,RBSleft作为当前数据结构D0对应的排序决策树节点的左孩子节点,RBSright作为当前数据结构D0对应的排序决策树节点的右孩子节点;
5)分别将新的数据结构Dleft和Dright作为当前数据结构D0并重新执行步骤3),直至所有当前数据结构D0的排序对分符RBS中第一状态的比特位的个数不大于1,此时排序决策树的所有节点均构造完成。
其中,所述数据结构为数组。
相对于现有技术,本发明具有下列技术效果:
本发明的查询效率高,能够显著缩短查询响应时间,实现快速查询。
附图说明
图1示出了一个排序索引结构的示例;
图2示出了本发明一个RD-Rree的示例;
图3示出了本发明一个RD-Tree的搜索过程的示例;
图4示出了本发明一个RD-Tree的搜索过程中|V|=0的情况的示例;
图5示出了本发明一个得出搜索结果返回值的方法示例。
具体实施方式
现有技术中,最值问题通常按下面的方式描述。
假设D是一个大小为n的数组,数组的索引从0到n-1。设N={0,1,...,n-1}为数组D索引的集合。给定一个查询I,它由D中的部分索引域的值来表示,关于数组D中部分数据的最值查询问题,有如下定义:
假设存在一个大小为n的数组D,定义D的一个排序索引R,R的大小为n,其中R[i]所对应的值即是数组D的索引值,且满足:
如果i<j,则D[R[i]]≥D[R[j]],其中,i,j∈I。
图1是展示了一个排序索引结构的示例。其中,数组D中包含12个数值,在这个例子中,数组D的最大值是D[R[0]],其最小值是D[R[11]]。在数组D中,按从大到小的顺寻,第i大的数所对应的索引值即R[i-1],所对应的D中的数即为D[R[i-1]]。
假设D是一个m大小的数组,R是D的排序索引。对于一个部分最大值查询I,其结果满足以下属性:
Pmax(D,I)=D[R[k]],如果R[k]∈I,则不存在这样j,R[j]∈I并且j<k。
对于一个部分最小值查询I,其结果满足以下属性:
Pmin(D,I)=D[R[k]],如果R[k]∈I,则不存在这样j,R[j]∈I并且j>k。
与现有技术的基于索引的部分最值查询方案不同,本发明提出了一种基于排序决策树(Rank Decision Tree,简称RD-Tree)的部分最值查询方案。一般来说,部分最值查询的查询对象是存储在计算机中的数组,数组是一种典型的数据结构。一般地,数组中的每个数据单元均具有维度属性和度量属性。其中度量属性一般为数值信息。由于部分最值查询过程主要涉及的是度量属性(即数值信息),因此,为方便描述,下文的一些叙述中忽略了各数据单元的维度属性而只给出度量属性(即数值信息),这并不影响对本发明的理解。
下面,首先介绍本发明中所提出的RD-Tree。
RD-Tree是一个基于待查询数组生成的二叉树,该二叉树的每个节点存储一个排序对分符(Rank Bisection Signature,简称RBS)。对于一个m大小的数组D,它的RBS是一个m位的比特向量,该比特向量中的比特位表示对应的数组D中数据单元的值是在排序队列中前半部分还是后半部分,例如:比特位为1表示在前半部分,0表示在后半部分。
图2示出了一个RD-Tree的实例,参考图2,可以看出数组D具有8个数据单元,第0至7数据单元的数值信息依次为8、2、16、12、6、10、14、4。数组D的RBS为00110110,其中第2、3、5、6比特位为1,表示第2、3、5、6数据单元位于数组D排序的前半部分,第0、1、4、7比特位为0,表示第0、1、4、7数据单元位于数组D排序的后半部分。RD-Tree的根节点存储整个待查询数组D的RBS,而其它节点则存储数组D的子数组的RBS。为方便描述,这里为RBS引入下标,将在数组D中排序在第i至第j的数据单元所组成的子数组记为Di:j,Di:j的RBS记为RBSi:j,其中0<i<j<m-1。参考图2,根节点的左孩子节点存储RBS0:3,即数组D中排序在前半部分的数据单元所组成的子数组D0:3的RBS,右孩子节点存储RBS4:7,即数组D中排序在后半部分的数据单元所组成的子数组D4:7的RBS。根节点的左孩子节点进一步分叉形成2个叶节点,分别记录数组D0:3中排序在前半部分的数据单元所组成的子数组D0:1的RBS,以及数组D0:3中排序在后半部分的数据单元所组成的子数组D2:3的RBS。根节点的右孩子节点也进一步分叉形成2个叶节点,分别记录数组D4:7中排序在前半部分的数据单元所组成的子数组D4:5的RBS,以及数组D4:7中排序在后半部分的数据单元所组成的子数组D6:7的RBS。
下面给出RD-Tree的定义。
设D是一个大小(即长度)为m(m>1)的数组,R是该数组的排序索引。则D的排序对分符RBS是一个比特向量VS=(b0b1...bm-1),满足:
设D是一个大小为m(m>1)的数组,则D的RD-Tree是满足下列条件的一个二叉树:
(1)树的根节点是RBS0:m-1;
(2)树的叶节点是RBSv:u,满足u-v=1;
(3)RBSv:u的左孩子节点是RBSv:v+w-1,w是RBSv:u的权重(注:RBSv:u的权重为[(u-v+1)/2)]);
(4)当RBSv:u的权重大于2时,RBSv:u的右孩子节点是RBS(v+w):u,否则右孩子不存在。
以上RBS的下标对应于排序区间,RBSi:j表示在数组D中排序在第i至第j的数据单元所组成的子数组Di:j所对应的RBS,其中0<i<j<m-1。
基于上述定义,下面给出一个已知数组D构建RD-Tree的具体例子,在这个例子中,构建RD-Tree包括下列步骤:
1、对数组D排序并构建排序索引R,根据R0将数组D0中数值大小排在前半部分的数组元素(即数据单元)对应的RBS比特位置为1,后半部分的数组元素(即数据单元)对应的RBS比特位置为0;从而构建排序对分符RBS作为根节点。
2、取数组D作为当前数组D0。
3、检测当前数组D0的RBS中1的个数,如果大于1则继续执行第4步,否则停止执行后续步骤。
4、将当前数组D0拆分,构建新的数组Dleft和Dright,其中Dleft由当前数组D0中数值大小排在前半部分的数组元素(即RBS比特位为1所对应的数组元素)组成,Dright由当前数组D0中数值大小排在后半部分的数组元素(即RBS比特位为0所对应的数组元素)组成;
分别构建新的数组Dleft和Dright的排序索引Rleft和Rright,然后构建对应的排序对分符RBSleft和RBSright,RBSleft作为当前数组D0对应的RD-Tree节点的左孩子节点,RBSright作为当前数组D0对应的RD-Tree节点的右孩子节点。
5、分别将新的数组Dleft和Dright作为当前数组D0并重新执行步骤3,直至所有当前数组D0的RBS中1的个数不大于1。此时RD-Tree的所有节点均构造完成。
下面结合附图和实施例对本发明做进一步地描述。
根据本发明的一个实施例,提供了一种基于RD-Tree进行部分最值查询方法。在进行部分最值查询前,需要构建待查询的数组的RD-Tree,然后通过搜索RD-Tree对其进行部分最值查询。下面,结合一个具体的数组和RD-Tree,叙述部分最值查询的各个步骤。所述部分最值查询包括下列步骤:
1、确定部分最值(包括最大值或最小值)查询的初始查询范围,即确定是对数组中的哪些数据单元进行部分最值查询,根据部分最值查询的初始查询范围确定初始查询向量。
例如,数组D长度为m,则其查询向量长度也为m,查询向量的每一位对应于数组D的一个数据单元,查询向量中第i位为0,代表数组D第i个数据单元不属于本次部分最值查询的范围,查询向量中第i位为1,则代表数组D第i个数据单元属于本次部分最值查询的范围。其中0<i<m-1。
图3示出了对数组D=[7,5,9,10,3,11,6,15]中的第0,1,4,5,7数据单元进行部分最大值查询的示例。由于查询范围是第0,1,4,5,7数据单元,因此可确定其初始查询向量I0=[11001101]。下文中将继续参照图3的例子进行叙述,以使本实施例更加易于理解。
2、对待查询数组的RD-Tree,取其根节点作为当前节点,将初始查询向量作为当前查询向量I。
参考图3,数组D=[7,5,9,10,3,11,6,15]的RD-Tree根节点中存储RBS=[00110101]。
3、基于当前节点的RBS和当前查询向量I进行按位与运算得到判据向量V。判据向量V是一个位向量,V=(b0b1...bm-1)。判据向量V的权重记为|V|,在部分最大值查询时,判据向量V的权重为V中值为1的比特位的个数,在部分最小值查询时,判据向量V的权重为V中值为0的比特位的个数|。V的长度是V的比特位数。
RBS记录了数组中每个数据单元是属于排序的前半部分还是后半部分的信息,根据对RBS进行查询而得出的判据向量V,可判断出当前是否能直接得出部分最值查询的结果。
对于部分最大值查询,当且仅当只有一个数据单元位于排序的前半部分时,可直接判断该数据单元为部分最大值,本次部分最值查询结束,其余情况下则判断为不能唯一确定部分最大值。也就是说,在计算得到判据向量V后,根据|V|判断是否能唯一确定部分最大值;如果|V|=1,则判据向量V中只有一个比特位为1,这个值为1的比特位所对应的数据单元即为该部分最值所在的数据单元,返回该数据单元所存储的数值信息(度量属性),则本次部分最值查询结束。反之,如果|V|=0或|V|>1,则执行步骤4。
参考图3的例子,RBS1=[00110101],查询向量I1=[11001101],计算V1=RBS1^I1,“^”表示按位与,得出V1=[00000101]。此时|V1|>1,因此不能直接得出部分最大值,需要继续查询。其中下标1表示RBS1、I1、V1为对RD-Tree第1层的进行搜索的RBS、查询向量、判据向量,下文中的类似下标的含义也是本领域技术人员易于理解的,不再赘述。
类似地,对于部分最小值查询,当且仅当只有一个数据单元位于排序的后半部分时,可直接判断该数据单元为部分最小值,本次部分最值查询结束,其余情况下则判断为不能唯一确定部分最小值,需继续执行步骤4。也就是说,在计算得到判据向量V后,根据|V|判断是否能唯一确定部分最小值(注意此时|V|表示V中值为0的比特位的个数);如果|V|=1,则判据向量V中只有一个比特位为0,这个值为0的比特位所对应的数据单元即为该部分最小值所在的数据单元,返回该数据单元所存储的数值信息(度量属性),则本次部分最值查询结束。反之,如果|V|=0或|V|>1,则执行步骤4。
4、根据判据向量V的权重(即|V|的值)判断部分最值是在当前节点的哪一个孩子节点内,将这个孩子节点作为下一层搜索的目标节点。如果|V|>1则部分最值位于左孩子节点中,则取左孩子节点作为下一层搜索的目标节点;如果|V|=0则部分最值位于右孩子节点中,则取右孩子节点作为下一层搜索的目标节点。
根据前述RBS节点和RD-Tree的定义,本领域普通技术人员易于理解,可以根据当前的判据向量V,判断出部分最值是在当前节点的哪一个孩子节点内。根据RD-Tree的定义,左孩子节点对应于前半部分排序区间,右孩子节点对应于后半部分排序区间。如果需要查询的部分最值是部分最大值,则当查询范围内的各个数据单元都位于后半部分排序区间,即查询范围内的各数据单元所对应的RBS位均为0时,该部分最大值在右孩子节点内,也就是说|V|=0时,部分最大值在右孩子节点内。相反地,|V|≠0时,则部分最大值在左孩子节点内。结合图3,可以看出图3示出的例子中,V1=[00000101]。此时|V1|≠0,因此在第1层搜索后,可判断部分最大值在根节点的左孩子节点内,这样便确定了第2层搜索的节点。
类似地,如果需要查询的部分最值是部分最小值,当查询范围内的各个数据单元都位于前半部分排序区间,即查询范围内的各数据单元所对应的RBS位均为1时,部分最小值在左孩子节点内,否则,该部分最小值在右孩子节点内。根据判据向量V,即可以判断出部分最小值是在左孩子节点内还是右孩子节点内,这是本领域技术人员易于理解的。
5、根据当前节点的RBS和|V|的值,重新确定缩小范围后的部分最值查询范围,从而更新查询向量。如果|V|>1,则根据当前节点的RBS相应为1的位对V进行截取,得到新的查询向量I`;如果|V|=0,则根据当前节点的(即RBS按位取反)相应为1的位对V进行截取,得到新的查询向量I。
参考图3,根据上一层的RBS中为1的比特位的位置将V1中位置相同的比特提取出来组成一个新的向量,得到查询向量I2,I2代表的就是满足查询条件的并且排在数组D前半部分的比特位,在本例中I2=[0011]。而RBS2=[0011]。
查询向量实际上是表达部分最值查询的范围,根据RBS和查询向量,可以得出查询向量各个数据单元分别位于前半部分还是后半部分排序区间。如果所查询的是部分最大值,则查询范围缩小到属于原查询范围且位于前半部分排序区间的那些数据单元,如果所查询的是部分最小值,则查询范围缩小到属于原查询范围且位于后半部分排序区间的那些数据单元,这样就可以得出更新后的查询向量,这本领域普通技术人员易于理解的。
6、执行完步骤4和5后,将步骤4所确定的进行下一层搜索的目标节点作为新的当前节点,将步骤5所得出的更新后的查询向量作为当前查询向量,然后返回执行步骤3。这样不断循环,直至查询出所需的部分最值。由于叶节点的RBS只有两个比特位,因此如果搜索到叶节点,则必然可在所述步骤3中找出部分最值。
另外,上述步骤4和步骤5的执行顺序可以互换或者并行执行,这本领域普通技术人员易于理解的。
上述实施例中,由于通过搜索RD-Tree进行部分最值查询,不需要顺序搜索整个排序索引,因此能够快速得到查询结果,大大提高查询的响应时间。
为了更加便于理解,结合图3,完整地描述一次部分最大值查询的实例。
给定数组D=[7,5,9,10,3,11,6,15],其RBS=[00110101],初始查询向量I=[11001101]为例。设V=RBS^I,“^”表示按位与,V代表的即是查询向量中排在数组前半部分的比特位,此例中V=[00000101]。当|V|=1的时候,即找到了部分最大值。当|V|>1时,则要继续查询比较。
|V|>1时基于RD-Tree的搜索的过程如下:
第一层:查询向量I1=[11001101],RBS1=[00110101],V1=I1^RBS1=[00000101],|V1|>1,最大值没有唯一确定,但是已经将查找的范围缩小到两个,继续查询。
第二层:在上一层中已经将查询范围缩小为两个,即V1,如果根据上一层的RBS中为1的比特位的位置将V1中位置相同的比特提取出来组成一个新的向量,得到查询向量I2,I2代表的就是满足查询条件的并且排在数组D前半部分的比特位,在本例中I2=[0011]。而RBS2=[0011],V2=I2^RBS2=[0011],|V2|>1,最大值仍然没有唯一确定,继续查询。
第三层:仍然根据RBS2中为1的比特的位置将V2中位置相同的比特提取出来组成一个新的查询向量I3=[11],而RBS3=[01],V3=I3^RBS3=[01],此时|V3|=1,最大值唯一确定,查询结束。
另外,图4示出了|V|=0情况下的部分最大值查询的一个具体实例。
假设初始查询向量I=[11001010],则V=RBS^I=[00000000],即|V|=0。很显然,根据I,在数组D中要查询的是[7,5,3,6]这四个数中的最大值,而在数组D的RD-Tree中,这4个数位第二层的右孩子节点,而处于右孩子节点中的数都是排在后半部分的数值,因此当|V|=0要对V重新取一次操作,即RBS也要换成右孩子节点的RBS,接下来的搜索过程中,|V|不为0,查询过程与前面的例子一致,不再赘述。
另外,许多情况下,搜索的结果应该返回最值,根据上述的部分最值的搜索过程,在RD-Tree中记录的仅仅是各层RBS的信息,搜索完成之后得到的是RBSn:m,其中的一个比特位对应的数据单元的值是最值。根据最后搜索到的RBSn:m信息在数组中找到相应的部分最值,就解决了搜索结果的返回值问题。RBSn:m是Dn:m的排序对分符,如果n和m都确定,则RBSn:m和Dn:m就能确定。如图5所示,搜索最大值搜索到RBS0:1,而D0:1=[11,15],RBS0:1=[0,1],I3=[11],V3=I3^RBS3=[01],则IMAX=D0:1·V3=15(其中‘·’代表的是向量之间的点乘运算)。当然,返回部分最值并不限于上述方式,本领域技术人员也可以采用其它方式返回部分最值。
另外,上述实施例中,排序对分符RBS的比特位为1,代表该比特位对应的数组D中数据单元的值是在排序队列中前半部分,比特位为0,代表该比特位对应的数组D中数据单元的值是在排序队列中后半部分。但本领域技术人员易于理解,简单地把0,1的含义互换,即在排序对分符RBS中,比特位为1,代表该比特位对应的数组D中数据单元的值是在排序队列中后半部分,比特位为0,代表该比特位对应的数组D中数据单元的值是在排序队列中前半部分,同样可以实现本发明的目的,因此上述方案及其变形也应涵盖在本发明的范畴内。
另外,部分最值查询不一定都是对数组进行查询,也可以扩展到广义的包含数值信息的数据结构中。本领域普通技术人员易于理解,对包含数值信息的数据结构,均可根据前文中提出的数组D的RD-Tree定义来构建相应的RD-Tree,并基于所构建的RD-Tree对该数据结构进行部分最值查询。例如一个数据结构包含某省份木马的威胁程度、木马的描述信息、感染木马主机数量等,在对该省各类型木马数量进行最值查询时,就可以利用本发明提出的部分最值查询方法进行处理。
最后应说明的是,以上实施例仅用以说明本发明的技术方案而非对其限制,并且在应用上可以延伸到其他的修改、变化、应用和实施例,同时认为所有这样的修改、变化、应用、实施例都在本发明的精神和范围内。
Claims (7)
1.一种部分最值查询方法,其特征在于,包括下列步骤:
1)确定部分最值查询的初始查询范围;
2)从待查询数据结构的排序决策树的根节点开始,逐层向下搜索所述部分最值位于哪一个排序决策树的节点内,直至得出部分最值查询结果;
所述数据结构的排序决策树的定义如下:
数据结构D是一个具有m个数据单元的数据结构,m>1,R是该数据结构的排序索引,则D的排序对分符RBS是一个比特向量VS=(b0b1...bm-1),满足:
其中,第一状态与第二状态互为反状态;
数据结构D的排序决策树是满足下列条件的二叉树:
(1)树的根节点是RBS0:m-1;
(2)树的叶节点是RBSv:u,满足u-v=1;
(3)RBSv:u的左孩子节点是RBSv:v+w-1,w是RBSv:u的权重(注:RBSv:u的权重为[(u-v+1)/2)]);
(4)当RBSv:u的权重大于2时,RBSv:u的右孩子节点是RBS(v+w):u,否则右孩子不存在。
以上RBS的下标对应于排序区间,RBSi:j表示在数据结构D中排序在第i至第j的数据单元所组成的子数据结构Di:j所对应的RBS,其中0<i<j<m-1。
2.根据权利要求1所述的部分最值查询方法,其特征在于,所述待查询数据结构为数组。
3.根据权利要求2所述的部分最值查询方法,其特征在于,所述步骤1)还包括根据部分最值查询的初始查询范围确定初始查询向量。
4.根据权利要求3所述的部分最值查询方法,其特征在于,所述第一状态为1,所述第二状态为0;
所述步骤2)包括下列子步骤:
21)对待查询的数组,读取该数组的排序决策树,取其根节点作为当前节点,将初始查询向量作为当前查询向量;
22)对当前节点的排序对分符和当前查询向量进行按位与运算得到判据向量V,如果|V|=1,则向量V中值为1的比特位所对应的数据单元即为部分最值所在的数据单元,本次部分最值查询结束;如果|V|=0或|V|>1,则执行步骤23);其中,|V|表示判据向量V的权重,在查询部分最大值时,判据向量V的权重是V中值为1的比特位的个数,在查询部分最小值时,判据向量V的权重是V中值为0的比特位的个数;
23)如果|V|>1则部分最值位于左孩子节点中,则取左孩子节点作为下一层搜索的目标节点;如果|V|=0则部分最值位于右孩子节点中,则取右孩子节点作为下一层搜索的目标节点;
根据当前节点的排序对分符和|V|的值,重新确定缩小范围后的部分最值查询范围,从而更新查询向量;
24)将步骤23)所确定的进行下一层搜索的目标节点作为新的当前节点,以及步骤23)所得出的更新后的查询向量作为当前查询向量,然后返回执行步骤22),这样不断循环,直至查询出所需的部分最值。
5.根据权利要求4所述的部分最值查询方法,其特征在于,所述步骤23)中,如果|V|>1,则按当前节点的排序对分符中值为1的位对V进行截取,得到新的查询向量;如果|V|=0,则按当前节点的排序对分符按位取反后得到的值为1的位对V进行截取,得到新的查询向量。
6.一种对数据结构D构建排序决策树的方法,其特征在于,包括下列步骤:
1)对数据结构D排序并构建排序索引R,根据R将数据结构D中数值大小排在前半部分的数据单元对应的排序对分符RBS比特位置为第一状态,后半部分的数据单元对应的RBS比特位置为第二状态;从而构建排序对分符RBS作为根节点;第一状态与第二状态互为反状态;
2)取数据结构D作为当前数据结构D0;
3)检测当前数据结构D0的排序对分符RBS中第一状态的比特位的个数,如果大于1则继续执行步骤4),否则停止执行后续步骤;
4)将当前数据结构D0拆分,构建新的数据结构Dleft和Dright,其中Dleft由当前数据结构D0中数值大小排在前半部分的数据单元组成,Dright由当前数组D0中数值大小排在后半部分的数据单元组成;
分别构建新的数据结构Dleft和Dright的排序索引Rleft和Rright,然后构建对应的排序对分符RBSleft和RBSright,RBSleft作为当前数据结构D0对应的排序决策树节点的左孩子节点,RBSright作为当前数据结构D0对应的排序决策树节点的右孩子节点;
5)分别将新的数据结构Dleft和Dright作为当前数据结构D0并重新执行步骤3),直至所有当前数据结构D0的排序对分符RBS中第一状态的比特位的个数不大于1,此时排序决策树的所有节点均构造完成。
7.根据权利要求6所述的部分最值查询方法,其特征在于,所述数据结构为数组。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103433097A CN102456073A (zh) | 2011-11-03 | 2011-11-03 | 一种部分最值查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103433097A CN102456073A (zh) | 2011-11-03 | 2011-11-03 | 一种部分最值查询方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102456073A true CN102456073A (zh) | 2012-05-16 |
Family
ID=46039263
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011103433097A Pending CN102456073A (zh) | 2011-11-03 | 2011-11-03 | 一种部分最值查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102456073A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104765790A (zh) * | 2015-03-24 | 2015-07-08 | 北京大学 | 一种数据查询的方法和装置 |
CN105574344A (zh) * | 2015-12-22 | 2016-05-11 | 常州信息职业技术学院 | 一种金字塔排序算法 |
CN110019736A (zh) * | 2017-12-29 | 2019-07-16 | 北京京东尚科信息技术有限公司 | 基于语言模型的问答匹配方法、系统、设备及存储介质 |
CN113792709A (zh) * | 2021-11-15 | 2021-12-14 | 湖南视觉伟业智能科技有限公司 | 快速大规模人脸识别方法及系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102123149A (zh) * | 2011-03-04 | 2011-07-13 | 哈尔滨工程大学 | 面向服务的大规模网络安全态势评估装置及方法 |
-
2011
- 2011-11-03 CN CN2011103433097A patent/CN102456073A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102123149A (zh) * | 2011-03-04 | 2011-07-13 | 哈尔滨工程大学 | 面向服务的大规模网络安全态势评估装置及方法 |
Non-Patent Citations (1)
Title |
---|
尹洪,杨树强,韩伟红: "一种高效的OLAP最值查询算法", 《信息网络安全》, 31 October 2010 (2010-10-31), pages 62 - 65 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104765790A (zh) * | 2015-03-24 | 2015-07-08 | 北京大学 | 一种数据查询的方法和装置 |
CN104765790B (zh) * | 2015-03-24 | 2019-09-20 | 北京大学 | 一种数据查询的方法和装置 |
CN105574344A (zh) * | 2015-12-22 | 2016-05-11 | 常州信息职业技术学院 | 一种金字塔排序算法 |
CN110019736A (zh) * | 2017-12-29 | 2019-07-16 | 北京京东尚科信息技术有限公司 | 基于语言模型的问答匹配方法、系统、设备及存储介质 |
CN110019736B (zh) * | 2017-12-29 | 2021-10-01 | 北京京东尚科信息技术有限公司 | 基于语言模型的问答匹配方法、系统、设备及存储介质 |
CN113792709A (zh) * | 2021-11-15 | 2021-12-14 | 湖南视觉伟业智能科技有限公司 | 快速大规模人脸识别方法及系统 |
CN113792709B (zh) * | 2021-11-15 | 2022-01-11 | 湖南视觉伟业智能科技有限公司 | 快速大规模人脸识别方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107391554B (zh) | 高效分布式局部敏感哈希方法 | |
EP3308303B1 (en) | Mechanisms for merging index structures in molap while preserving query consistency | |
CN102184205B (zh) | 基于可扩展精度混沌哈希的多模式串匹配方法 | |
CN103514201A (zh) | 一种非关系型数据库的数据查询方法和装置 | |
CN105677683A (zh) | 批量数据查询方法和装置 | |
CN104462357A (zh) | 实现个性化搜索的方法和装置 | |
CN105760443A (zh) | 项目推荐系统、项目推荐装置以及项目推荐方法 | |
US9665612B2 (en) | Run-time decision of bulk insert for massive data loading | |
CN105224532A (zh) | 数据处理方法及装置 | |
CN105550225A (zh) | 索引构建方法、查询方法及装置 | |
CN105550368A (zh) | 一种高维数据的近似最近邻检索方法及检索系统 | |
CN102456073A (zh) | 一种部分最值查询方法 | |
CN104268629A (zh) | 一种基于先验信息和网络固有信息的复杂网络社区检测方法 | |
CN104809161B (zh) | 一种对稀疏矩阵进行压缩和查询的方法及系统 | |
CN116383422B (zh) | 一种基于锚点的无监督跨模态哈希检索方法 | |
CN107209768A (zh) | 用于数据集的可扩展排序的方法和设备 | |
US20220005546A1 (en) | Non-redundant gene set clustering method and system, and electronic device | |
CN104794130A (zh) | 一种表间关联查询方法和装置 | |
CN102207935A (zh) | 用于创建索引的方法和系统 | |
CN105159884A (zh) | 行业词典的建立方法和装置及行业识别方法和装置 | |
CN116244333A (zh) | 一种基于代价因子校准的数据库查询性能预测方法及系统 | |
CN105025013B (zh) | 基于优先级Trie树的动态IP匹配模型的建立方法 | |
CN113918807A (zh) | 数据推荐方法、装置、计算设备及计算机可读存储介质 | |
CN102725754B (zh) | 一种索引数据处理方法及设备 | |
CN109634953A (zh) | 一种面向高维大数据集的加权量化哈希检索方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20120516 |