可平面性的判断算法——DMP算法

以下内容为课堂学习笔记以及自己理解的一些过程

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。

  1. G中的每个圈在平面嵌入后仍是一个圈⇒算法先将一个圈平面嵌入:或者与Q中一致,或者方向相反(因为Q是可以翻转,因此结果与Q“对称”)
  2. 只需证明:如果算法截至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)
  • 9
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值