首页 > 代码库 > 等价结点
等价结点
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)
等价结点