弦图
概念
弦(chord)
连接环中不相邻的两个点的边
弦图(chordal graph)
一个无向图称为弦图,当且仅当图中任意长度大于 3 的环都至少有一个弦.
单纯点(simplicial vertex)
设 表示与点 相邻的点集. 一个点称为单纯点当且仅当 的诱导子图为一个团.
几个性质
- 弦图的每一个诱导子图一定是弦图
- 弦图的任一个诱导子图不同构与 (TODO: 是什么..感觉是含 个结点的完全图)
一个引理
任何一个弦图都至少有一个单纯点, 不是完全图的弦图至少有两个不相邻的单纯点.
完美消除序列(perfect elimination ordering)
定义
一个点的序列(每个点恰好出现一次) 满足 在 的诱导子图中为一个单纯点.
定理
一个无向图是弦图当且仅当它有一个完美消除序列.
求完美消除序列
朴素算法
- 每次找一个单纯点 ,加入到完美消除序列中.
- 将 及其相关的边从图中删掉.
- 重复以上过程直到所有点被删除(图是弦图,得到了完美消除序列)或不存在单纯点(图不是弦图).
字典序广度优先搜索
最大势算法
- 从 到 的顺序依次给点标号(标号为 的点出现在完美消除序列的第 个)
- 设势 表示第 个点与多少个已标号的点相邻,每次选择 最大的未标号的点进行标号
为在 的时间内实现,又由于 最大为 ,用 个链表维护每个势的结点,即链表 维护那些 的结点 . 再记录一下当前最大的势 ,每次从 中取出一个结点进行编号,并更新其相邻结点的势加入对应的链表中,同时更新最大势.
判断一个序列是否为完美消除序列
- 设 中与 相邻的点依次为
- 只需判断 是否与 相邻即可
- 时间复杂度