Page 396 - 《软件学报》2025年第4期
P. 396

1802                                                       软件学报  2025  年第  36  卷第  4  期



                                                                         ′
                              ′      ′                                 (S ,S R ) ;
                                   ,
                 25.    更新   C  ,   C R X  ,    X R  使其中任意顶点均可用于扩展当前解
                              L      L                                   L
                                      ,
                 26.    Branch(  S  ′   ,   S R C L \{v} C R X L X R  );
                                            ,
                                               ,
                                                   ,
                                L
                                                   ,
                                         ,
                                  ,
                                      ,
                 27.    Branch(  S L S R C L C R X L \{v} X R  );
                                             ,
                 28.  end if
                    算法  1  主要调用   Branch  函数来给定二部图    G  中所有的极大     k-缺陷二团, 该函数需要调用        6  个参数, 分别为:
                 S L  、  S R  、  C L  、  C R  、  X L  以及  X R  . 其中  (S L ,S R ) 表示当前解,    (C L ,C R ) 表示候选集以及  (X L ,X R ) 表示排除集. 初始阶
                                                                         R  (第  1  行). 函数  Branch  在递归调用之
                 段, 参数  S L  、  S R  、   X L  和   X R  均设置为空集, 而  C L  和  C R  分别设置为   L 与
                 前, 首先需要判断     (C L ,C R ) 和  (X L ,X R ) 是否为空集, 若  (C L ,C R ) 为空集则表示没有顶点可用于扩展当前解, 该递归调
                 用终止迭代    (第  3、7  行). 与此同时, 若   (X L ,X R ) 也为空集, 则当前解   (S L ,S R ) 在  G 中一定是一个极大解, 可作为结果
                 输出  (第  4、5  行), 因为二部图  G 中在   (C L ,C R ) 与  (X L ,X R ) 之外的顶点一定无法扩展  (C L ,C R ) .
                    然后, 函数   Branch  计算  (S L ,S R ) 在候选集  (C L ,C R ) 中的非共同邻居集合  D L  与  D R   (第  9  行). 若   D L  与  D R  中存在
                 一个集合满足定理       1  中用于扩展当前解的条件, 则算法利用其中之一来执行对称集合枚举技术                        (第  10  或  21  行).
                 上界的剪枝技术, 线性时间的更新技术以及分支优化技术.
                                                                                  ¯
                 值得注意的是, 当前解       (S L ,S R )  中可能已经存在一些边缺失,    D L  或  D R  中最多有  k −d(S L ,S R )  个顶点加入  (S L ,S R )
                                                                ¯
                        ¯                                 s  k −d(S L ,S R ) (第  9  行), 基于定理     s+1 个子
                 中, 其中  d(S L ,S R ) 表示子图   (S L ,S R ) 中缺失的边数. 令   为                 1, 最多可产生
                                                                       } , 函数  Branch  首先调用子递归枚举不包含
                 分支. 假设函数是从      D L  中选择顶点执行子递归调用, 设       D L = {v 1 ,...,v d L
                 v 1  的极大  k-缺陷二团  (第  11  行), 其次枚举包含  {v 1 ,...,v i−1 } 但不包含  v i  的极大  k-缺陷二团  (第  12–17  行), 最后枚举
                     {v 1 ,...,v s } 的极大  k-缺二团  (第  18–20      D R  的大小都不满足条件时              s ), 函数将从候
                 包含                              行). 此外, 当   D L  与                  (大于等于
                                                                  v
                                                         v
                 选集   (C L ,C R )  中随机选择一个顶点分别枚举包含    与不包含    的极大         k-缺陷团以保证递归的继续执行             (第
                 23–28  行).
                                                             (S L ,S R ) 之后, 候选集中可能存在某些顶点不再能够用于
                    需要注意的是, 当某个顶点        v 或者集合   {v 1 ,...,v i } 加入
                                ′                                                       (C L ,C R )  (以及排除集
                 扩展新的当前解      (S ,S R )  了. 为了删除这些顶点, 最直接的方法是, 算法依次遍历候选集
                                L
                                               ′
                 (X L ,X R ) ) 中每个顶点, 然后尝试加入  (S ,S R ) 中, 并判断是否能够组成更大的     k-缺陷二团. 如果不能, 则该顶点从候
                                               L
                 选集  (或者排除集) 中删除, 剩余的每个顶点均可用于扩展新的当前解.
                    定理  2. 算法  1  正确并唯一地输出了二部图       G 中所有满足给定阈值条件的极大            k-缺陷二团.
                                  G 中任意的极大                                                      (A,B) 能够
                    证明: 设  (A,B) 为             k-缺陷二团, 其中   A = {v 1 ,...,v A } 以及   B = {u 1 ,...,u B } , 则只需证明
                 被算法   1  唯一枚举. 定理  1  证明了算法   1  一定会输出极大解     (A,B) , 则只需证明当   (A,B) 被枚举后, 包含  (A,B) 的非
                 极大解不会被输出. 由于算法是基于深度优先的方式扩展当前解                     (S L ,S R ) , 因此算法一旦输出   (A,B) 则顶点  v A  或者
                 u B  将被放入到排除集中. 那么对于其他满足          S L ⊆ A 且  S R ⊆ B 的子递归分支,   v A  或者  u B  一定存在于当前的排除集
                 合中, 则任何包含     (A,B) 的非极大解都不会输出. 因此, 得证.

                 4   优化技术
                    为了进一步提高所提出算法的性能, 本节将介绍一系列的优化方法. 主要包括基于排序的子图划分技术, 基于

                 4.1   基于排序的子图划分技术
                                         2               v 距离为                2
                    给定   L 中的一个顶点   v , 令   N (G) 表示   G 中与顶点   2 的顶点集合, 即   N (G)={u∈L\{v}|N v (G)∩ N u (G),∅} .
                                                                              v
                                         v
                                           2     2                                              u 同样有如
                 本文用   G v  表示  G  中由顶点集合  Γ (G) = N (G)∪{v}  与  ∪ u∈Γ 2 (G) N u (G)  组成的诱导子图. 对于  R 中的顶点
                                                 v
                                           v
                                                              v
                 上定义, 则可以得到如下结论.
                    定理  3. 给定  G 中任意极大   k-缺陷二团   (A,B) , 若  |A| ⩾ k +1 且  |B| ⩾ k +1 , 则  (A,B) 一定包含在子图  G v  中, 其中
                    (A,B) 中的任意顶点.
                 v 为
                    证明: 基于性质     2, 若   |A| ⩾ k +1 且  |B| ⩾ k +1 , 则  G(A,B) 的直径一定不大于  3. 又因为  G v  包含了与   距离小于
                                                                                                v
   391   392   393   394   395   396   397   398   399   400   401