[发明专利]一种面向社交活动组织的时间聚合查询方法有效

专利信息
申请号: 201510779130.4 申请日: 2015-11-13
公开(公告)号: CN105389370B 公开(公告)日: 2018-05-22
发明(设计)人: 曹斌;侯晨煜;范菁 申请(专利权)人: 浙江工业大学
主分类号: G06F17/30 分类号: G06F17/30
代理公司: 杭州天正专利事务所有限公司 33201 代理人: 王兵;黄美娟
地址: 310014 浙*** 国省代码: 浙江;33
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 一种 面向 社交 活动 组织 时间 聚合 查询 方法
【权利要求书】:

1.一种面向社交活动组织的时间聚合查询方法,包括下列步骤:

步骤1.建立索引结构SB*-Tree;

针对SB-Tree进行拓展,建立SB*-Tree树形数据结构;SB*-Tree与SB-Tree不同的是:SB*-Tree中每个时间区间N.Ii增加了其对应的参与人员ID的集合N.si;SB*-Tree树包含一个最大分支因子b和最大叶子容量l;SB*-Tree的中间节点最大能够包括b个时间区间,叶子节点最多能够包括l个时间区间,它们共同决定了SB*-Tree的布局;关于SB*-Tree的结构的详细描述如下:

结构中使用的符号的含义如下:

N.Ii是节点N的第i个时间区间,

N.ti是节点N的第i个时间点,是第i个区间的结束时间,也是i+1个区间的开始时间,

N.vi是节点N的第i个时间区间对应的参与人数,

N.si是节点N的第i个时间区间对应的具体参与人员ID的集合,

N.ci是节点N的第i个时间区间对应的子节点;

1.1中间节点:

每个中间节点有三层结构,分别为N.ti、N.vi、N.si,另外还有一个指向子树的指针N.ci;每个中间节点最多能够表示b个连续的时间区间,并且要保证该节点至少是半满的,即至少表示个时间区间;假设一个中间节点N表示了j个时间区间,分别为N.I1,N.I2,N.I3,……,N.Ij;节点中存储了j-1个不同的时间点,分别为N.t1,N.t2,N.t3,……,N.tj-1;其中N.ti表示第i个区间的结束时间,也是i+1个区间的开始时间;同时每个时间区间N.Ii都有对应的参与人数N.vi,参与人员的ID的集合N.si和指向下一个子节点的指针N.ci

1.2叶子节点;

叶子节点最多能够表示l个连续的时间区间,并且必须至少表示个时间区间;其结构与中间节点类似,也有三层结构,分别为N.ti、N.vi、N.si,只是没有指向下一个子节点的指针;

1.3根节点;

根节点的结构与中间节点相同,同时最多能够表示b个连续的时间区间,但是最少只要表示2个时间区间即可;

1.4节点性质;

对于每个非叶子节点N,所有在以N.ci为根的节点中的瞬时时间点都要严格小于N.ti,同时以N.ci+1为根的节点中的所有瞬时时间点都要严格大于N.ti

步骤2、SB*-Tree的具体操作;

2.1区间定义:

考虑第i个时间区间N.Ii,N.Ii的开始时间记为start(N.Ii),结束时间记为end(N.Ii);

2.1.1 start(N.Ii)的取值如下:

如果i>1,start(N.Ii)=N.ti-1

如果i=1且N为根节点,start(N.Ii)=-∞;

如果i=1且N有父节点N′,而且N′的第k个指针指向N,即N′.ck=N,则start(N.Ii)=start(N′.Ik);

2.1.2 end(N.Ii)的取值如下:

如果i<j,end(N.Ii)=N.ti

如果i=j且N为根节点,end(N.Ii)=+∞;

如果i=j且N有父节点N′,而且N′的第k个指针指向N,即N′.ck=N,则end(N.Ii)=end(N′.Ik);

2.1.3区间的定义如下:

如果start(N.Ii)≠-∞,则区间表示为[start(N.Ii),end(N.Ii));

如果start(N.Ii)=-∞,则区间表示为(-∞,end(N.Ii));

2.2插入:

假设插入一条记录<I,name>,name表示用户的唯一标识,I表示用户的空闲时间;我们调用过程Insert(N,<I,name>)来完成插入操作,Insert(N,<I,name>)表示向以N为根的子树中插入<I,name>;Insert(N,<I,name>)的具体操作为:对于所有满足的i,(1)如果那么其区间对应的参与人数加1,参与人员集合添加该name(2)如果且N是叶子节点,则将要插入的记录添加到该节点,修改相应值;(3)如果且N不是叶子节点,调用过程Insert(N.ci,<I,name>);

2.3删除:

假设删除一条记录<I,name>,name表示用户的唯一标识,I表示用户的空闲时间;删除操作与插入操作类似,我们记为delete(N,<I,name>)具体操作如下:对于所有满足的i,(1)如果那么该区间对应的参与人数减1,参与人员集合删除该name;(2)如果且N是叶子节点,则在该节点删除相应信息;(3)如果且N不是叶子节点,调用过程delete(N.ci,<I,name>);

2.4节点分裂:

之前提到每个节点都有最大的容量,所以当该节点表示的时间区间过多时,就会导致溢出,此时需要进行节点分裂操作;因为插入的时间区间都是添加到叶子节点的,所以首先是叶子节点会发生溢出;当叶子节点执行完分裂操作后,会导致其父节点溢出,则进行父节点的分裂操作;

假设当节点N发生溢出时包含了n个时间区间,则当N为叶子节点时,n=l+1或n=l+2;当N为非叶子节点时,n=b+1;将节点N的分裂过程记为split(N),具体操作如下:

241)将节点N分裂成N1和N2

242)N1包含前一半的区间,即N1包含以及对应的参与人数和参与人员集合如果N不是叶子节点,N1还要包含

243)N2包含剩余的区间,即N2包含以及对应的参与人数和参与人员集合如果N不是叶子节点,N2还要包含

244)如果N是根节点,那么创建一个新的根节点Nroot,其中并且指向N1和N2

245)如果N不是根节点,假设N有父节点N',并且N′.cj=N,则前j-1个区间保持不变,从第j+1个区间到最后的区间往右移一位;再令N′.cj=N1,N′.cj+1=N2如果N′溢出,则调用split(N′);

2.5区间合并和节点合并;

当发生插入或者删除操作后,会出现两个相邻区间的参与人数是相同的并且参与人员都相同的情况,这时就需要将两个相邻区间进行合并;区间合并分为两种情况:

(251)两个相邻的区间在同一个叶子节点中,假设它们分别为N.Ij和N.Ij+1,那么有N.vj=N.vj+1,N.sj=N.sj+1,后进行如下操作:

2511)删除N.tj,N.vj+1和N.sj+1

2512)从第j+2个区间到最后的区间往前移一位;

2513)如果节点N经过合并后包含的区间少于调用nmerge(N);

(252)两个相邻的区间在两个相邻的叶子节点中,因为这种情况比较复杂,且不容易出现,暂不作考虑;区间合并后,会使叶子节点达不到半满状态,此时需要进行节点合并来防止这种情况发生;节点合并的策略是:如果非根节点没有达到半满状态,首先从包含时间数量超过容量一半的相邻节点中移动一个时间区间到该节点;如果不存在这样的有“多余”时间区间的节点,那么就将该节点与其相邻的节点进行合并;记节点合并的过程为nmerge(N),具体操作如下:

2521)如果N是根节点并且N有且仅有1个子节点,那么将N.c1作为新的根,删除原来的根节点N;

2522)如果N不是根节点,假设N最多能够包含n个时间区间,如果N是叶子节点,n=l;如果N是非叶子节点,n=b;现在N包含了个时间区间,接下来判断N的兄弟节点的情况;

2523)如果N的右边兄弟节点Nright包含了至少个时间区间,那么就把Nright的第一个区间添加到N中去;

2524)如果N的左边兄弟节点Nleft包含了至少个时间区间,那么就将Nleft的最后一个区间添加到N开头中去;

2525)进行两个节点的合并;假设这两个节点分别为N1和N2,N1为左节点,

N2为右节点;假设N1包含j1个时间区间,N2包含j2个时间区间;j1和j2中其中一个为另一个为假设Np是N1和N2共同的父节点,并且Np.ck=N1,Np.ck+1=N2,将N1和N2合并为一个新的区间Nnew,Nnew包含了j1+j2个时间区间,并删除N1和N2;在Np中,将Np.Ik和Np.Ik+1合并成一个区间,并指向Nnew;如果节点Np包含的区间少于调用nmerge(Np);

步骤3.查询;

为了获得活动组织的最优时间结果,需要进行三个步骤的操作:

3.1获取参与时间区间;

这一步中,通过遍历SB*-Tree,可以得到所有时间区间以及对应的参与人数和参与人员,统称为区间信息;遍历的方法为:从树的根节点出发,沿路径遍历到每一个叶子节点;当沿一条路径遍历到一个叶子节点Nleaf时,沿从根节点到叶子节点的路径,将路径上每个节点上节点N对应某一特定的N.vt和N.st都加到叶子节点Nleaf的所有Nleaf.vi和Nleaf.si上,其中t由路径确定;然后输出所有区间Nleaf.Ii,Nleaf.vi,Nleaf.si

3.2获得候选方案;

根据第一步得到的时间区间不满足最小持续时间duration;所以为了得到满足活动最小持续时间duration的候选方案,需要对遍历SB*-Tree树得到的时间区间信息进行判断和调整,将区间大小小于duration的区间与相邻区间进行合并,使新的区间能够满足duration;具体操作如下:

假设遍历SB*-Tree后得到了m个时间区间,分别为I1,I2,…,Im,它们按从小到大的顺序排列;每个区间Ii对应着它的区间信息:参与人数Ii.V和参与人员Ii.S;i=1开始:如果Ii的大小≥duration,直接输出Ii,Ii.V和Ii.S;如果Ii的大小<duration,则与后面的区间进行合并,直到合并的新区间的大小满足duration;

3.3最优方案选择;

通过第二步得到所有候选方案后,根据快速排序将所有方案按照人数从多到小进行排序,返回最优的时间方案;同时根据用户需要,也可以返回TopK的方案。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江工业大学,未经浙江工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/201510779130.4/1.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top