Page 425 - 《软件学报》2024年第6期
P. 425
徐兰天 等: 面向超图数据的最大独立集算法 3001
局部搜索 [26] 和禁忌搜索 [27−29] 等. 贪婪算法按一定的顺序逐次扩充解的集合, 直至顺序搜索结束, 最终获得一个可
行解. Liu 等人 [30] 提出了逐步地添加最小度数的顶点到最大独立集中的解决方案. Lamm 等人 [31] 提出了优先选择
更可能加入最大独立集的点的进化算法. 局部搜索对可行解的局部邻域进行搜索, 来提高已知解的质量. Andrade
等人 [32] 提出的局部搜索算法, 用已获得的独立集中的点与非独立集点交换来扩展最大独立集大小. Dahlum 等人 [33]
提出了局部搜索与进化规则相结合的算法. 禁忌搜索是一种改进的局部搜索算法, 通过设立“禁忌列表”来避免循
环搜索, 可以快速跳出循环并搜索新的区域. Gao 等人 [34] 提出了在动态图上维护最大独立集的近似算法, Liu 等人 [35]
基于 Pay-and-Recycle 模型, 提出了包含指定点集的类最大独立集算法. 此外, 在前人的研究中, 还提出了许多有效
的剪枝规则, 如折叠和镜像规则, 二度路径剪枝规则等 [36,37] . 这些剪枝策略有助于在不牺牲解决方案质量的情况下
减少问题的规模.
然而, 目前国内外还没有出现如本文定义的超图最大独立集的搜索算法, 这也说明本文的研究是十分有意义的.
2 基础知识
假如 G=(V, E) 是一个超图, V(|V|=n) 表示图 G 对应的点集, E(|E|=m) 表示图 G 对应的边集.
xadj、adjncy、eptr、eind
定义 1. 超图独立集和最大独立集. 超图独立集 S 是超图 G 中的一个超点子集, 使得超图独立集 S 中的任意两
个不同的超点都不能被超图 G 中的同一超边所包含. 如果一个超图独立集的点数是图 G 中最多的, 则称为超图
G 的一个最大超图独立集. 用 α(G) 表示超图 G 最大独立集中的超点个数.
如图 1 所示, 图中有 3 条超边, 超边 a 包含点 0, 1, 2; 超边 b 包含点 2 和 3; 超边 c 包含点 0 和 3. 根据本文超
图独立集定义, 图中共有 5 个独立集, 分别为{0}, {1}, {2}, {3}, {1, 3}, 其中独立集{1, 3}是点数最多的独立集, 所
以是最大独立集.
0
c a
1
2
3
b
图 1 超图独立集
定义 2. 超边的大小和超点的度. 一条超边 e 的大小是超边 e 中包含的超点的个数, 记为 size(e). 一个超点 u 的
邻接边集包含所有超点 u 参与形成的超边, 记为 N u . 一个超点 u 的度是超点 u 参与形成的超边的数量, 记为
degree(u)=|N u |. 超点的平均度表示为 D, 超边的平均大小表示为 S.
3 超图邻接关系存储
本文采用改进的压缩存储格式 (improved compressed storage format, ICSF) [38] 来保存超图的点边邻接关系和边
点邻接关系. 图 2 给出了图 1 对应的 ICSF 存储格式, 这种邻接关系存储的格式没有用到指针和链表, 避免了复制
的指针操作和链表的维护工作, 结构比较简单, 方便维护, 并有效地避免了存储空间的浪费.
在 ICSF 存储格式中, 共包含 这 4 个数组. 其中 xadj 和 adjncy 保存超点对于超边的
邻接关系, eptr 和 eind 保存超边对于超点的包含关系. xadj 数组的长度为超图中的超点总数, 其保存的是 adjncy
数组的序号. 其中 xadj[i] 保存 i 号超点在 adjncy 数组中对应的起始位置. adjncy 数组的长度为所有超点的邻接超
边的个数之和, 其中保存的是超边序号. eptr 数组的长度为超图中的超边总数, 其保存的是 eind 数组的序号. 其中
eptr[j] 保存 j 号超边在 eind 数组中对应的起始位置. adjncy 数组的长度为所有超边中包含的超点的个数之和, 其
中保存的是超点序号.