1.一种用户周边最具影响力社区的搜索方法,其特征在于:
将一个社交网络G(V,E)中的所有用户节点抽象,用节点的集合V表示;用户之间的联系表示成两个节点之间的边,使用边的集合E来表示;将两个用户之间的交互次数归一化,表示成两个节点之间的传播概率;得到社交网络G1(V,E);使用w(u,v)表示相邻用户u和v之间的传播概率;如果不相邻用户v0、vk之间存在一条路径 那么v0、vk之间的传播概率为 由于v0、vk之间可能存
在多条路径,选取w(P)取值最大的那一条为最大影响路径MIP;
对于一个用户节点s,一个社区对这个用户节点的影响力定义为:Pr(s|V(C))=1-Πv∈V(c)(1-wpath(Pv→s)) (式1)用户周边最具影响力社区搜索是指搜索用户节点s周边所有的社区C,比较周边所有的社区对用户节点s的影响力Pr,返回影响力最大的社区CMax。
2.根据权利要求1所述的一种用户周边最具影响力社区的搜索方法,其特征在于具体实现如下:步骤(1)、确定搜索空间:
使用社交网络G1(V,E)作为输入,通过迭代算法搜索用户节点s周边所有节点v,使得w(MIPs→v)>ε×p,其中ε是一个用户指定的最小传播概率值,只考虑对用户节点s影响力大于等于ε的节点;对于ε>w(MIPs→v)>ε×p的节点,虽然在计算一个社区对用户节点s的影响力时没用,但是在确定一个社区时,对于一个社区的拓扑结构有影响,所以搜索空间需要包含这部分节点;从而确定社交网络中,从用户节点s出发,所有能够以传播概率ε×p到达的用户节点集合V′;
然后以同样的方法确定用户节点集合V′中任一节点到V′中其它节点的传播概率,如果两个节点之间的传播概率大于p,而且这两个节点之间没有直接相连的边,那么依据社区定义的条件Ⅱ,在这两个节点之间增加一条边,作为下个步骤中社区搜索的判断依据;
步骤(1)结束后,得到一个子图G′(V′,E′),包含了用户节点s以及与节点s的MIP传播概率大于等于ε×p的所有用户节点,并且根据社区的定义,对于子图中所有MIP传播概率大于等于ε×p的用户节点对,如果没有直接相连的边,则增加这样一条边,传播概率为这两点间MIP的传播概率。
3.根据权利要求1或2所述的一种用户周边最具影响力社区的搜索方法,其特征在于步骤(1)具体实现如下:
1-1.初始化:
将(1,s)压入最大堆Heap,表示从用户节点s出发到s的传播概率为1;最大堆Heap用于保存搜索的中间结果,即(1,s)用于表示当前已知的从用户节点s出发到达该节点的MIP的传播概率和每个节点的名称;
初始化数组Prop,数组Prop元素将记录用户节点s到用户节点v最大的传播概率;
初始化数组Seen,数组Seen元素将记录用户节点s到用户节点v当前已知的的传播概率;
1-2.如果最大堆Heap非空,就执行以下操作:
从最大堆Heap中弹出一个用户节点v以及从s出发到v的传播概率;
如果Prop数组中不存在下标为v的元素,那么插入一条以v为下标,值为用户节点s出发到用户节点v的传播概率的记录;
如果Prop数组中已存在下标为v的元素,则用户节点s出发到用户节点v的MIP已经找到;重新执行步骤1-2,即从最大堆Heap中又弹出一个节点进行处理;
遍历用户节点v的所有相邻节点,执行以下操作:
取用户节点v的一个相邻节点u,判断从用户节点s出发到达用户节点u的传播概率tmp_prop,即:tmp_prop=Prop[v]×w(v,u);其中w(v,u)指代传播概率;
如果tmp_prop≥εp,且用户节点u还没包含在数组SeenSeen里,或者tmp_prop≥Seen[u],那么将(tmp_prop,u)压入最大堆Heap;
由堆数据结构的性质可知,Heap将会根据tmp_prop的值自动进行排序,将这对值放到合适的位置,下次执行弹出操作时,保证将具有最大传播概率的节点弹出;同时数组Seen中的Seen[u]值更新为tmp_prop;
如果tmp_prop<εp,那么意味着从用户节点s出发到达用户节点u的传播概率不满足要求,不做任何操作;
步骤1-2循环结束后,得到Prop数组,包含了从用户节点s出发,所有传播概率大于等于ε×p的用户节点;
1-3.去除G1(V,E)中所有其它不包含在Prop数组中的节点,得到一个子图G′(V′,E′);
1-4.对于Prop数组包含的每一个节点v′,以v′为源节点,执行步骤1-1和1-2操作,其中tmp_prop判断条件从εp变为p,得到Propv′数组;对于Propv′数组中的每一个用户节点u′检查在子图G′(V′,E′)中是否存在边(v′,u′),如果不存在,则在子图G′(V′,E′)添加一条边(v′,u′),传播概率为用户节点u′在Prop数组中对应的值。
4.根据权利要求3所述的一种用户周边最具影响力社区的搜索方法,其特征在于包括步骤(2)搜索用户节点s周边的社区;
在该步骤的社区搜索过程中,将对搜索形成的局部搜索范围所包含的节点与当前已知的最具影响力社区CMax进行比较,如果这个局部搜索范围所包含的节点对用户节点s总和影响力已经小于CMax,即这个局部搜索范围内所有节点都属于某个社区,其对s的影响力也比CMax小,则结束这个方向的搜索,具体方法如下:
2-1.将步骤(1)获得的子图G′(V′,E′)重新命名为G2(V,E),在G2(V,E)中搜索用户节点s周边的社区;
2-2.对于一个用户节点v,使用Γ(v)表示图G2(V,E)中所有与用户节点v邻接的用户节点,即Γ(v)={w∈V|(v,w)∈E};
对于一个V的子集 有G(W)=(W,E(W)),如果E(W)={(v,w)∈W×W|(v,w)∈E},那么称G(W)为G2(V,E)导出的一个子图,同时用|W|表示W中用户节点的个数;
对于导出的子图G(W),如果对于所有的用户节点v,w∈W,都有(v,w)∈E(W),那么导出的子图G(W)就是完全的;
搜索用户节点s周边的社区,就是遍历用户节点s周边的最大团;
2-3.遍历所有最大团的搜索过程是一个深度优先搜索的过程;
使用全局变量Q表示搜索过程中已发现的、构成一个完全子图的节点;在开始的时候,变量Q是一个空集合,使用一个递归的过程EXPAND逐步的向整个用户节点空间V扩展Q,使完全子图逐步变大,直至最终获得一个最大的完全子图,或者最大团,或者称一个社区;
使用Q={p1,p2,…,pd}表示算法在某个阶段时的Q的状态,考虑节点集合SUBG=V∩Γ(p1)∩Γ(p2)∩…∩Γ(pd)显然在算法的初始阶段,Q是空的集合,SUBG=V;
当 时,Q显然是一个最大的完全子图,或者一个最大团,或者一个社区;因为时,对于每个节点q∈SUBG,能够扩展Q∪{q},使Q变成一个更大的子图;因此对于所有的q∈SUBG,使用下式表示这个过程:SUBGq=SUBG∩Γ(q)
在SUBGq上递归的使用过程EXPAND,发现更大的完全子图,且包含Q∪{q};
这个搜索过程可以用一个搜索森林来表示,或者说是许多搜索树的集合来表示;这些树的根节点是V中的用户节点,对于每个节点q∈SUBG,SUBGq中的用户节点其实是节点q的邻接节点;这样,从根节点到任何一个叶子节点这条路径上的节点集合构成了一个完全子图或者团;
显然,缩短搜索森林中不必须的搜索过程会加快整个搜索速度;
如果使用FINI表示算法已经搜索过的节点集合,CAND表示等待搜索的结合集合,那么:SUBG=FINI∪CAND,此时
算法初始化的时候 CAND=SUBG;
搜索q用户节点时,只需考虑q的所有邻接用户节点,因此
FINIq=FINI∩Γ(q),CANDq=CAND∩Γ(q);
SUBGq=FINIq∪CANDq
在选取搜索节点的时候,为了最大化完全子图,优先考虑具有最多邻接用户节点的节点,也即每次都选取|CAND∩Γ(q)|中最大的节点进行扩展,|CAND∩Γ(q)|表示集合CAND∩Γ(q)中用户节点的个数;
在搜索过程中扩展q节点的阶段,由于搜索范围局限于q的邻接节点,搜索范围越来越小,根据(式-1),可知节点集合Pr(s|Q∪{q}∪SUBGq)的值是递减的;因此可以将Pr(s|Q∪{q}∪SUBGq)的值与当前已知的最具影响力社会Pr(s|CMax)的值做比较,如果Pr(s|Q∪{q}∪SUBGq)
在搜索的过程中扩展q节点的阶段,如果|Q∪{q}∪SUBGq|
5.根据权利要求4所述的一种用户周边最具影响力社区的搜索方法,其特征在于步骤(2)中初始化 后,调用的递归过程EXPAND(CAND,FINI,Q)步骤具体如下:(2-1)如果 那么CMax=Q然后返回;
(2-2)选择一个节点u,使|CAND∩Γ(u)|的值在SUBG中取最大,对节点u进行扩展;
(2-3)对于CAND\Γ(u)中的每个节点v;
所述的CAND\Γ(u)表示在CAND集合中去除节点u的所有相邻节点;
(2-4)使T=Q∪{v}∪((FINI∪CAND)∩Γ(v));
表示当前已发现的最大团成员集合Q,当前正在扩展的v,和等待搜索的节点(FINI∪CAND)∩Γ(v)(2-5)如果Pr(s|T)
否则
(2-6)执行递归过程EXPAND(CAND∩Γ(v),FINI∩Γ(v),Q∪{v});
(2-7)CAND=CAND\{v};
表示在等待搜索的节点集合CAND中去除节点v;
(2-8)FINI=FINI∪{v};
表示添加节点v至已经结束搜索的节点集合FINI中;
(2-9)递归过程结束。
6.根据权利要求5所述的一种用户周边最具影响力社区的搜索方法,其特征在于步骤(3)、返回搜索结果:获取递归结束后结果中CMax集合的用户节点名称,返回用户节点s周边最具影响力社区CMax及其影响力。