交互式图论学习
交互式图论学习
Guest User
Using app without sign in
弦图检查器
确定图是否为弦图(每个≥4的环都有弦)
选择算法并生成步骤以开始可视化
当每个四顶点或更多顶点的环都有一条弦(即连接环上两个不相邻顶点的边)时,图是弦图。弦图是性质良好的一类图,许多 NP 难问题(包括着色和最大团)在其上变得可多项式时间求解。
弦性用字典序 BFS(Lex-BFS)测试,它在 O(V + E) 内对顶点排序。图恰在该顺序的逆序是完美消去序时是弦图,即每个顶点连同其后继邻居构成一个团,此条件可在线性时间内检查。随后同一顺序即可贪心地给出最优着色和最大团。
弦图使稀疏矩阵的高斯消元填充最小且高效、通过连接树在概率图模型中进行精确推断、在计算生物学中实现完美系统发育,并为结构化程序分配寄存器。它们是通向完美图论的入门主题。
直接检测弦图性质,也就是去搜寻一个较长的无弦环,代价很高。标准做法是间接的:先求出一个候选的完美消除序,再对它进行验证。
// 第一步:最大势搜索(MCS)
权重[v] = 0(对所有 v); 序列 = []
重复 V 次:
选出未编号结点中权重最大的 v
序列.前插(v)
对 v 的每个未编号邻居 n: 权重[n]++
// 第二步:验证它是否为完美消除序
对 序列 中位于位置 i 的每个 v:
靠后邻居 = v 的邻居中出现在 i 之后的那些
若 靠后邻居 为空: 继续
w = 靠后邻居 中最靠前的那个结点
若 靠后邻居 中存在某个 u 与 w 不相邻:
返回 「不是弦图」
返回 「是弦图」完美消除序是指这样一种排列:每个结点连同它在序列中靠后的邻居一起构成一个团。一个图是弦图,当且仅当存在这样的序。只要图确实是弦图,最大势搜索总能产出一个,因此验证这一步正是把启发式得到的序变成证明的关键;而当这样的序并不存在时,也正是它把失败检测出来。
先检测一个四元环是否为弦图,再加入一条弦重新检测。
示例图: 先是四元环 A-B、B-C、C-D、D-A。随后是同一个图再加上弦 A-C。
纯四元环不是弦图;只加上 A-C 这一条弦就使它成为弦图。这就是把定义落到实处:一个图是弦图,是指其中每个含四个或更多结点的环都存在一条连接该环上两个不相邻结点的边。四元环是可能存在的最小反例,这也正是它成为标准测试用例的原因。
时间: O(V + E) · 空间: O(V + E)
若用按权重分桶的方式实现,最大势搜索可以做到 O(V + E),此时选出最大值与递增邻居权重都是摊还常数时间。验证这一趟对每个结点考察一次、对它的每个靠后邻居考察一次,只要相邻性查询借助哈希集合是常数时间,总计就是 O(V + E)。因此整项检测是线性的,这是个相当出人意料的结果:朴素做法是枚举所有环并逐个检查是否有弦,那是指数级的;即便换一种更聪明的基于环的方法,也仍然差得多。字典序 BFS 是 MCS 的替代方案,界相同。
弦图性质通常是一道门槛:一旦确认某个图是弦图,若干原本 NP 困难的问题在它上面就变成线性的了。
| 替代算法 | 以下情况更合适 | 代价 |
|---|---|---|
| 弦图上的最大团 | 图是弦图。一般情形下 NP 困难,但借助消除序在这里是线性的。 | O(V + E) |
| 弦图上的图着色 | 弦图是完美图,因此按消除序的逆序做贪心着色恰好就是最优的。 | O(V + E) |
| 树分解 | 你想利用较小的树宽。弦图恰好就是树宽等于最大团大小减一的那些图。 | 若为弦图则 O(V + E) |
| 字典序 BFS | 用来产生候选序列的 MCS 替代方案。复杂度相同,常数因子不同。 | O(V + E) |