首页 > 代码库 > 等价结点

等价结点

1. 等价结点

在有向图中,若结点u到结点v之间有一条边,则称u为v的一个父节点,v是u的孩子结点,显然在图中结点可具有多个父节点与多个孩子结点。当结点u与结点v的孩子、父亲完全相同时,称u与v为等价结点。

2. RPC方法

该方法的核心思想为将结点按照其邻居结点进行排序,若两个节点为等价结点则两个结点在排序结果中必然相邻。

2.1 排序

先按照父结点进行排序,若两个结点父结点相同需继续判断孩子结点,若孩子结点也相同,则两个结点相等。

令结点u的父结点Fu = {f1,f1…},孩子结点Cu = {c1,c2…},结点v的父结点Fv = {f1’, f2’…},孩子结点Cv = {c1’, c2’…},其中每个结点的孩子与父亲均为从小到大的顺序。

父结点比较:

Fui表示结点u的第i个父结点,同理Fvi表示结点v的第i个孩子;Cui与Cvi分别表示结点u与v的第i个孩子结点。令i = 0,

(1) 若i同时大于结点u与v的父结点的个数,则u = v,比较结束;

(2) 若i大于结点u的父结点的个数,则u <v,比较结束;

(3) 若i大于结点v的父结点的个数,则v> u,比较结束;

(4) 若Fui > Fvi,则u > v;

(5) 若Fui < Fvi,则u < v;

(6) 若Fui = Fvi,则i++,返回(1)。

孩子结点比较与父结点比较类似。

2.2 查找等价类

令2.1中排序结果R = {a,b, c, d, e…},令ri为R中第i个结点。令i = 0,

(1) 若i > |V| – 1,其中V是图中的结点,运行结束;

(2) 若ri与ri+1的父亲与孩子结点完全相同,则结点ri与ri+1等价;反之ri与ri+1不等价。返回(1)继续执行。

 

参考:基于图压缩的k可达查询处理(软件学报2014)

等价结点