一种面向社交活动组织的时间聚合查询方法_2

文档序号:9631598阅读:来源:国知局
的i,⑴如果夂./?那么其区间对应的参与人数加丨,参与人员集合添加该name(2)如果 Sf且N是叶子节点,则将要插入的记录添加到该节点,修改相应值;(3)如果见/..?: / 且Ν不是叶子节点,调用过程Insert(N.q,〈I,name〉);
[0039] 2.3 删除:
[0040] 假设删除一条记录〈I,name〉,name表示用户的唯一标识,I表示用户的空闲时间; 删除操作与插入操作类似,我们记为delete(N,〈I,name〉)具体操作如下:对于所有满足 矣0的i,(1)如果]Υ.//?Ξ/那么该区间对应的参与人数减1,参与人员集合删除该 name;⑵如果/且Ν是叶子节点,则在该节点删除相应信息;(3)如果况·/,· 且Ν不 是叶子节点,调用过程delete(Ν.q,〈I,name〉)
[0041] 2.4节点分裂:
[0042] 之前提到每个节点都有最大的容量,所以当该节点表示的时间区间过多时,就会 导致溢出,此时需要进行节点分裂操作;因为插入的时间区间都是添加到叶子节点的,所以 首先是叶子节点会发生溢出;当叶子节点执行完分裂操作后,可能会导致其父节点溢出,则 进行父节点的分裂操作;
[0043] 假设当节点N发生溢出时包含了η个时间区间,则当N为叶子节点时,η= 1+1或 η= 1+2 ;当Ν为非叶子节点时,η=b+Ι;将节点Ν的分裂过程记为split(Ν),具体操作如 下:
[0044] 241)将节点N分裂成&和N2
[0045] 242)&包含前一半的区间,即L包含N.q,……,以及对应的参与人数 N.Vl,……,iV1和参与人员集合N.Sl,……,1?5如果N不是叶子节点,&还要包含 TV--/'' N.Cl......,V 'I
[0046] 243)队包含剩余的区间,即N2包含'……,N.tni以及对应的参与人数Λ?'ν|+1 ' ……,Ν. \和参与人员集合'……,N.sn如果N不是叶子节点,N2?要包含' ......,N.cn
[0047] 244)如果N是根节点,那么创建一个新的根节点队_,其中'并且指向 &和N2
[0048] 245)如果N不是根节点,假设N有父节点N',并且Ν' .C]=N,则前j-Ι个区间保 持不变,从第j+Ι个区间到最后的区间往右移一位;再令Ν' · C]=NpN' .c]+1 =N2如果f溢出,则调用split(f)
[0049] 2. 5区间合并和节点合并
[0050] 当发生插入或者删除操作后,可能会出现两个相邻区间的参与人数是相同的并且 参与人员都相同的情况,这时就需要将两个相邻区间进行合并;区间合并分为两种情况:
[0051] (251)两个相邻的区间在同一个叶子节点中,假设它们分别为N. 1,和Ν.I]+1,那么 有N.Vj=Ν.v_j+1,N.s_j=N.s_j+1,后进行如下操作:
[0052] 2511)删除Ν·Ν· \+1和Ν·sj+1
[0053] 2512)从第j+2个区间到最后的区间往前移一位
[0054] 2513)如果节点N经过合并后包含的区间少于7调用nmerge(N)
[0055] (252)两个相邻的区间在两个相邻的叶子节点中,因为这种情况比较复杂,且不容 易出现,暂不作考虑;区间合并后,可能会使叶子节点达不到半满状态,此时需要进行节点 合并来防止这种情况发生;节点合并的策略是:如果非根节点没有达到半满状态,首先从 包含时间数量超过容量一般的相邻节点中移动一个时间区间到该节点;如果不存在这样的 有"多余"时间区间的节点,那么就将该节点与其相邻的节点进行合并;记节点合并的过程 为nmerge(N),具体操作如下:
[0056] 2521)如果N是根节点并且N有且仅有1个子节点,那么将N.Cl作为新的根,删除 原来的根节点N
[0057] 2522)如果N不是根节点,假设N最多能够包含η个时间区间(如果N是叶子节 il 点,η= 1 ;如果N是非叶子节点,n=b);现在N包含了j-_1个时间区间,接下来判断N的兄弟节点的情况; η
[0058] 2523)如果Ν的右边兄弟节点队_包含了至少$+1个时间区间,那么就把N"ght 的第一个区间添加到N中去;
[0059] 2524)如果N的左边兄弟节点Nleft包含了至少i+1个时间区间,那么就将Nleft 的最后一个区间添加到N开头中去;
[0060] 2525)进行两个节点的合并;假设这两个节点分别为&和NyK为左节点,N2为右 节点;假设K包含夂个时间区间,N2包含j2个时间区间;jJPj2中其中一个为$,1; 假设%是NJPN2共同的父节点,并且Np.ck=N^Np.ck+1=N2,将&和N2合并为一个新的 区间N_,Ν_包含了j力_2个时间区间,并删除NJPN2;在Np中,将Np.ldPNp.Ik+1合并成 一个区间,并指向N_jn果节点Np包含的区间少于4,调用nmerge(Np)
[0061] 3.查询
[0062] 为了获得活动组织的最优时间结果,我们需要进行三个步骤的操作:
[0063] 3. 1获取参与时间区间
[0064] 这一步中,通过遍历SB* -Tree,可以得到所有时间区间以及对应的参与人数和参 与人员(统称为区间信息);遍历的方法为:从树的根节点出发,沿路径遍历到每一个叶子 节点;当沿一条路径遍历到一个叶子节点NlKif时,沿从根节点到叶子节点的路径,将路径上 每个节点上节点N对应某一特定的N.vjPN.s$卩加到叶子节点NlKif的所有N1(;af.vJPNWf. 81上,其中t由路径确定。然后输出所有区间Nleaf·li'Nleaf·Vi'Nieaf·Si
[0065] 3. 2获得候选方案
[0066]根据第一步得到的时间区间可能不满足最小持续时间duration;所以为了得到 满足活动最小持续时间duration的候选方案,需要对遍历SB* -Tree树得到的时间区间信 息进行判断和调整,将区间大小小于duration的区间与相邻区间进行合并,使新的区间能 够满足duration;具体操作如下:
[0067] 假设遍历SB* -Tree后得到了m个时间区间,分别为Ip12,…,1",它们按从小到 大的顺序排列;每个区间Ii对应着它的区间信息:参与人数IV和参与人员IpS;i= 1开 始:如果Ii的大小多duration,直接输出Ii,Ii.V和Ii.S;如果Ii的大小〈duration,则与 后面的区间进行合并,直到合并的新区间的大小满足duration;
[0068] 3. 3最优方案选择
[0069] 通过第二步得到所有候选方案后,我们根据快速排序将所有方案按照人数从多到 小进行排序,返回最优的时间方案。同时根据用户需要,也可以返回ΤορΚ的方案。
[0070] 本发明拟解决的问题是希望能够根据所有参与活动的人员的时间安排,快速、高 效得到最优的活动组织时间,即在该时间能够有最多的人员会来参加,来响应用户需求。并 在此基础上,解决大量用户的并行操作。本发明与普通的暴力手段相比,通过构造新型索引 结构,利用相应的查询方法,能够将时间花费大大节省,并且支持多用户的并行操作。
[0071] 本发明的优点是:能够将时间花费大大节省,并且支持多用户的并行操作。
【附图说明】
[0072] 图1表示本发明方法的整个流程图
[0073] 图2为演示例子的初始信息。
[0074] 图3为演示例子在时间坐标轴上的示意图
[0075] 图4表示根据所有人提供的空闲时间建立SB* -Tree的过程。其中图4. 1到图
[0076] 4. 7是具体每一步
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1