Page 430 - 《软件学报》2024年第6期
P. 430

3006                                                       软件学报  2024  年第  35  卷第  6  期


                 剩一条边. 如算法     3  的第  12, 13  行所示, 若它的所有邻接超边的     size 全部大于  1, 则所有邻接超边都不只包含超点
                 v, 则可应用剪枝    2, 删除遍历   N v 中的所有超边, 从这些超边的包含点中删除超点              v, 并更新这些超边的      size. 如算
                 法  1  的第  14–16  行所示, 若它的所有邻接边的     size 中有部分为  1, 则部分邻接超边只包含超点         v 这一个超点, 则可
                 应用剪枝    2, 删除  N v 中的所有  size 为  1  超边, 之后更新超点  v 的度, 同时更新超点    v 在  T G  中的位置. 当所有剩余
                 的超点的    degree 都不大于  1  时, 遍历所有剩余的超边, 此时所有剩余的超边彼此之间没有邻接关系, 都是由若干
                 度为  1  的超点组成的. 则此时在每条剩余超边中选取一个点加入超图独立集, 与应用剪枝                         1  时已加入超图独立集
                 的点合并, 得到最终的超图最大独立集.
                 算法  3. 超图独立集改进算法.

                         G = (V,E) ;
                 输入: 超图
                 输出: 超图  G 的最大独立集.

                   N u = {e ⊆ E | u ∈ e},H = ∅
                 1.
                 2.   T G  是  v ∈ G 的按  degree 降序序列
                      v ∈ V   do //剪枝  1
                 3. for
                 4.  if   degree[v] = 1  then
                 5.   从  E  中删除   N u
                 6.     H = H ∪{v}
                             ,
                 7. while   ∃v ∈ V degree[v] > 1  do
                 8.  从  T G  中取最高度超点  v
                             ,
                 9.  if   ∀e ∈ N v size(e) = 1 then //剪枝  4
                 10.   从  E  中删除  N u  , 但要留一条超边
                 11.      degree(v) = 1 并更新   T G
                          ∀e ∈ N v size(e) > 1 then //剪枝  2
                 12.  else if    ,                  个, 分别为超点
                 13.   删掉  v 并更新  N v  中边的  size
                 14.  else //剪枝  3


                 15.     degree(v)− = N v&size(e)=1
                 16.   删除  N v&size(e)=1  更新  T G
                 17. for   e ∈ E   do //遍历剩余超边
                         e 中的一个超点
                 18.     u 为
                 19.     H = H ∪{u}
                 20. return   H
                    以图  8  为例, 图中超图共有     10  个超点, 8  条超边. 度为  1  的超点有  3  个, 分别为超点   2, 4, 6; 度为  2  的超点有
                 4  个, 分别为超点  3, 5, 9, 0; 度为  3  的超点有  4        3, 5, 9, 10. 若使用算法  3  处理该图, 首先枚举图中的
                 度为  1  的超点, 即  3  个红色超点. 根据  one-degree 点精确剪枝规则, 可将     2, 4, 6  这  3  个点加入超图独立集, 同时删
                 除这  3  个超点所在的边. 这个操作会导致图中           4  个绿色超点, 即  1, 3, 5, 7  被删除. 上述操作完成后, 原图中还剩下
                 8, 9, 0  这  3  个点. 按照  degree 由高到低次序访问, 首先访问度为    3  的蓝色超点   8. 超点  8  有  3  条邻接超边, 其中  1
                 条  size 为  1, 2  条  size 为  2, 则可应用  one-size 边精确剪枝  a, 将超点  8  的  size 为  1  的邻接超边删除. 此时原图中依
                 然还剩下   8, 9, 0  这  3  个点, 但  3  个点的  degree 都是  2. 若再次取最高度节点取到了超点  8, 此时超点   8  有两条邻接
                 超边, size 均为  2, 则可应用  high-degree 点近似剪枝, 删除蓝色超点    8. 接下来, 再次取最高度节点取到了超点            9, 此
                 时超点   9  有两条邻接超边, 其中一条       size 为  1, 另一条  size 为  2, 则可应用  one-size 边精确剪枝  a, 将超点  9  的  size
                 为  1  的邻接超边删除. 之后再次取最高度超点           0, 与超点  9  相同, 也可应用  one-size 边精确剪枝  a, 将超点  0  的  size
   425   426   427   428   429   430   431   432   433   434   435