以下内容为课堂学习笔记以及自己理解的一些过程
Demoucron-Malgrange-Pertuiset(DMP)算法:简单的平方算法。
算法基本过程
H-fragment
图G的H-fragment:
- 给定G的一个子图H
- G的H-fragment是G中去掉H后剩余的“连通分支”,即
(1)一条不在H中但两个端点都在H中的边,或者
(2)G-V[H]的一个连通分支+它连到H的边及其端点。
基本思路
(1)迭代地嵌入当前子图的fragment,直至:
- G全部被嵌入(可平面)
- 某个fragment无法嵌入(不可平面)
(2)嵌入一个fragment可能难以操作,但总能嵌入其中的一条路
引理
图G是可平面的当且仅当G的每个块都是可平面的。
证明:
必要性⇒:因为可平面图的子图都是可平面的,所以必要性显然。
充分性⇐:
只需要考虑连通图,否则分别考虑每个连通分支
对G的块数n作数学归纳证明。
当n=1时,由条件,结论显然成立;
假设当n<k时,若G的每个块都是可平面的,有G是可平面的。下面考虑n=k时的情形。
设点v是G的割点,则按照v,G可以分成两个边不重子图G1与G2,即G=G1∪G2,且G1∩G2={v}。
按归纳假设,G1与G2都是可平面图。取G1与G2的平面嵌入满足点v都在外部面边界上,则它们在点v处对接后,将得到G的平面嵌入。
综上所述,G是可平面图。
基本步骤
- 只需要检测每个块(2-连通图)是否可平面即可。
- 从2-连通图G中任取一个圈G0,平面嵌入。
- 迭代:
(1)找到所有Gi-fragment。
(2)对于每个Gi-fragment(下述称作B),在Gi中找到所有包含所有B的附着点的面,称作F(B)。
- 如果某个F(B)为空,则G不可平面。
- 否则,如果某个|F(B)|=1,则选中这个B。
- 否则,每个|F(B)|>1,则任选一个B。
(3)从选中的B中任选一条连接两个附着点的路P,则P平面嵌入到F(B)中的一个面中。
(4)将结果记作Gi+1。
(5)如果Gi+1=G,则G可平面。否则,继续迭代。
举例

最终结果

不可平面的情况就不举例的,也就是在执行嵌入的时候,如果出现某一个块的F(Bi)=∅,
那么这个图就是不可平面的。
算法的正确性
如果G是可平面图,假设其平面嵌入的预期结果是Q。
- G中的每个圈在平面嵌入后仍是一个圈⇒算法先将一个圈平面嵌入:或者与Q中一致,或者方向相反(因为Q是可以翻转,因此结果与Q“对称”)
- 只需证明:如果算法截至Gi的嵌入与Q一致或者(局部)对称,那么截至Gi+1的嵌入也与Q一致或者(局部)对称。
(1)如果选中的是某个|F(B)|=1,即只有一个面可以将P嵌入,那么这种嵌入方式必然与Q中的方式一致。
(2)如果选中的是某个|F(B)|>1,并且没有将P按照Q中的方式嵌入到面f中,而是“错误地”嵌入到面f’中,怎么办?
- 这意味着f和f’有公共边界,那么对于之后的fragment,只要将原本嵌入f的改为嵌入f’,将原本嵌入f’的改为嵌入f,即沿f和f’的公共边界对称翻转,便可得到一个与Q(局部)对称的结果。
时间复杂度
O(v2)
- 块分解:O(v),基于DFS
- 找初始的圈:O(v)
- 迭代轮数?
- 简单平面图满足ε≤3v-6
- φ-1=ε-v+1≤2v-5∈O(v),因为每轮迭代新增一个面 - 每轮迭代的时间:O(v)