首页 > 专利 > 杭州电子科技大学 > 一种社交网络社区的索引和查询方法专利详情

一种社交网络社区的索引和查询方法   0    0

有效专利 查看PDF
专利申请流程有哪些步骤?
专利申请流程图
申请
申请号:指国家知识产权局受理一件专利申请时给予该专利申请的一个标示号码。唯一性原则。
申请日:提出专利申请之日。
2020-08-24
申请公布
申请公布指发明专利申请经初步审查合格后,自申请日(或优先权日)起18个月期满时的公布或根据申请人的请求提前进行的公布。
申请公布号:专利申请过程中,在尚未取得专利授权之前,国家专利局《专利公报》公开专利时的编号。
申请公布日:申请公开的日期,即在专利公报上予以公开的日期。
2020-12-25
授权
授权指对发明专利申请经实质审查没有发现驳回理由,授予发明专利权;或对实用新型或外观设计专利申请经初步审查没有发现驳回理由,授予实用新型专利权或外观设计专利权。
2021-12-28
预估到期
发明专利权的期限为二十年,实用新型专利权期限为十年,外观设计专利权期限为十五年,均自申请日起计算。专利届满后法律终止保护。
2040-08-24
基本信息
有效性 有效专利 专利类型 发明专利
申请号 CN202010856250.0 申请日 2020-08-24
公开/公告号 CN112052400B 公开/公告日 2021-12-28
授权日 2021-12-28 预估到期日 2040-08-24
申请年 2020年 公开/公告年 2021年
缴费截止日
分类号 G06F16/9536G06Q50/00G06F16/951 主分类号 G06F16/9536
是否联合申请 独立申请 文献类型号 B
独权数量 1 从权数量 0
权利要求数量 1 非专利引证数量 1
引用专利数量 2 被引证专利数量 0
非专利引证 1、2013.08.29陈健琦.“大规模数据图上的影响力社区发现方法研究”《.中国优秀硕士学位论文全文数据库 基础科学辑》.2018,岳灵茜.“多层网络中的连通k-核社区发现和搜索问题研究”《.中国优秀硕士学位论文全文数据库 信息科技辑》.2019,Jian Xu等.“Personalized top-ninfluential community search over largesocial networks”《.World Wide Web》.2020,;
引用专利 US2010332475A、US2013227104A 被引证专利
专利权维持 2 专利申请国编码 CN
专利事件 事务标签 公开、实质审查、授权
申请人信息
申请人 第一申请人
专利权人 杭州电子科技大学 当前专利权人 杭州电子科技大学
发明人 徐建 第一发明人 徐建
地址 浙江省杭州市下沙高教园区2号大街 邮编 310018
申请人数量 1 发明人数量 1
申请人所在省 浙江省 申请人所在市 浙江省杭州市
代理人信息
代理机构
专利代理机构是经省专利管理局审核,国家知识产权局批准设立,可以接受委托人的委托,在委托权限范围内以委托人的名义办理专利申请或其他专利事务的服务机构。
杭州君度专利代理事务所 代理人
专利代理师是代理他人进行专利申请和办理其他专利事务,取得一定资格的人。
朱月芬
摘要
本发明公开了一种社交网络社区的索引和查询方法。本发明步骤如下:步骤(1)、社交网络的抽象;步骤(2)、k‑核心社区的树形索引的构建;步骤(3)、建立社交网络图顶点‑树节点的对应关系;步骤(4)、用户顶点u所属社区的查询。本发明通过对社交网络中的社区建立索引结构,提高了查询特定结点所属社区的效率,这对大规模社交网络中的社区检索技术发展具有积极意义。本发明通过构建一个社交网络中所有社区的树形结构,用树形结构存储社区之间的嵌套关系。在一次性构建了整个社交网络的社区索引结构以后,就可以高效快捷地进行针对某个用户结点的所属社区查询。
  • 摘要附图
    一种社交网络社区的索引和查询方法
  • 说明书附图:图1
    一种社交网络社区的索引和查询方法
  • 说明书附图:图2
    一种社交网络社区的索引和查询方法
  • 说明书附图:图3
    一种社交网络社区的索引和查询方法
  • 说明书附图:图4
    一种社交网络社区的索引和查询方法
法律状态
序号 法律状态公告日 法律状态 法律状态信息
1 2021-12-28 授权
2 2020-12-25 实质审查的生效 IPC(主分类): G06F 16/9536 专利申请号: 202010856250.0 申请日: 2020.08.24
3 2020-12-08 公开
权利要求
权利要求书是申请文件最核心的部分,是申请人向国家申请保护他的发明创造及划定保护范围的文件。
1.一种社交网络社区的索引和查询方法,其特征在于针对社交网络中用户所属社区的查询特点,通过构建树形索引结构,提供一种高效的检索方法,在构建索引结构后,之后的查询中不需要再次遍历用户所属的所有社区,通过访问树形索引即可返回查询结果;具体步骤如下:步骤(1)、社交网络的抽象;步骤(2)、k‑核心社区的树形索引的构建;步骤(3)、建立社交网络图顶点‑树节点的对应关系;步骤(4)、用户顶点u所属社区的查询;
步骤(1)所述的社交网络的抽象,具体实现如下:
将一个社交网络图G(V,E)中的所有用户及用户之间的关系抽象,用顶点的集合V表示用户;用户之间的关系表示为两个顶点之间的边,用边的集合E来表示;
步骤(2)所述的k‑核心社区的树形索引的构建,具体实现如下:
对于社交网络图G(V,E)中的任一顶点v,顶点v的核心号码是指在所有包含顶点v的k‑核心社区中,最大的k值作为该顶点v的核心号码;
树形索引的构建步骤包括社交网络图G中k‑核心社区的解构,即分解社交网络图G,获得社交网络图G中所有顶点的核心号码;然后从根节点的0‑核心社区出发,依次构建树形索引;
所述的社交网络图G中k‑核心社区的解构的具体实现如下:
k‑核心社区的解构的基本过程是在社交网络图G中,按照顶点的度数,迭代删除所有度数小于k的顶点,以及该顶点相邻的边,那么剩下的图就是k‑核心社区;
所述剩下的图所包含的顶点的核心号码就至少大于等于k;
2‑1‑1使用列表Core表示每个顶点的核心号码,列表Core中元素格式为(v,ck),其中v表示顶点,ck表示顶点v的核心号码;初始化列表Core为空;
使用数组degree存储遍历到的顶点的当前度数,例如degree[v]表示遍历到的顶点v的当前度数;
2‑1‑2统计社交网络图G中所有顶点的度数;并对所有顶点根据其度数进行升序排序;
2‑1‑3若社交网络图G非空,取社交网络图G中升序排序后度数最小的顶点v,进行以下操作:
将当前顶点v的当前度数degree[v]赋值到顶点v的核心号码ck,插入Core列表,即在Core列表中插入(v,degree[v]);
对于顶点v的每个邻接顶点u进行以下操作:
如果degree[u]>degree[v]则degree[u]=degree[u]‑1,即确定顶点v的核心号码后,其邻接顶点u的度数减1;
从社交网络图G中删除顶点v,重新对顶点集合V中所有顶点按度数排序,重复步骤2‑1‑
3‘
所述的构建k‑核心社区的树形索引的具体实现如下:
2‑2‑1将Core列表按每个元素的核心号码进行升序排序;
2‑2‑2初始化根节点root,根节点包含信息(0,Vk0,Vk0‑else);其中,0表示根节点的k值为0,Vk0是社交网络图G中所有k‑核心号码为0的顶点集合,Vk0‑else为所有k‑核心号码非0的顶点集合;
初始化临时树节点node,节点包含信息(q,Vkq,Vkq‑else);其中,q表示临时树节点node的k核心号码值为q,Vqk是社交网络图G中所有k‑核心号码为q的顶点集合,Vkq‑else为所有k‑核心号码非q的顶点集合;
2‑2‑3初始化队列nodeQueueA;
2‑2‑4将根节点root推入队列nodeQueueA中;
2‑2‑5当队列nodeQueueA非空时,进行以下操作:
使用临时树节点node保存队列弹出的头部元素nodeQueueA.pop();
对树节点node包含的节点集合node.Vk‑else中所有节点,在社交网络图G中查找由这些顶点构成的连通子图,得到连通子图集合{Gsub1,Gsub2,…Gsubn};
对连通子图集合{Gsub1,Gsub2,…Gsubn}中子图根据顺序进行以下操作:
①取子图Gsubi中所有顶点,并将所有顶点按其k‑核心号码进行排序;其中i为自然数,取值为1,2…n中的一个值;
②将所以顶点中的最小k‑核心号码值,设置为临时变量i;
生成一个新的树节点node‑sub,该树节点node‑sub包含信息(i,Vki,Vki‑else),此处树节点node‑sub的i值就是前述最小k‑核心号码值,集合Vki包含子图Gsubi中核心号码为i的所有顶点,集合Vki‑else包含这个连通子图中核心号码非i的顶点;
③将新生成树节点node‑sub置为树节点node的子节点;
④然后将树节点node‑sub推入队列;
对上述所有子图进行步骤①~步骤④的操作,将树节点node包含的顶点集合node.Vk‑else置空;
所述步骤(3)建立社交网络图顶点‑树节点的对应关系,具体实现如下:
使用一个有序列表MAP存储社交网络图顶点‑树节点的对应关系,对步骤(2)中构建的树形索引进行深度优先遍历,获得社交网络图顶点‑树节点的对应关系后,向列表MAP添加该对应关系;
从根节点root出发对树形索引进行深度优先遍历,具体实现为:
3‑1初始化堆栈nodeStack;
3‑2初始化临时树节点node;
3‑3将根节点root压入堆栈;
3‑4当堆栈nodeStack非空时执行以下操作:
3‑4‑1使用临时树节点node保存堆栈顶部值nodeStack.top;
3‑4‑2遍历临时树节点node中社交网络图的顶点,为每个顶点在列表MAP中添加社交网络图顶点‑树节点对应关系;
3‑4‑3弹出堆栈顶部元素:nodeStack.pop();
3‑4‑4遍历临时树节点node的孩子节点,如果一个序号为i的孩子节点childi非空,则压入堆栈nodeStack:nodeStack.push(node‑>childi);
3‑5完成遍历以后,以顶点ID为关键字对列表MAP进行排序;
所述步骤(4)所述的用户顶点u所属社区的查询,具体实现如下:
4‑1初始化临时树节点node;
4‑2查询列表MAP,获得顶点u在树形索引中的节点位置,并将该节点位置赋予临时树节点node;
4‑3对临时树节点node进行广度优先遍历,返回以临时树节点node为根节点的子树中包含的所有顶点的并集,执行以下操作:
4‑3‑1初始化队列nodeQueue;
4‑3‑2初始化临时树节点node;
4‑3‑3初始化返回值k=node.k;
4‑3‑4初始化返回的顶点集合
4‑3‑5将临时树节点node推入队列nodeQueue;
4‑3‑6当队列nodeQueue非空时执行以下操作:
使用临时树节点node保存弹出的队列头部元素nodeQueue.pop();
合并临时树节点node包含的顶点至集合Vu;
遍历临时树节点node的孩子节点,如果一个序号为i的孩子节点childi非空,则压入队列nodeQueue:nodeQueue.push(node‑>childi);
4‑4返回顶点u的k值和所属的社区所包含的顶点集合Vu。
说明书

技术领域

[0001] 本发明属于计算机应用技术领域,涉及社交网络应用中一种社区索引和查询的方法,特别适用于大规模社交网络中的社区检索查询,例如大规模社交网络中输入一个用户,查询其所属的社区等。

背景技术

[0002] 随着计算机网络的普及,社交网络应用已经进入人们的日常生活。在众多的社交网络应用服务中,社区(Communities)是理解社交网络构成的基石,网络中的社区检索查询是其中一种关键的服务,它是许多其它服务的基础。但由于社交网络应用的用户数量数以万计,进行快捷地所属社区查询是十分困难的。
[0003] 本发明给定一个社交网络G(V,E),V是这个社交网络中所有用户的集合,E是网络中用户之间的联系(边)。社交网络G(V,E)包含有多个社交网络社区。
[0004] 本发明所指的社交网络社区是指k‑核心社区。本发明的k‑核心社区定义为社交网络G(V,E)中的一个连通子图,而且社区中的用户顶点满足一定的紧密性标准,即符合下两个条件:
[0005] 1.k‑核心社区C中所有的用户顶点至少有k(k是非负整数)个邻接顶点,也即该顶点的度数大于等于k;
[0006] 2.k‑核心社区C中的任意两个用户顶点之间都存在一条路径,也即社区中任意两个用户之间是连通的。
[0007] 本发明涉及的用户所属社区查询,是指输入一个用户顶点q,检索其所属的所有k‑核心社区{C},返回检索到的所有k‑核心社区{C}中规模最大(用户数最多)的k‑核心社区CMax。
[0008] 在查询一个用户所属社区的过程中,需要遍历用户所属的所有社区,计算并比较它们的大小,在大规模社交网络中,这个过程计算复杂。因此降低此类计算的复杂度具有很大的迫切性。由社区紧密性标准的条件,可知社区定义具有嵌套特性。给定两个整型数i,j,如果i

发明内容

[0009] 本发明的目的在于克服现有技术中的不足,针对社交网络中用户所属社区的查询特点,根据社区之间存在的嵌套关系构建树形索引结构,提供一种高效的检索方法。其创造性在于构建索引结构以后,以后的查询中不需要再次遍历用户所属的所有社区,通过访问树形索引即可返回查询结果。
[0010] 本发明的方法具体步骤如下:
[0011] 步骤(1)、社交网络的抽象;
[0012] 将一个社交网络图G(V,E)中的所有用户及用户之间的关系抽象,用顶点的集合V表示用户;用户之间的关系表示为两个顶点之间的边,用边的集合E来表示。
[0013] 步骤(2)、k‑核心社区的树形索引的构建;
[0014] 对于社交网络图G(V,E)中的任一顶点v,顶点v的核心号码是在所有包含顶点v的k‑核心社区中,将最大的k值作为该顶点v的核心号码。
[0015] 树形索引的构建步骤包括社交网络图G中k‑核心社区的解构,即分解社交网络图G,获得社交网络图G中所有顶点的核心号码。然后从根节点的0‑核心社区出发,依次构建树形索引。
[0016] 所述的根节点是没有邻接顶点的顶点;
[0017] 具体过程如下:
[0018] 2‑1社交网络图G中k‑核心社区的解构;
[0019] k‑核心社区的解构的基本过程是在社交网络图G中,按照顶点的度数,迭代删除所有度数小于k的顶点,以及该顶点相邻的边,那么剩下的图就是k‑核心社区。
[0020] 所述剩下的图所包含的顶点的核心号码就至少大于等于k。也就是说,当一个顶点从社交网络图G中被删除时,其度数就是它的核心号码。所述的度数是指该顶点包含的邻接顶点的个数,即与当前顶点相连的边的条数。
[0021] 2‑1‑1使用列表Core表示每个顶点的核心号码,列表Core中元素格式为(v,ck),其中v表示顶点,ck表示顶点v的核心号码;初始化列表Core为空。
[0022] 使用数组degree存储遍历到的顶点的当前度数,例如degree[v]表示遍历到的顶点v的当前度数;
[0023] 2‑1‑2统计社交网络图G中所有顶点的度数;并对所有顶点根据其度数进行升序排序;
[0024] 2‑1‑3若社交网络图G非空,取社交网络图G中升序排序后度数最小的顶点v,进行以下操作:
[0025] 将当前顶点v的当前度数degree[v]赋值到顶点v的核心号码ck,插入Core列表,即在Core列表中插入(v,degree[v]);
[0026] 对于顶点v的每个邻接顶点u进行以下操作:
[0027] 如果degree[u]>degree[v]则degree[u]=degree[u]‑1,即确定顶点v的核心号码后,其邻接顶点u的度数减1;
[0028] 从社交网络图G中删除顶点v,重新对顶点集合V中所有顶点按度数排序,重复步骤2‑1‑3。
[0029] 2‑2构建k‑核心社区的树形索引;
[0030] 2‑2‑1将Core列表按每个元素的核心号码进行升序排序;
[0031] 2‑2‑2初始化根节点root,根节点包含信息(0,Vk0,Vk0‑else)。其中,0表示根节点的k值为0,Vk0是社交网络图G中所有k‑核心号码为0的顶点集合,Vk0‑else为所有k‑核心号码非0的顶点集合;
[0032] 初始化临时树节点node,节点包含信息(q,Vkq,Vkq‑else)。其中,q表示临时树节点node的k核心号码值为q,Vqk是社交网络图G中所有k‑核心号码为q的顶点集合,Vkq‑else为所有k‑核心号码非q的顶点集合;
[0033] 2‑2‑3初始化队列nodeQueueA;
[0034] 2‑2‑4将根节点root推入队列nodeQueueA中,即:
[0035] nodeQueueA.push(root);
[0036] 2‑2‑5当队列nodeQueueA非空时,进行以下操作:
[0037] 使用临时树节点node保存队列弹出的头部元素nodeQueueA.pop();
[0038] 对树节点node包含的节点集合node.Vk‑else中所有节点,在社交网络图G中查找由这些顶点构成的连通子图,得到连通子图集合{Gsub1,Gsub2,…Gsubn};
[0039] 对连通子图集合{Gsub1,Gsub2,…Gsubn}中子图根据顺序进行以下操作:
[0040] ①取子图Gsubi中所有顶点,并将所有顶点按其k‑核心号码进行排序;其中i为自然数,取值为1,2…n中的一个值;
[0041] ②将所以顶点中的最小k‑核心号码值,设置为临时变量i;
[0042] 生成一个新的树节点node‑sub,该树节点node‑sub包含信息(i,Vki,Vki‑else),此处树节点node‑sub的i值就是前述最小k‑核心号码值,集合Vki包含子图Gsubi中核心号码为i的所有顶点,集合Vki‑else包含这个连通子图中核心号码非i的顶点;
[0043] ③将新生成树节点node‑sub置为树节点node的子节点;
[0044] ④然后将树节点node‑sub推入队列nodeQueueA.push(node‑sub)。
[0045] 对上述所有子图进行步骤①~步骤④的操作,将树节点node包含的顶点集合node.Vk‑else置空。
[0046] 步骤(3)、建立社交网络图顶点‑树节点的对应关系;
[0047] 使用一个有序列表MAP存储社交网络图顶点‑树节点的对应关系,对步骤(2)中构建的树形索引进行深度优先遍历,获得社交网络图顶点‑树节点的对应关系后,向列表MAP添加该对应关系;
[0048] 从根节点root出发对树形索引进行深度优先遍历,具体实现为:
[0049] 3‑1初始化堆栈nodeStack;
[0050] 3‑2初始化临时树节点node;
[0051] 3‑3将根节点root压入堆栈,即nodeStack.push(root)
[0052] /*循环遍历以节点root为根的树,堆栈nodeStack为空时结束*/
[0053] 3‑4当堆栈nodeStack非空时执行以下操作:
[0054] 3‑4‑1使用临时树节点node保存堆栈顶部值nodeStack.top;
[0055] 3‑4‑2遍历临时树节点node中社交网络图的顶点,为每个顶点在列表MAP中添加社交网络图顶点‑树节点对应关系;
[0056] 3‑4‑3弹出堆栈顶部元素:nodeStack.pop();
[0057] 3‑4.4遍历临时树节点node的孩子节点,如果一个序号为i的孩子节点childi非空,则压入堆栈nodeStack:nodeStack.push(node‑>childi);
[0058] 3‑5完成遍历以后,以顶点ID为关键字对列表MAP进行排序。
[0059] 步骤(4)、用户顶点u所属社区的查询。
[0060] 4‑1初始化临时树节点node;
[0061] 4‑2查询列表MAP,获得顶点u在树形索引中的节点位置,并将该节点位置赋予临时树节点node;
[0062] 4‑3对临时树节点node进行广度优先遍历,返回以临时树节点node为根节点的子树中包含的所有顶点的并集,执行以下操作:
[0063] 4‑3‑1初始化队列nodeQueue;
[0064] 4‑3‑2初始化临时树节点node;
[0065] 4‑3‑3初始化返回值k=node.k;
[0066] 4‑3‑4初始化返回的顶点集合
[0067] 4‑3‑5将临时树节点node推入队列nodeQueue:nodeQueue.push(node);
[0068] /*循环遍历以临时树节点node为根的树,队列nodeQueue为空时结束*/[0069] 4‑3‑6当队列nodeQueue非空时执行以下操作:
[0070] 使用临时树节点node保存弹出的队列头部元素nodeQueue.pop();
[0071] 合并临时树节点node包含的顶点至集合Vu;
[0072] 遍历临时树节点node的孩子节点,如果一个序号为i的孩子节点childi非空,则压入队列nodeQueue:nodeQueue.push(node‑>childi);
[0073] 4‑4返回顶点u的k值和所属的社区所包含的顶点集合Vu
[0074] 本发明有益效果如下:
[0075] 本发明通过对社交网络中的社区建立索引结构,提高了查询特定用户顶点所属社区的效率,这对大规模社交网络中的社区检索技术发展具有积极意义。
[0076] 本发明通过构建一个社交网络中所有社区的树形结构,用树形结构存储社区之间的嵌套关系。在一次性构建了整个社交网络的社区索引结构以后,就可以高效快捷地进行针对某个用户顶点的所属社区查询。

附图说明

[0077] 图1一个包含11个顶点的图G;
[0078] 图2 k‑核心社区的嵌套关系;
[0079] 图3 k‑核心社区的树形索引;
[0080] 图4本发明的查询过程示意图。
[0081] 表1各顶点的度数;
[0082] 表2各顶点按度数排序;
[0083] 表2‑A各顶点按度数排序;
[0084] 表2‑C各顶点按度数排序;
[0085] 表2‑J各顶点按度数排序;
[0086] 表3各顶点的k‑核心号码;
[0087] 表4顶点存储位置映射表;
[0088] 具体的实施方式
[0089] 下面结合附图和实施例对本发明作进一步说明。
[0090] 图1是一个包含11个顶点的图G,以下以该图为例简述一次实施。
[0091] 表1是图G中各顶点的度数。
[0092] 表2是各顶点按度数排序。
[0093] 表3是各顶点的k‑核心号码,由本发明步骤2‑1执行所得。
[0094] 例如顶点A、C、J的k‑核心社区的解构过程如下:
[0095] 取图G中升序排序后度数最小的顶点A,进行以下操作:
[0096] 向Core列表插入(A,0);
[0097] 对于顶点A的每个邻接顶点u(即u∈Neighbors(A))进行以下操作:
[0098] 顶点A度数为零,无邻接顶点,此处不需操作;
[0099] 从图G中删除顶点A,重新对顶点集合V中所有顶点按度数排序。排序后如表2‑A所示;
[0100] 取图G中升序排序后度数最小的顶点C,进行以下操作:
[0101] Core列表插入(C,1);
[0102] 对于顶点C的每个邻接顶点E(即E∈Neighbors(C))进行以下操作:
[0103] 由于degree[E]=3>degree[C]=1因此
[0104] degree[E]=degree[E]–1=2(C顶点的邻接顶点的度数减1);
[0105] 从图G中删除顶点C,重新对顶点集合V中所有顶点按度数排序。排序后如表2‑C所示;
[0106] 取图G中升序排序后度数最小的顶点J,进行以下操作:
[0107] Core列表插入(J,1);
[0108] 对于顶点J的每个邻接点L(即L∈Neighbors(J))进行以下操作:
[0109] 由于degree[L]=3>degree[J]=1因此
[0110] degree[L]=degree[L]–1=2(J邻接顶点的度数减1);
[0111] 从图G中删除J顶点,重新对V中所有顶点按度数排序。排序后如表2‑J所示;
[0112] 对图G剩余顶点重复A、C、J的操作过程,得到表3所示各顶点的k‑核心号码。
[0113] 表1各顶点的度数
[0114] A B C D E F G H I J L0 2 1 2 3 3 4 3 4 1 3
[0115] 表2顶点按度数排序
[0116]A C J B D E F H L I G
0 1 1 2 2 3 3 3 3 4 4
[0117] 表2‑A顶点按度数排序
[0118]C J B D E F H L I G
1 1 2 2 3 3 3 3 4 4
[0119] 表2‑C顶点按度数排序
[0120]J B D E F H L I G
1 2 2 2 3 3 3 4 4
[0121] 表2‑J顶点按度数排序
[0122]B D E L F H I G
2 2 2 2 3 3 4 4
[0123] 表3顶点的k‑核心号码
[0124] A C J L B D E F G H I0 1 1 2 2 2 2 3 3 3 3
[0125] 表4顶点存储位置映射
[0126] A B C D E F G H I J LN0 N3 N1 N3 N3 N5 N5 N5 N5 N2 N4
[0127] 图2是一个k‑核心社区的嵌套关系例子,显然顶点集合{F,G,H,I,J,L}构成一个连通子图,其最小k‑核心号码为1,它依次包含{F,G,H,I,L}和{F,G,H,I},这三个k‑核心社区存在嵌套关系;
[0128] 图3k‑核心社区的树形索引,由本发明步骤2‑2执行所得。
[0129] 初始化根节点root,包含信息(0,Vk0,Vk0‑else),其中,根节点的k值为0,Vk0包含图G中所有k‑核心号码为0的节点{A},Vk0‑else包含所有k‑核心号码非0的节点集合{C,J,L,B,D,E,F,G,H,I};
[0130] 将根节点推入队列;
[0131] 当队列非空时,取队列首部一个节点node,进行以下操作:
[0132] 对node节点包含的集合node.Vk‑else中所有节点,在图G中查找由这些顶点构成的连通子图,得到连通子图集合{Gsub1,Gsub2,…Gsubn},此处为{C,B,D,E}和{J,L,F,G,H,I};
[0133] 对顶点集合{C,B,D,E}进行以下操作:
[0134] 生成一个新的树节点node‑sub,包含信息(1,{C},{B,D,E}),此处树节点node‑sub的i值就是这个顶点最小k‑核心号码值1,集合Vki包含子图Gsubi中核心号码为1的所有顶点{C},集合Vki‑else包含这个连通子图中核心号码非1的顶点{B,D,E};
[0135] 将新生成树节点node‑sub置为树节点node的子节点;
[0136] 将树节点node‑sub推入队列;
[0137] 对顶点集合{J,L,F,G,H,I}进行同样的操作:
[0138] 将node节点的node.Vk‑else集合置空。
[0139] 对队列中所有元素进行同样的操作,直至队列为空,得到图3的k‑核心社区的树形索引右侧所示树形索引。
[0140] 表4图顶点‑树节点存储位置映射表,是执行步骤(3),即建立社交网络图顶点‑树节点对应关系后得到的;
[0141] 使用一个有序列表MAP存储社交网络图顶点‑树节点的对应关系,对步骤(2)中构建的树形索引结构进行深度优先遍历,获得社交网络图顶点‑树节点的对应关系后,添加该对应关系至MAP列表。
[0142] 图4详细描述了图1网络的一次社区搜索过程:
[0143] 例如查询顶点J所属的最大k‑核心社区,从表4所示的图顶点‑树节点存储位置映射表查到对应的树节点N2后,对以节点N2为根的子树进行广度优先遍历,返回该子树中所有树节点所包含的图顶点的并集,如{J,L,F,G,H,I},然后返回该结果。
版权所有:盲专网 ©2023 zlpt.xyz  蜀ICP备2023003576号