一种基于排序的频繁更新数据集上的k-支配Skyline查询算法的制作方法

文档序号:16146772发布日期:2018-12-05 16:33阅读:227来源:国知局
一种基于排序的频繁更新数据集上的k-支配Skyline查询算法的制作方法
本发明涉及一种基于排序的频繁更新数据集上的k-支配skyline查询算法,属于计算机领域中数据管理与查询方向。
背景技术
skyline查询问题也被称为帕累托最优问题或者极大向量问题,在多目标优化查询,数据可视化等方面有着广泛应用。目前,在web信息系统、p2p网络、数据流等方向得到了广泛的研究,现今已成为数据库和信息检索领域的研究热点之一。skyline查询的思想是在给定d维属性元组集合中,查询一个skyline支配点集合。所谓一个数据点p(p1,p2,...,pd)支配另一个数据点q(q1,q2,...,qd),是指p点在所有维度上的值都不差于q点,并且至少有一个维度上的值优于q。这些支配点的集合就是所要查询的skyline支配点集合。在实际应用中,数据经常是高维度的。当数据的维度增加时,一个元组支配另一个元组的可能性随之变低,skyline查询就出现了“维度诅咒”的问题,这将导致大量的数据点在skyline查询中被返回,返回大量的数据点使skyline查询不能提供有用的信息。为了在高维空间中找到重要的数据点,并减少返回的结果集,chan等人提出了k-支配skyline查询的概念。通过弱化“支配”的定义,使数据点之间更容易产生支配关系,从而使结果集缩小到一个合适范围内。目前k-支配skyline查询算法主要有两种:基于排序的算法和不带排序的算法。不带排序的算法主要问题是数据点之间存在着过多无意义的比较。为了减少数据点间的重复比较,本专利利用分治策略的思想对数据预处理。数据按照支配能力大小排序,使支配能力高的数据点优先被处理,从而提高算法性能。数据库中的节点通常是动态变化的。当数据集中的数据点更新时,重新对节点排序,计算k-支配skyline点显然是效率低下的。本专利针对数据节点常见的插入和删除操作,提出了频繁更新数据集上的k-支配skyline查询算法。技术实现要素:本发明提供一种基于排序的频繁更新数据集上的k-支配skyline查询算法。通过数据集的排序,剪枝策略,减少数据点之间的重复比较,建立k-支配skyline点的树形结构,维护k-支配skyline点的索引。当数据集更新时,通过插入、删除算法维护k-支配skyline点。本发明采用的技术方案如下:本发明提供一种基于排序的频繁更新数据集上的k-支配skyline查询算法。首先对数据预处理,按支配能力构建分块有序数据集。在此基础上,通过k-支配skyline点计算算法,维护k-支配skyline点的索引。最后针对变化的数据,利用插入、删除算法得到新数据集的k-支配skyline点。因此,本发明其特征主要包括以下步骤:(1)对数据集预处理;(2)计算k-支配skyline点,维护k-支配skyline点的索引;(3)k-支配skyline数据点的更新维护,包括数据点的插入、删除。具体变量描述情况如表1所示:表1变量描述下面是对每个步骤实现的具体描述。数据预处理算法的步骤包括:a1:随机选取数据集中的数据点,计算数据点在各个维度上的近似平均值,记为pavg;a2:按序对数据集分块,记为d1,d2,...,di,...,dn;a3:di中的数据点分别与pavg进行比较,若值大于pavg维度上的值,则该数据点的p.dom值加1,求出每个数据点的支配能力p.dom;a4:根据p.dom的大小,对数据集di中的数据进行快速排序;a5:合并并排序d1,d2,...,di,...,dn中的数据点,得到分块的数据集d′。计算k-支配skyline数据点时,要尽量避免数据点之间不必要的比较。数据集的预处理可以减少数据点之间的比较次数。同时,数据节点的支配能力、数据集的维度和k值之间的关系也可以用来剪枝。如果pi和pj满足pi.dom-pj.dom>d-k就不需要判断pj是否k支配pi,同时根据前面的预处理结果可知,如果pj不可能k-支配pi,则排在pj后面的数据点也不可能k-支配pi,只需单向判断pi是否k-支配pj。计算k-支配skyline数据点及为k-支配skyline数据点建立索引的算法如下:b1.设置r={φ},数据点的标志位isdominate=true;b2.数据集d′的第一个数据点加入到r中,成为候选k-支配skyline点;b3.当数据集d′非空时,执行b4~b7操作;b4.从数据集d′中的第二个节点p开始,依次和r中的数据点p′进行比较,若p′.dom-p.dom>d-k,则单向判断p′是否支配p,若支配,则置p的标志位isdominate=false,同时创建以p′作为根节点的树,p是p′的孩子节点。若p′.dom-p.dom≤d-k,则执行操作b5~b6操作;b5.依次判断p′是否支配p,若支配,则置p的标志位isdominate=false,同时创建树,p′作为树的根节点,p是p′的孩子节点;b6.依次判断p是否支配p′,若支配,则将p′从r中删除,同时删除以p′为根节点的树;b7.若数据点p的标志位isdominate=true,则将点p加入到集合r中,同时创建以p作为根节点的树;b8.当数据集r非空时,执行b9~b10操作;b9.数据集d-r中的数据点依次与r中的数据点进行支配关系判断。若p′.dom-p.dom>d-k,则结束操作,否则,执行b10操作;b10.依次判断p是否支配p′,若支配,则将p′从r中删除,同时删除以p′为根节点的树。计算k-支配skyline数据点分为2个扫描过程:b1~b7是第一个扫描过程,此时得到k-支配skyline数据点集合r中可能含有“假”的k-支配skyline数据点。第二轮扫描过程b9~b10的用来消除r中“假”的skyline数据点。数据集中节点的插入和删除是常见的操作。如果新插入的节点pins被某个k-支配skyline点所d-支配,则r中的数据点不可能被pinsk-支配,此时集合r中的元素不受插入节点的影响。向数据集中插入节点,维护k-支配skyline数据点的步骤如下:c1.插入的节点pins依次与r中的节点p′进行支配关系判断,即判断p′是否d-支配pins,若支配,节点pins成为p′的孩子节点,更新p′的索引结构。否则执行步骤c2~c4;c2.计算pins的pins.dom;c3.根据插入节点的支配能力,将其插入到相应的d′j中;c4:使用b1~b10计算k-支配skyline点,并维护k-支配skyline点的索引。当从数据集中删除一个节点时,分为2种情况:1.pdel不是k-支配skyline点;2.pdel是k-支配skyline点。当pdel不是k-支配skyline点时,删除它不会对数据集产生影响,否则重新计算k-支配skyline点。从数据集中删除节点时的算法描述如下:d1.判断欲删除的节点pdel是否属于r,若不属于,直接删除,否则执行d2;d2.更新数据集d′,使用b1~b10计算k-支配skyline点,并维护k-支配skyline点的索引。附图说明图1是本专利的结构图;图2是预处理算法的流程图;图3是k-支配skyline点计算算法第一轮的流程图;图4是k-支配skyline点计算算法第二轮的流程图;图5是实施例节点的索引结构图。具体实施方式以下结合附图与具体实施方式对本发明作进一步的详细描述。实施例:如图1所示,基于排序的频繁更新数据集上的k-支配skyline查询算法包含3个算法:(1)数据集预处理算法;(2)计算k-支配skyline点算法;(3)k-支配skyline数据点的更新维护,包括数据点的插入、删除算法。如图2所示,随机选取数据集中的数据点,计算数据点在各个维度上的近似平均值,记为pavg。接着,按序对数据集分块,记为d1,d2,...,di,...dn。di中的数据点分别与pavg进行比较,若值大于pavg维度上的值,则该数据点的p.dom值加1,求出每个数据点的支配能力p.dom。然后根据p.dom的大小,对数据集di中的数据进行快速排序,使数据集di中的数据有序。最后合并d1,d2,...,di,...,dn中的数据点,依据支配能力大小,得到分块的数据集d′。以表2的数据集为例,说明预处理算法的过程。随机选取数据集中的数据点,因为数据集d={p1,p2,p3,p4,p5,p6,p7}的数目较少,因此计算7个数据点在各个维度上的近似平均值,记为pavg={3.7,3.7,2.03,3.3,3.1,3.6}。接着将数据集分成d1={p1,p2,p3},d2={p4,p5,p6},d3={p7},d1中的数据点依次与pavg进行比较,若值大于pavg维度上的值,则该数据点的p.dom值加1,数据点p1的支配能力p1.dom=2,依次求得p2.dom=3,p3.dom=3。同理求得d2={p4,p5,p6},d3={p7}中各个数据点的支配能力。对d1,d2,d3中的数据点排序,不失一般性,我们假定值越小的数据越优,即d1={p2,p3,p1},d2={p5,p4,p6},d3={p7}。对d1,d2,d3中的数据进行排序,排序后的结果如表3所示。表2:数据集数据点d1d2d3d4d5d6p1754334p2341345p3425433p4551234p5113441p6541535p7151223经过排序后的数据集如下表所示:表3:排序后的数据集数据点d1d2d3d4d5d6domp71512235p51134413p23413453p45512343p34254333p65415352p17543342如图3所示,计算k-支配skyline点的第一轮过程如下:数据集d′的第一个数据点加入到r中,成为候选k-支配skyline点。当数据集d′非空时,从数据集d′中的第二个节点p开始,依次和r中的数据点p′进行比较,若p′.dom-p.dom>d-k,判断p′是否支配p,若支配,则置p的标志位isdominate=false,同时创建以p′作为根节点的树,p是p′的孩子节点。若p′.dom-p.dom≤d-k,则依次判断p′是否支配p,若支配,则置p的标志位isdominate=false,同时创建树,p′作为树的根节点,p是p′的孩子节点。接着判断p是否支配p′,若支配,则将p′从r中删除,同时删除以p′为根节点的树。数据点p与r中的所有数据点比较后,若数据点p的标志位isdominate=true,则将点p加入到集合r中,同时创建以p作为根节点的树。以表3中的数据为例,假设求数据集的5-支配的skyline点,将p7插入到r中,即r={p7},p7和p5进行比较,p5.isdominate=true,p7.dom-p5.dom=5-3>d-k=1,判断p7是否5-支配p5,经判断p7不5-支配p5,此时p5.isdominate=true,将p5插入到r中,即r={p7,p5},需注意的是,r中节点的顺序严格按照节点进入的顺序。p2分别和r中的节点p7、p5比较,p2.isdominate=true,p7.dom-p2.dom=5-3>d-k=1,p75-支配p2,p2.isdominate=false,p2成为p7的孩子节点。p5和p2比较,p5.dom-p2.dom=0,p5不5-支配p2,p2不5-支配p5,因p2.isdominate=false,故p2不加入到r中,此时r={p7,p5}。按照顺序p4、p3、p6、p1依次和r中的数据点进行比较,经过一轮扫描后,r={p7,p5},被p7支配的点有p2、p4、p6、p1,被p5支配的点有p3。如图4所示,计算k-支配skyline点的第二轮过程如下:当数据集r非空时,数据集d-r中的数据点依次与r中的数据点进行支配关系判断,若p′.dom-p.dom>d-k,则结束操作。否则,依次判断p是否支配p′,若支配,则将p′从r中删除,同时删除以p′为根节点的树。以第一轮数据的扫描结果为标准,此时,r={p7,p5},d-r={p2,p4,p3,p6,p1},p7先和d-r中的数据点依次比较,p7.dom-p2.dom=5-3>d-k=1,p2不5-支配p7,d-r数据集中p2后面的数据点不可能支配p7。接下来,p5和d-r中的数据点依次比较,p5.dom-p2.dom=0,故d-r中的所有数据点都要和p5进行比较,经判断,p2、p4、p3、p6、p1都不5-支配p5。故最终的5-支配skyline点集合为r={p7,p5},被p7支配的点有p2、p4、p6、p1,被p5支配的点有p3。当插入节点pins时,首先判断pins是否被r中的数据点p′d-支配,若被支配,则pins成为数据点p′的孩子节点,否则,更新数据集d′,根据图3、图4所示的流程重新计算k-支配skyline点。当删除节点pdel不在r中时,删除该节点对其它节点不会产生影响,故可直接删除。当pdel属于k-支配skyline点时,进行删除操作,可对其孩子节点造成影响,更新数据集d′后,运用图3、图4所示的流程计算k-支配skyline点。如图5所示,p7和p5的索引结构说明了p2、p4、p6、p1是p7的孩子节点,p3是p5的孩子节点。删除p7、p2、p4、p6、p1将会受到影响,删除p5,p3将会受到影响。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1