一种高效的分布式大规模动态图k核维护方法与流程

文档序号:12271072阅读:来源:国知局

技术特征:

1.一种高效的分布式大规模动态图k核维护方法,其特征在于,当图没有发生变化时采用静态k时核维护子方法;

静态时k核维护子方法包括以下步骤:

(11)将图中所有顶点的当前核数初始化为自身的度数,并将当前核数信息传递给其邻居顶点,再将所有顶点加入任务队列;

(12)若队列为空,则结束流程;否则从任务队列中移除一个顶点,并求出此顶点的估算核数;

(13)若此顶点估算核数小于当前核数,则该顶点的最终核数为估算核数,再把最终核数传递给该顶点的邻居顶点,并将该顶点再次加入任务队列,并返回步骤(12);否则直接返回步骤(12)。

2.根据权利要求1所述的一种高效的分布式大规模动态图k核维护方法,其特征在于,所述步骤(12)中求各个顶点的估算核数值具体包括以下子步骤:

(121)当前顶点核数记为core_v,初始化数组count大小为core_v,数组内每个元素值为0;

(122)若当前顶点v还有未被访问的邻居顶点u,则选取core_u和core_v中较小的一个记为j,并且使数组count[j]增加1,之后返回到步骤(122);否则进入步骤(123);

(123)初始化为i=core_v;若i>2,则count[i-1]=count[i-1]+count[i],之后i=i-1,返回步骤(123);否则进入步骤(124);

(124)赋值i=core_v;

(125)若i>1,count[i]<i,则i=i-1,返回步骤(125);否则当前顶点的估算核数值即为i,结束流程。

3.一种高效的分布式大规模动态图k核维护方法,其特征在于,当图插入边时采用插入边时k核维护子方法;

插入边时k核维护子方法包括以下步骤:

(31)将图中每个顶点的当前核数初始化为自身的度数,初始化每个顶点的访问标志位visited为0,移除标志位removed为0,计算每个顶点的最大核度数(MCD)和纯核度数(PCD):

MCD(v)=|{u∈neighbor(v)|K(u)≥K(v)}|,

PCD(v)=|{u∈neighbor(v)|K(u)=K(v)^MCD(u)>K(v)orK(u)>K(v)}|,

其中,顶点u是顶点v的邻居顶点,K(u)表示顶点u的核数,K(v)表示顶点v的核数;

(32)对于插入的边<U,V>,选取核数较小的顶点作为根顶点root,根顶点root的核数为K;

(33)初始化根顶点root,使根顶点当前核数cd(root)等于PCD(root),visited[root]=1,并将根顶点root加入任务队列;

(34)若任务队列为空,则将所有满足visited[v]=1,removed[v]=0条件的顶点v的最终核数值等于K+1,结束流程;否则进入步骤(35);

(35)从任务队列中移除的一个顶点为v,若顶点v的当前核数cd(v)>K,则进入步骤(36),否则进入步骤(38);

(36)若v还有未被访问过的邻居顶点u,则进入步骤(37);否则结束流程;

(37)若邻居顶点u满足其最终核数k(u)=K,并且u的最大核度数MCD(u)>K,并且visited[u]=0,则将顶点u加入任务队列,并且使visited[u]=1,cd(u)=cd(u)+PCD(u),之后返回步骤(36);否则直接返回步骤(36)

(38)判断顶点removed[v]=0是否成立,是则使removed[v]=1,进入步骤(39),否则结束流程;

(39)若顶点v还有未被访问过的邻居顶点u,则进入步骤(40);否则结束流程;

(40)若顶点u的最终核数K(u)等于K,则使u的当前核数值cd(u)=cd(u)-1,进入步骤(401);否则返回到步骤(39);

(401)判断cd(u)=K,并且removed[u]=0是否成立,若成立则将顶点u作为新的顶点v,返回步骤(38);否则返回步骤(39)。

4.一种高效的分布式大规模动态图k核维护方法,其特征在于,当图删除边时采用删除边时k核维护子方法;

其中删除边时k核计算子方法包括以下步骤:

(41)将图中所有顶点的当前核数初始化为0,初始化每个顶点的访问标志位visited为0,解散标志位dismissed为0,计算每个顶点的最大核度数(MCD)和纯核度数(PCD);

(42)对于删除的边<U,V>,选取U和V中核数较小的顶点作为根顶点root,根顶点root的核数为K;

(43)当删除边的顶点U和顶点V的核数相等时,赋值visited[U]=1,cd[U]=MCD[U],若cd[U]<K,则将顶点U加入任务队列,之后进入步骤(44);否则直接进入步骤(44);

(44)更新visited[V]=1,cd[V]=MCD[V];若cd[U]<K,并且dismissed[v]=0则将顶点V加入任务队列,进入步骤(46);否则直接进入步骤(46);

(45)当删除边顶点U和顶点V的核数不相等时,更新visited[root]=1,cd[root]=MCD[root]将顶点root加入任务队列,若cd[root]<K,则进入步骤(46);否则直接进入步骤(46);

(46)若任务队列为空,则结束流程;否则设从任务队列开始进行递归移除操作的当前顶点为u,解散标志位dismissed[u]等于1,最终核数值K(u)=K(u)-1,之后进入步骤(47);

(47)若顶点u还有未遍历的邻居顶点,则进入步骤(48);否则返回步骤(46);

(48)若邻居顶点w的最终核数K(w)=K,则进入步骤(49);否则返回步骤(46);

(49)若访问标志位visited[w]=0,则当前核数cd(w)=cd(w)+PCD(w),并且visited[w]=1,之后进入步骤(50);否则直接进入步骤(50);

(50)更新w的当前核数cd(w)=cd(w)-1;

(501)若cd(w)<K并且dismissed[w]=0,则将w加入任务队列,回到步骤(46);否则直接回到步骤(46)。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1