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

文档序号:9631598阅读:421来源:国知局
一种面向社交活动组织的时间聚合查询方法
【技术领域】
[0001] 本发明属于时间数据库(TemporalDatabase)领域,主要解决当前生活中存在的 "组织聚会难"的问题,提出了一种新颖的、高效的、能够满足时间聚合查询的索引结构以及 相关的查询方法。通过利用这种索引结构和方法,能够根据所有参与活动的人员的时间安 排来得到最优的活动组织时间,即在该时间能够有最多的人员会来参加。 技术背景
[0002] 随着"互联网+"时代的到来,人们对网络平台的要求不仅仅局限于创建和分享信 息。更多地,人们开始逐渐将他们的生活围绕互联网为中心展开,并且利用一些网络应用平 台完成日常较为繁琐甚至复杂的任务,如手机打车、电子支付、网上购物等。在"互联网+" 大背景下,本专利提出一个时间聚合技术,用以解决人们日常社交活动规划中"确定聚会时 间难"的问题。
[0003] 例如,若想要筹备一个朋友间的聚会,组织者通常会使用移动通讯应用(如微信) 或短信进行沟通,再或者通过一些流行的社交网络(如人人网、facebook)或电子邮件。一 些朋友表示没问题可以到,另一些则会建议组织者更换日期、时间或地点。然后组织者不停 的更改询问确认、直到达成所有人或大部分人都认可的折中方案。除组织朋友聚会外,公司 部门组织开会、团组旅游等场景下也涉及到类似的问题。在这些场景中,协调时间、寻找大 家满意的活动地点成为活动组织者最头疼的事情,小规模四五个人的活动尚可解决,若组 织大规模几十人、甚至成百上千人的大型活动,传统方式不仅效率低,且组织成本大。
[0004] 在目前的工业界,有关帮助人们筹划聚会的系统在国内尚未发现,但在国外近年 来已有多款相关系统出现,例如Doodle、WePopp、Hatch、Tossup等。这些系统的技术类似, 均是通过参与者对组织者事先指定的日期、时间、活动地点进行投票以确定方案,这样的方 式最大的局限在于活动的时间和地点均已被组织者规定,参与者只能从组织者规定的时间 方案中进行选择,因此不够灵活,当组织大型活动时很可能无法满足更多参与者的时间需 求。而在目前传统的社交应用中,如人人、微信、微博等,尚未提供帮助人们规划社交活动的 功能,它们目前仅是从分享信息出发进行社交关系的建立。
[0005] 在目前学术界,时间聚合技术的研究比较成熟,如M.Kaufmann等人提出了一个通 用的数据结构TimelineIndex用于支持时序数据上的多种查询,包括时间聚合。J.Yang等 人针对时间聚合问题,提出了一个增量的基于磁盘的树状数据结构SB-Tree。然而这些方 法都不能有效的解决活动组织的问题场景,因为在进行社交活动规划时,(1)没有事先规定 的查询时间范围,仅有固定时间段大小的时间窗口;(2)目标不同,本项目要查询的是哪个 时间段的参与人数最多;(3)聚合处理逻辑不同,每个参与人员的时间段与查询时间窗口 相交不代表该参与者将会参加活动,而是查询时间段完全包含于参与人员的时间段,才能 代表该参与者将有空参加活动。

【发明内容】

[0006] 本发明要克服现有技术的确定聚会时间难、不能有效的解决活动组织的问题场景 的缺点,提供一种面向社交活动组织的时间聚合查询方法。
[0007] 为了能够更有效地解决"确定聚会时间难"的问题,基于现有的SB-Tree,对它的 结构进行拓展,提出了一种新的索引结构和查询技术,能够有效地解决上述提出的三个问 题。本发明最终实现的功能是能够根据参与人员自己提交的意向时间,为聚会活动提供最 优的举办时间,能够保证最多的人员参加活动。而人数的计算采用count聚合函数。
[0008] 本发明所述的一种面向社交活动组织的时间聚合查询方法,包括下列步骤:
[0009] 1.建立索引结构SB* -Tree
[0010] 针对SB-Tree进行拓,建立SB* -Tree树形数据结构;SB* -Tree与SB-Tree不 同的是:SB* -Tree中每个时间区间N.L都增加了其对应的参与人员ID的集合N.s1<3SB* -Tree树包含一个最大分支因子b和最大叶子容量1。SB* -Tree的中间节点最大能够b个 时间区间,叶子节点最多能够包括1个时间区间,它们共同决定了SB* -Tree的布局。关于 SB* -Tree的结构的详细描述如下:
[0011] 首先,表1列举了结构中使用的符号,如下所示:
[0012]
[0014] 表1符号列表
[0015] 1.1中间节点:
[0016] 每个中间节点有三层结构,分别为N.t^N.Vl、N. Sl,另外还有一个指向子树的指针 N.c1;每个中间节点最多能够表示b个连续的时间区间,并且要保证该节点至少是半满的, 即至少表示#个时间区间;假设一个中间节点N表示了j个时间区间,分别为Ν.ΙρN.I2,2 N. 13,……,N.Ij;节点中存储了j-1个不同的时间点,分别为N.t^N.t2,N.t3,……,N. \ 1; 其中N.h表示第i个区间的结束时间,也是i+1个区间的开始时间;同时每个时间区间N. 1 都有对应的参与人数N.Vl,参与人员的ID的集合N.Sl和指向下一个子节点的指针N.c1;
[0017] 1.2叶子节点
[0018] 叶子节点最多能够表示1个连续的时间区间,并且必须至少表示4个时间区间; 其结构与中间节点类似,也有三层结构,分别为N. N.Vl、N. Sl,只是没有指向下一个子节 点的指针;
[0019] 1.3根节点
[0020] 根节点的结构与中间节点相同,同时最多能够表示b个连续的时间区间,但是最 少只要表示2个时间区间即可;
[0021] 1.4节点性质
[0022] 对于每个非叶子节点N,所有在以N. Cl为根的节点中的瞬时时间点都要严格小于 N.h,同时以N.c1+1为根的节点中的所有瞬时时间点都要严格大于N.t1;
[0023] 2、SB* -Tree的具体操作
[0024] 2. 1区间定义:
[0025] 考虑第i个时间区间N.IpN. ^的开始时间记为start(N.I上结束时间记为 end(N.I;);
[0026] 2. 1.lstart(N.L)的取值如下:
[0027]如果i>l,start(N.I;) =N.t;
[0028]如果i= 1 且N为根节点,start(Ν·I;) = - 00 ;
[0029] 如果i= 1且N有父节点Ν',而且Ν'的第k个指针指向N,即Ν' .ck=N,则 start(Ν.I;) =start(Ν' .Ik)
[0030] 2. 1. 2end(N.IJ的取值如下:
[0031]如果i〈j,end(N. 1;) =N.ti;
[0032]如果i=j且N为根节点,end(N. 1;) = + 00 ;
[0033] 如果i=j且N有父节点Ν',而且Ν'的第k个指针指向N,即Ν' .ck=N,则 end(N.I;) =end(N' ·Ik);
[0034] 2. 1. 3区间的定义如下:
[0035]如果start(N.I;)辛-°°,则区间表示为[start(N. 1丄end(N.I;))
[0036]如果start(Ν·I;) = - 00,则区间表示为(-00,end(Ν·I;))
[0037] 2. 2 插入:
[0038] 假设插入一条记录〈I,name〉,name表示用户的唯一标识,I表示用户的空闲时间; 我们调用过程Insert(N,〈I,name〉)来完成插入操作,Insert(N,〈I,name〉)表示向以N为根 的子树中插入〈I,name〉;Insert(N,〈I,name〉)的具体操作为:对于所有满足见A1 # 0_
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1