zoukankan      html  css  js  c++  java
  • 弦图

    弦图

    考试正好有一道题目可以用弦图的方法来做
    所以就正好看一下(CDQ)的论文
    论文戳我看
    把中间的一些定义啥的直接蒯(手打)下来了


    子图:

    从一个图中随意选一些点,一些边组成的图

    诱导子图:

    从一个图的点集中选择一个子集,以及链接了子集中点的所有的边,
    组成的子图

    团:

    一个子图,且是完全图

    极大团:

    不是别的团的子图的团

    最大团:

    点数最多的团


    最小染色:

    用最少的颜色给图染色,相邻的点颜色不同

    最大独立集:

    选出最多的点,使得相邻点不同时被选

    最小团覆盖:

    用最少的团覆盖整个图

    其中:

    (团数<=色数)
    (最大独立集数<=最小团覆盖数)


    弦:

    连接环中两个不相邻的点的边

    弦图:

    一个无向图中,任意一个大小超过(3)的环都至少有一个弦
    弦图的诱导子图一定是弦图

    单纯点:

    (N(v))表示与(v)相邻的点集。一个点是单纯点,当且仅当({v}+N(v))的诱导子图是一个团

    引理:

    任何一个弦图都至少有一个单纯点,不是完全图的弦图至少有两个不相邻的单纯点


    完美消除序列:

    一个点的序列(v_1,v_2,...v_n)中(每个点恰好出现一次)
    满足(v_i)({v_i,v_{i+1},...,v_n})的诱导子图中是单纯点

    定理:

    一个图是弦图,当且仅当它有一个完美消除序列


    求完美消除序列

    朴素算法:

    每次找一个单纯点(v),加入到完美消除序列中
    (v)与其相连的边都删去
    重复上面过程,如果所有点都被删除则是弦图
    时间复杂度(O(n^4))

    字典序广度优先搜索(Lex BFS )

    直接去论文上看吧。。

    最大势算法

    (n...1)的顺序给点标号(标号为(i)的点出现在完美消除序列的第(i)个)
    (label[i])表示与多少个已经标号的点相邻
    每次找(label)最大的点标号


    判断一个序列是否为完美消除序列

    朴素算法

    依次判断即可
    复杂度(O(nm))

    优化算法

    设在(v_i,v_{i+1}..v_n)中,与(v_i)相邻的点依次为(v_{j1}...v_{jk})
    只需要判断(v_{j1})是否与其他点相邻即可
    复杂度(O(n+m))


    综上:
    弦图判定问题可以在(O(n+m))时间里面解决


    以下的问题都在弦图中

    用最少的颜色给所有点染色,使得相邻点不同色

    从完美消除序列逆序来
    每次给一个点染色可以染的最小的颜色
    从中得出结论:团数=颜色数

    求最小独立集

    完美消除序列中,能选就选
    结论:最大独立集=最小团覆盖

  • 相关阅读:
    【leetcode】1442. Count Triplets That Can Form Two Arrays of Equal XOR
    【leetcode】1441. Build an Array With Stack Operations
    【leetcode】1437. Check If All 1's Are at Least Length K Places Away
    cxCheckCombobox
    修改现有字段默认值
    2018.01.02 exprottoexcel
    Statusbar OwnerDraw
    dxComponentPrinter记录
    单据暂存操作思路整理
    设置模式9(装饰者,责任链,桥接,访问者)
  • 原文地址:https://www.cnblogs.com/cjyyb/p/8343878.html
Copyright © 2011-2022 走看看