一种数据处理方法及装置技术领域
本发明涉及计算机技术领域,尤其涉及一种数据处理方法及装置。
背景技术
最大流最小分割是图论中用于研究网络最优化的经典问题,最大流
最小分割算法被广泛应用于分布式图计算编程模型中。其中,
Push-Relabel算法为一种常用的最大流算法。
Push-Relabel算法主要分为两个操作:push操作和relabel操作。
其中,这里以活跃顶点a的push操作和relabel操作为例,对push和
relabel进行说明。Push(a,b)表示当顶点a的溢出量e(a)>0,a->b
边的残余容量c(a,b)>0,顶点a的高度d(a)=d(b)+1时,顶点a可以将
顶点a的余量压入顶点b,并从c(a,b)减去从顶点a压入顶点b的余量,
为b->a边的残余容量c(b,a)加上从顶点a压入顶点b的余量,直至
e(a)=0,d(b)为顶点b的高度;relabel(a)表示顶点a的余量e(a)>0,
但由于d(a)小于d(x),水流不出去时,重新设置顶点a的高度,使得d(a)=
min(d(x))+1。其中,d(x)为顶点a的任一相邻顶点的高度。
活跃顶点在执行push操作和relabel操作后,该活跃顶点的高度与
该活跃顶点的任一相邻顶点的高度应该符合Push-Relabel算法的正确性
条件,如上述实例中,在活跃顶点a执行push操作和relabel操作后,
d(b)≤d(a)+1。但是,当两个相邻的活跃顶点同时执行push操作和
relabel操作时,可能会由于两个相邻的活跃顶点之间存在数据竞争,违
背Push-Relabel算法的正确性。
例如,假设如图1所示的顶点u和顶点v均为活跃顶点,即e(u)
=7>0、e(v)=2>0、e(w)=0,且d(u)=4、c(u,v)=7,d(v)=3、c(v,w)=10,
d(w)=5。由于顶点u为活跃顶点,且e(u)=7>0、c(u,v)=7、d(u)=d(v)+1,
因此顶点u可以执行push(u,v),将顶点u的余量压入顶点v,如图1所
示,在顶点u执行push(u,v)后e(u)=0,顶点u则不需要执行Relabel(u)。
在顶点u执行push(u,v)的同时,由于顶点v为活跃顶点,且e(v)=2、
c(v,w)=10、(即顶点v的溢出量e(v)>0,且顶点u到顶点v的残余容
量c(u,v)>0),但是d(v)=3、d(w)=5,d(v)<d(w)=5,因此顶点v需要
执行Relabel(v),以使得d(v)=d(w)+1=6。顶点v执行Relabel(v)会将
顶点v的高度设置为6,此时v->u边的残余容量c(v,u)=9>0,但是d(v)
≥d(u)+1,违背Push-Relabel算法的正确性。
发明内容
本发明的实施例提供一种数据处理方法及装置,可以保证最大流
Push-Relabel算法应用于分布式图计算编程模型的正确性。
为达到上述目的,本发明的实施例采用如下技术方案:
本发明实施例的第一方面,提供一种数据处理方法,包括:
若顶点x在第一超步激活,所述顶点x到顶点y的残余容量
c(x,y)>0,且所述顶点x的高度d(x)=d(y)+1,则在所述第一超步执行
push(x,y),以将所述顶点x的余量f(x)=min(e(x),c(x,y))压入所述顶
点y,所述顶点x与所述顶点y相邻,d(y)为所述顶点y的高度,e(x)
为所述顶点x的溢出量;
若所述顶点x在第二超步激活,所述顶点x到顶点z的残余容量
c(x,z)大于0,且d(x)<d(z),则执行relabel(x),以使得
d(x)=min(d(z))+1,所述顶点z为顶点x的任一相邻顶点,d(z)为所述
顶点z的高度;
其中,所述第一超步与所述第二超步为相邻超步;所述第一超步为
偶数超步,所述第二超步为奇数超步,或者所述第一超步为奇数超步,
所述第二超步为偶数超步。
结合第一方面,在第一种可能的实现方式中,所述数据处理方法,
还包括:
若所述顶点x在所述第二超步激活,c(x,y)>0,且d(x)=d(y)+1,则
在所述第二超步的下一超步执行push(x,y),以将f(x)压入所述顶点y。
结合第一方面,在第二种可能的实现方式中,所述若顶点x在第一
超步激活,所述顶点x到顶点y的残余容量c(x,y)>0,且所述顶点x的
高度d(x)=d(y)+1,则在所述第一超步执行push(x,y),以将所述顶点x
的余量f(x)=min(e(x),c(x,y))压入所述顶点y,包括:
若所述顶点x在所述第一超步激活,所述顶点x不是预设0号顶点,
且c(x,y)>0,d(x)=d(y)+1,则获取所述顶点y的标识和c(x,y),所述
预设0号顶点为预先配置的用于统计顶点的relabel次数;
获取所述顶点x的余量f(x),f(x)=min(e(x),c(x,y));
从e(x)中减去f(x),从c(x,y)减去f(x),为所述顶点y到所述顶
点x的残余容量c(y,x)加上f(x),并向所述顶点y发送包含f(x)的消息,
直至e(x)=0。
结合第一方面以及上述任一种可能的实现方式,在第三种可能的实
现方式中,若所述顶点x监测到e(x)>0,所述顶点x自发激活所述顶点
x;
若所述顶点x接收到顶点k发送包含所述顶点k的余量f(k)的消
息,则所述顶点x被激活,f(k)=min(e(k),c(k,x)),所述顶点k与所
述顶点x相邻,e(k)为所述顶点k的余量,c(k,x)为所述顶点k到所述顶
点x的残余容量。
结合第一方面,在第四种可能的实现方式中,所述数据处理方法,
还包括:
在所述顶点x执行relabel(x)后,为所述预设0号顶点统计的
relabel次数加1。
结合第四种可能的实现方式,在第五种可能的实现方式中,所述数
据处理方法,还包括:
若顶点x在所述第一超步激活,且所述顶点x为预设0号顶点,则
获取所述预设0号顶点统计的relabel次数;
若所述预设0号顶点统计的relabel次数高于relabel次数阈值,
则激活所述预设0号顶点,以在所述第一超步的下一超步停止本次
push-relabel任务。
结合第四种可能的实现方式,在第六种可能的实现方式中,所述数
据处理方法,还包括:
若所述顶点x在第二超步激活,且所述顶点x为所述预设0号顶点,
则停止本次push-relabel任务。
结合第一方面,在第七种可能的实现方式中,所述数据处理方法,
还包括:
若所述顶点x在第二超步激活,且所述顶点x为汇点s,则为所述汇
点s的溢出量e(s)叠加e(s)。
结合第一种可能的实现方式,在第八种可能的实现方式中,所述若
所述顶点x在所述第二超步激活,c(x,y)>0,且d(x)=d(y)+1,则在所述
第二超步的下一超步执行push(x,y),以将f(x)压入所述顶点y,包括:
若所述顶点x在所述第二超步激活,所述顶点x不是预设0号顶点,
且所述顶点x不是汇点s,c(x,y)>0,且d(x)=d(y)+1,则在所述第二超
步的下一超步执行push(x,y),以将f(x)压入所述顶点y。
本发明实施例的第二方面,提供一种数据处理装置,包括:
流量压入单元,用于若顶点x在第一超步激活,所述顶点x到顶点y
的残余容量c(x,y)>0,且所述顶点x的高度d(x)=d(y)+1,则在所述第一
超步执行push(x,y),以将所述顶点x的余量f(x)=min(e(x),c(x,y))压
入所述顶点y,所述顶点x与所述顶点y相邻,d(y)为所述顶点y的高度,
e(x)为所述顶点x的溢出量;
高度调整单元,用于若所述顶点x在第二超步激活,所述顶点x到
顶点z的残余容量c(x,z)大于0,且d(x)<d(z),则执行relabel(x),
以使得d(x)=min(d(z))+1,所述顶点z为顶点x的任一相邻顶点,d(z)
为所述顶点z的高度;
其中,所述第一超步与所述第二超步为相邻超步;所述第一超步为
偶数超步,所述第二超步为奇数超步,或者所述第一超步为奇数超步,
所述第二超步为偶数超步。
结合第二方面,在第一种可能的实现方式中,所述流量压入单元,
还用于若所述顶点x在所述第二超步激活,c(x,y)>0,且d(x)=d(y)+1,
则在所述第二超步的下一超步执行push(x,y),以将f(x)压入所述顶点
y。
结合第二方面,在第二种可能的实现方式中,所述流量压入单元,
具体用于:
若所述顶点x在所述第一超步激活,所述顶点x不是预设0号顶点,
且c(x,y)>0,d(x)=d(y)+1,则获取所述顶点y的标识和c(x,y),所述
预设0号顶点为预先配置的用于统计其他顶点的relabel次数的顶点;
获取所述顶点x的余量f(x),f(x)=min(e(x),c(x,y));
从e(x)中减去f(x),从c(x,y)减去f(x),为所述顶点y到所述顶
点x的残余容量c(y,x)加上f(x),并向所述顶点y发送包含f(x)的消息,
直至e(x)=0。
结合第二方面和上述任一种可能的实现方式,在第三种可能的实现
方式中,所述数据处理装置还可以包括:
顶点激活单元,用于:
若所述顶点x监测到e(x)>0,所述顶点x自发激活所述顶点x;
或者,
若所述顶点x接收到顶点k发送包含所述顶点k的余量f(k)的消
息,则所述顶点x被激活,f(k)=min(e(k),c(k,x)),所述顶点k与所
述顶点x相邻,e(k)为所述顶点k的余量,c(k,x)为所述顶点k到所述顶
点x的残余容量。
结合第二方面,在第四种可能的实现方式中,所述数据处理装置还
可以包括:
次数统计单元,用于在所述高度调整单元控制顶点x执行relabel(x)
后,为所述预设0号顶点统计的relabel次数加1。
结合第四种可能的实现方式,在第五种可能的实现方式中,所述数
据处理装置还可以包括:
获取单元,用于若顶点x在所述第一超步激活,且所述顶点x为预
设0号顶点,则获取所述次数统计单元统计的relabel次数;
顶点激活单元,用于若所述预设0号顶点统计的relabel次数高于
relabel次数阈值,则激活所述预设0号顶点,以在所述第一超步的下一
超步停止本次push-relabel任务。
结合第五种可能的实现方式,在第六种可能的实现方式中,所述数
据处理装置还可以包括:
任务控制单元,用于若所述顶点x在第二超步激活,且所述顶点x
为所述预设0号顶点,则停止本次push-relabel任务。
结合第二方面,在第七种可能的实现方式中,所述数据处理装置还
可以包括:
汇点控制单元,用于若所述顶点x在第二超步激活,且所述顶点x
为汇点s,则为所述汇点s的溢出量e(s)叠加e(s)。
结合第一方面,在第八种可能的实现方式中,所述流量压入单元,
具体用于:
若所述顶点x在所述第二超步激活,所述顶点x不是预设0号顶点,
且所述顶点x不是汇点s,c(x,y)>0,且d(x)=d(y)+1,则在所述第二超
步的下一超步执行push(x,y),以将f(x)压入所述顶点y。
本发明实施例提供的数据处理方法及装置,若顶点x在第一超步激
活,顶点x到顶点y的残余容量c(x,y)>0,且顶点x的高度d(x)=d(y)+1,
则在第一超步执行push(x,y),以将顶点x的余量f(x)=min(e(x),c(x,y))
压入顶点y;若顶点x在第二超步激活,顶点x到顶点z的残余容量c(x,z)
大于0,且d(x)<d(z),则执行relabel(x),以使得d(x)=min(d(z))+1,
顶点z为顶点x的任一相邻顶点,d(z)为顶点z的高度。
通过本方案,顶点x(任一顶点)只会在第一超步被激活,且满足
push操作的条件时,才会执行push操作,并且,顶点x(任一顶点)只
会在第二超步激活,且满足relabel操作的条件时,才会执行relabel
操作。即所有的顶点x都只会在第一超步执行push操作,在第二超步执
行relabel操作,不会出现由于两个相邻的活跃顶点同时执行push操作
和relabel操作时,从而违背Push-Relabel算法的正确性的问题;进而
可以保证最大流Push-Relabel算法应用于分布式图计算编程模型的正确
性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将
对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见
地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技
术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获
得其他的附图。
图1为本发明背景技术中的一种push-relabel算法的状态图;
图2为本发明实施例提供的一种数据处理方法流程图;
图3为本发明实施例提供的一种push-relabel算法的状态图;
图4为本发明实施例提供的另一种数据处理方法流程图;
图5为本发明实施例提供的一种数据处理装置的组成示意图;
图6为本发明实施例提供的另一种数据处理装置的组成示意图;
图7为本发明实施例提供的另一种数据处理装置的组成示意图;
图8为本发明实施例提供的另一种数据处理装置的组成示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案
进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实
施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术
人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本
发明保护的范围。
实施例1
本发明实施例提供一种数据处理方法,如图2所示,该数据处理方
法包括:
S101、若顶点x在第一超步激活,顶点x到顶点y的残余容量
c(x,y)>0,且顶点x的高度d(x)=d(y)+1,则在第一超步执行push(x,y),
以将顶点x的余量f(x)=min(e(x),c(x,y))压入顶点y。
其中,顶点x为任一顶点,顶点x与顶点y相邻(即顶点y为顶点x
的相邻顶点),d(y)为顶点y的高度,e(x)为顶点x的溢出量。
本发明实施例中顶点x激活可以包括:若所述顶点x监测到e(x)>0,
顶点x自发激活顶点x;或者,若顶点x接收到顶点k发送包含顶点k
的余量f(k)的消息,则顶点x被激活,f(k)=min(e(k),c(k,x)),顶
点k与顶点x相邻,e(k)为顶点k的余量,c(k,x)为顶点k到顶点x的残
余容量。
需要说明的是,顶点x接收到顶点k发送包含顶点k的余量f(k)
的消息即表示顶点k将顶点k的余量f(k)压入顶点x,在顶点x接收
到顶点k发送包含顶点k的余量f(k)的消息(即顶点k将顶点k的余
量f(k)压入顶点x)后,e(x)≥f(k)>0。
当顶点x在第一超步激活,且顶点x满足push操作的条件(即顶点
x到顶点y的残余容量c(x,y)>0,且顶点x的高度d(x)=d(y)+1)时,则
可以在第一超步执行push(x,y),以将顶点x的余量
f(x)=min(e(x),c(x,y))压入顶点y。
例如,如图3所示,在第一超步顶点u的溢出量e(u)=7>0,即顶
点u在第一超步激活(即顶点u在第一超步为活跃顶点),且顶点u满
足push操作的条件(即顶点u到顶点v的残余容量c(u,v)=7>0,且顶点
u的高度d(u)=d(v)+1),因此顶点u可以执行push(u,v),将顶点u的
余量压入顶点v。
如图3所示,在第一超步顶点v的溢出量e(v)=2>0,即顶点v在
第一超步激活(即顶点v在第一超步为活跃顶点),但是由于顶点v不
满足push操作的条件(即顶点v到顶点u的残余容量c(v,u)=0;或者,
顶点v到顶点w的残余容量c(v,w)=10,但顶点v的高度d(v)<d(w),
因此顶点v不可以执行push(v,u)或者push(v,w)。
S102、若顶点x在第二超步激活,顶点x到顶点z的残余容量c(x,z)
大于0,且d(x)<d(z),则执行relabel(x),以使得d(x)=min(d(z))+1,
顶点z为顶点x的任一相邻顶点,d(z)为顶点z的高度。
其中,第一超步与第二超步为相邻超步;第一超步为偶数超步,第
二超步为奇数超步,或者第一超步为奇数超步,第二超步为偶数超步。
当顶点x在第二超步激活,且顶点x满足relabel操作的条件(即
顶点x到顶点z的残余容量c(x,z)大于0,且d(x)<d(z))时,则可以在
第一超步执行relabel(x),以使得d(x)=min(d(z))+1。
例如,如图3所示,在第二超步顶点v的溢出量e(v)=2>0,即顶
点v在第二超步激活(即顶点v在第二超步为活跃顶点),且顶点v满
足Relabel操作的条件(即顶点v到顶点u的残余容量c(v,u)=7>0,但
顶点v的高度d(v)=d(u)-1<d(u)),因此顶点v可以执行relabel(v),,
以使得d(v)=d(u)+1。
需要说明的是,本发明实施例中方法步骤的执行主体可以为数据处
理装置,也可以为计算机的中央处理器(Central Processing Unit,CPU)。
其中,数据处理装置可以为计算机中用于控制在分布式图计算编程模型
中执行Push-Relabel算法的控制模块,本发明实施例对此不做限制。
本发明实施例提供的数据处理方法,若顶点x在第一超步激活,顶
点x到顶点y的残余容量c(x,y)>0,且顶点x的高度d(x)=d(y)+1,则在
第一超步执行push(x,y),以将顶点x的余量f(x)=min(e(x),c(x,y))压
入顶点y;若顶点x在第二超步激活,顶点x到顶点z的残余容量c(x,z)
大于0,且d(x)<d(z),则执行relabel(x),以使得d(x)=min(d(z))+1,
顶点z为顶点x的任一相邻顶点,d(z)为顶点z的高度。
通过本方案,顶点x(任一顶点)只会在第一超步被激活,且满足
push操作的条件时,才会执行push操作,并且,顶点x(任一顶点)只
会在第二超步激活,且满足relabel操作的条件时,才会执行relabel
操作。即所有的顶点x都只会在第一超步执行push操作,在第二超步执
行relabel操作,不会出现由于两个相邻的活跃顶点同时执行push操作
和relabel操作时,从而违背Push-Relabel算法的正确性的问题。
如图3所示,在第一超步执行了push(u,v)(此时顶点u为顶点x)
之后,使得u->v边的残余容量c(u,v)=0,而v->u边的残余容量
c(v,u)=7>0;在第二超步执行relabel(v)(此时顶点v为顶点x)时,
则会由于v->u边的残余容量c(v,u)=7>0,且顶点v的相邻顶点中,顶点
u的高度d(u)小于顶点w的高度d(w),从而设置d(v)=d(u)+1=5。
由此,即使相邻的活跃顶点u和活跃顶点v分别执行了push操作和
relabel操作,顶点u和顶点v的高度符合d(v)≤d(u)+1,即可以保证
最大流Push-Relabel算法应用于分布式图计算编程模型的正确性。
实施例2
本发明实施例提供一种数据处理方法,如图4所示,该数据处理方
法包括:
S201、当顶点x激活时,判断顶点x在第一超步激活或者顶点x在
第二超步激活。
当e(x)>0时,顶点x激活(即顶点x为活跃顶点)。示例性的,顶
点x可以在监测到e(x)>0时,自发激活顶点x;或者,若顶点x接收到
顶点k发送包含顶点k的余量f(k)的消息,则顶点x被激活,f(k)
=min(e(k),c(k,x)),顶点k与顶点x相邻,e(k)为顶点k的余量,c(k,x)
为顶点k到顶点x的残余容量。其中,顶点x接收到顶点k发送包含顶
点k的余量f(k)的消息即表示顶点k将顶点k的余量f(k)压入顶点
x,在顶点x接收到顶点k发送包含顶点k的余量f(k)的消息(即顶点
k将顶点k的余量f(k)压入顶点x)后,e(x)≥f(k)>0。
需要说明的是,本发明实施例中的第一超步与第二超步为相邻超步。
在一种应用场景中,第一超步为偶数超步,第二超步为奇数超步。在另
一种应用场景中,第一超步为奇数超步,第二超步为偶数超步。
具体的,若顶点x在第一超步激活,则继续执行S202-S207;若顶点
x在第二超步激活,则继续执行S208-S213。
S202、若顶点x在第一超步激活,则判断顶点x是否为预设0号顶
点。
其中,预设0号顶点为预先配置的用于统计其他顶点的relabel次
数的顶点。
若顶点x在第一超步激活,顶点x不是预设0号顶点,则执行
S203-S205;若顶点x在第一超步激活,顶点x为预设0号顶点,则执行
S206-S207:
S203、若顶点x在第一超步激活,顶点x不是预设0号顶点,且
c(x,y)>0,d(x)=d(y)+1,则获取顶点y的标识和c(x,y)。
当顶点x在第一超步激活,顶点x不是预设0号顶点,且顶点x满
足push操作的条件(即顶点x到顶点y的残余容量c(x,y)>0,且顶点x
的高度d(x)=d(y)+1)时,则可以在第一超步执行push(x,y)。首先,可
以获取顶点y的标识和c(x,y),然后将获取的顶点y的标识和c(x,y)
收集起来,保存至备选集candidates中。其中,选集candidates可以
为预配置的用于存储顶点信息(包括顶点的标识、一顶点到另一顶点的
残余容量、顶点的溢出量等)的存储节点。
S204、获取顶点x的余量f(x),f(x)=min(e(x),c(x,y))。
其中,当顶点x的溢出量e(x)小于顶点x到顶点y的残余容量c(x,y)
时,f(x)=e(x);当顶点x的溢出量e(x)大于等于顶点x到顶点y的残余
容量c(x,y)时,f(x)=c(x,y)。
S205、从e(x)中减去f(x),从c(x,y)减去f(x),为顶点y到顶点x
的残余容量c(y,x)加上f(x),并向顶点y发送包含f(x)的消息,直至
e(x)=0。
S206、若顶点x在第一超步激活,且顶点x为预设0号顶点,则获
取预设0号顶点统计的relabel次数。
S207、若预设0号顶点统计的relabel次数高于relabel次数阈值,
则激活预设0号顶点,以在第一超步的下一超步停止本次push-relabel
任务。
其中,当预设0号顶点在第一超步激活时,则可以获取预设0号顶
点统计的relabel次数,并在预设0号顶点统计的relabel次数高于
relabel次数阈值时,激活预设0号顶点。并且,由于本发明实施例所保
护的方法中,在第一超步执行push操作,在第二超步执行relabel操作,
因此,为了保证push-relabel操作的完整性,则可以在第一超步的下一
超步(即下一个第二超步)停止本次push-relabel任务。
S208、若顶点x在第二超步激活,则确定顶点x是否为预设0号顶
点或者汇点s。
具体的,若顶点x在第二超步激活,顶点x不是预设0号顶点,且
顶点x不是汇点s,则继续执行S209-S210或S213;若顶点x在第二超
步激活,且顶点x为预设0号顶点,则继续执行S211;若顶点x在第二
超步激活,且顶点x为汇点s,则继续执行S212。
S209、若顶点x在第二超步激活,顶点x不是预设0号顶点,且顶
点x不是汇点s,顶点x到顶点z的残余容量c(x,z)大于0,d(x)<d(z),
则执行relabel(x),以使得d(x)=min(d(z))+1。
其中,顶点z为顶点x的任一相邻顶点,d(z)为顶点z的高度。
S210、在顶点x执行relabel(x)后,为预设0号顶点统计的relabel
次数加1。
S211、若顶点x在第二超步激活,且顶点x为预设0号顶点,则停止
本次push-relabel任务。
S212、若顶点x在第二超步激活,且顶点x为汇点s,则为汇点s的
溢出量e(s)叠加e(s)。
S213、若顶点x在第二超步激活,顶点x不是预设0号顶点,且顶
点x不是汇点s,c(x,y)>0,且d(x)=d(y)+1,则在第二超步的下一超步
执行push(x,y),以将f(x)压入顶点y。
本发明实施例提供的数据处理方法,若顶点x在第一超步激活,顶
点x到顶点y的残余容量c(x,y)>0,且顶点x的高度d(x)=d(y)+1,则在
第一超步执行push(x,y),以将顶点x的余量f(x)=min(e(x),c(x,y))压
入顶点y;若顶点x在第二超步激活,顶点x到顶点z的残余容量c(x,z)
大于0,且d(x)<d(z),则执行relabel(x),以使得d(x)=min(d(z))+1,
顶点z为顶点x的任一相邻顶点,d(z)为顶点z的高度。
通过本方案,顶点x(任一顶点)只会在第一超步被激活,且满足
push操作的条件时,才会执行push操作,并且,顶点x(任一顶点)只
会在第二超步激活,且满足relabel操作的条件时,才会执行relabel
操作。即所有的顶点x都只会在第一超步执行push操作,在第二超步执
行relabel操作,不会出现由于两个相邻的活跃顶点同时执行push操作
和relabel操作时,从而违背Push-Relabel算法的正确性的问题。
如图3所示,在第一超步执行了push(u,v)(此时顶点u为顶点x)
之后,使得u->v边的残余容量c(u,v)=0,而v->u边的残余容量
c(v,u)=7>0;在第二超步执行relabel(v)(此时顶点v为顶点x)时,
则会由于v->u边的残余容量c(v,u)=7>0,且顶点v的相邻顶点中,顶点
u的高度d(u)小于顶点w的高度d(w),从而设置d(v)=d(u)+1=5。
由此,即使相邻的活跃顶点u和活跃顶点v分别执行了push操作和
relabel操作,顶点u和顶点v的高度符合d(v)≤d(u)+1,即可以保证
最大流Push-Relabel算法应用于分布式图计算编程模型的正确性。
实施例3
本发明实施例提供一种数据处理装置,如图5所示,该数据处理装
置,包括:流量压入单元31和高度调整单元32。
流量压入单元31,用于若顶点x在第一超步激活,所述顶点x到顶
点y的残余容量c(x,y)>0,且所述顶点x的高度d(x)=d(y)+1,则在所述
第一超步执行push(x,y),以将所述顶点x的余量f(x)=min(e(x),c(x,y))
压入所述顶点y,所述顶点x与所述顶点y相邻,d(y)为所述顶点y的高
度,e(x)为所述顶点x的溢出量。
高度调整单元32,用于若所述顶点x在第二超步激活,所述顶点x
到顶点z的残余容量c(x,z)大于0,且d(x)<d(z),则执行relabel(x),
以使得d(x)=min(d(z))+1,所述顶点z为顶点x的任一相邻顶点,d(z)
为所述顶点z的高度。
其中,所述第一超步与所述第二超步为相邻超步;所述第一超步为
偶数超步,所述第二超步为奇数超步,或者所述第一超步为奇数超步,
所述第二超步为偶数超步。
进一步的,所述流量压入单元31,还用于若所述顶点x在所述第二
超步激活,c(x,y)>0,且d(x)=d(y)+1,则在所述第二超步的下一超步执
行push(x,y),以将f(x)压入所述顶点y。
进一步,所述流量压入单元31,具体用于:
若所述顶点x在所述第一超步激活,所述顶点x不是预设0号顶点,
且c(x,y)>0,d(x)=d(y)+1,则获取所述顶点y的标识和c(x,y),所述
预设0号顶点为预先配置的用于统计其他顶点的relabel次数的顶点;
获取所述顶点x的余量f(x),f(x)=min(e(x),c(x,y));
从e(x)中减去f(x),从c(x,y)减去f(x),为所述顶点y到所述顶
点x的残余容量c(y,x)加上f(x),并向所述顶点y发送包含f(x)的消息,
直至e(x)=0。
进一步的,如图6所示,该数据处理装置还可以包括:次数统计单
元33。
次数统计单元33,用于在所述高度调整单元32控制顶点x执行
relabel(x)后,为所述预设0号顶点统计的relabel次数加1。
进一步的,如图7所示,该数据处理装置还可以包括:获取单元34
和顶点激活单元35。
获取单元34,用于若顶点x在所述第一超步激活,且所述顶点x为
预设0号顶点,则获取所述次数统计单元统计的relabel次数。
顶点激活单元35,用于若所述预设0号顶点统计的relabel次数高
于relabel次数阈值,则激活所述预设0号顶点,以在所述第一超步的
下一超步停止本次push-relabel任务。
进一步的,顶点激活单元35,还用于:
若所述顶点x监测到e(x)>0,所述顶点x自发激活所述顶点x;
或者,若所述顶点x接收到顶点k发送包含所述顶点k的余量f(k)
的消息,则所述顶点x被激活,f(k)=min(e(k),c(k,x)),所述顶点k
与所述顶点x相邻,e(k)为所述顶点k的余量,c(k,x)为所述顶点k到所
述顶点x的残余容量。
进一步的,如图8所示,该数据处理装置还可以包括:任务控制单
元36。
任务控制单元36,用于若所述顶点x在第二超步激活,且所述顶点
x为所述预设0号顶点,则停止本次push-relabel任务。
进一步的,该数据处理装置还可以包括:汇点控制单元。
汇点控制单元,用于若所述顶点x在第二超步激活,且所述顶点x
为汇点s,则为所述汇点s的溢出量e(s)叠加e(s)。
进一步的,所述流量压入单元31,具体用于:若所述顶点x在所述
第二超步激活,所述顶点x不是预设0号顶点,且所述顶点x不是汇点s,
c(x,y)>0,且d(x)=d(y)+1,则在所述第二超步的下一超步执行
push(x,y),以将f(x)压入所述顶点y。
需要说明的是,本发明实施例提供的数据处理装置中部分功能模块
的具体描述可以参考方法实施例中的对应内容,本实施例这里不再详细
赘述。
本发明实施例提供的数据处理装置,若顶点x在第一超步激活,顶
点x到顶点y的残余容量c(x,y)>0,且顶点x的高度d(x)=d(y)+1,则在
第一超步执行push(x,y),以将顶点x的余量f(x)=min(e(x),c(x,y))压
入顶点y;若顶点x在第二超步激活,顶点x到顶点z的残余容量c(x,z)
大于0,且d(x)<d(z),则执行relabel(x),以使得d(x)=min(d(z))+1,
顶点z为顶点x的任一相邻顶点,d(z)为顶点z的高度。
通过本方案,顶点x(任一顶点)只会在第一超步被激活,且满足
push操作的条件时,才会执行push操作,并且,顶点x(任一顶点)只
会在第二超步激活,且满足relabel操作的条件时,才会执行relabel
操作。即所有的顶点x都只会在第一超步执行push操作,在第二超步执
行relabel操作,不会出现由于两个相邻的活跃顶点同时执行push操作
和relabel操作时,从而违背Push-Relabel算法的正确性的问题。
如图3所示,在第一超步执行了push(u,v)(此时顶点u为顶点x)
之后,使得u->v边的残余容量c(u,v)=0,而v->u边的残余容量
c(v,u)=7>0;在第二超步执行relabel(v)(此时顶点v为顶点x)时,
则会由于v->u边的残余容量c(v,u)=7>0,且顶点v的相邻顶点中,顶点
u的高度d(u)小于顶点w的高度d(w),从而设置d(v)=d(u)+1=5。
由此,即使相邻的活跃顶点u和活跃顶点v分别执行了push操作和
relabel操作,顶点u和顶点v的高度符合d(v)≤d(u)+1,即可以保证
最大流Push-Relabel算法应用于分布式图计算编程模型的正确性。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解
到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,
实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,
即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或
者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考
前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装
置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例
仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能
划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结
合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一
点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过
一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其
它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开
的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于
一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选
择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单
元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集
成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以
采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品
销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的
理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者
该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软
件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备
(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)
执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质
包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机
存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以
存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不
局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,
可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本
发明的保护范围应以所述权利要求的保护范围为准。