zoukankan      html  css  js  c++  java
  • ALG 3-4: Testing Bipartiteness

    Bipartite Graphs

    Def. An undirected graph G = (V, E) is bipartiteif the nodes can be colored red or blue such that every edge has one red and one blue end.

    (定义: 无向图G = (V, E)是双偏图,如果节点可以用红色或蓝色表示,使得每条边都有一个红色和一个蓝色端)

    Applications.

    • Stable marriage: men = red, women = blue.
    • Scheduling: machines = red, jobs = blue.

    Testing Bipartiteness

    Testing bipartiteness. Given a graph G, is it bipartite? (给定一个图G,它是二部图吗?)

    • Many graph problems become:
      • easier if the underlying graph is bipartite (matching)
      • tractable if the underlying graph is bipartite (independent set)
    • Before attempting to design an algorithm, we need to understand structure of bipartite graphs.

     

    An Obstruction to Bipartiteness

    Lemma. If a graph G is bipartite, it cannot contain an odd length cycle.

    (引理: 如果图G是二部图,它不可能包含奇长度环)

    Proof. Not possible to 2-color the odd cycle, let alone G.

     

    Bipartite Graphs

    Lemma. Let G be a connected graph, and let L0, …, Lk be the layers produced by BFS starting at node s. Exactly one of the following holds.

    (引理:设G为连通图,L0,…,Lk为从节点s开始的BFS生成的层. 则至少有下面的一个是正确的)

    (i) No edge of G joins two nodes of the same layer, and G is bipartite. (G的边从不连接同一层的两个节点,且G是二部图)

    (ii) An edge of G joins two nodes of the same layer, and G contains anodd-length cycle (and hence is not bipartite).

         (G其中的一条边连接了同一层的两个节点,并且G包含奇数长度的循环(因此不是二部图)

     

    Proof. (i)

    • Suppose no edge joins two nodes in adjacent layers. (假设没有边连接相邻层中的两个节点)
    • By previous lemma, this implies all edges join nodes on same level. (根据前面的引理,这意味着所有边都在同一层上连接节点)
    • Bipartition: red = nodes on odd levels, blue = nodes on even levels (双分割:红色=奇数级别的节点,蓝色=偶数级别的节点)

     

     Proof. (ii)

    • Suppose (x, y) is an edge with x, y in same level Lj.  // 假设(x, y)是一条边,x, y在Lj层中
    • Let z = lca(x, y) = lowest common ancestor.            // 令z = lca(x, y) =最近一层的共同祖先   
    • Let Li be level containing z.                                         // 设Li是包含z的层 
    • Consider cycle that takes edge from x to y,then path from y to z, then path from z to x.  // 考虑一个循环,边从x到y,然后路径从y到z,然后路径从z到x

  • 相关阅读:
    Struts的ONGL
    深度解析 Qt 中动态链接库
    QTcpSocket 发送数据的几种方法
    QT GUI总结
    Qt 插件学习(一)
    Qt自定义窗口部件
    Qt事件机制浅析
    VS2008 Qt Designer 中自定义信号槽
    Q窗口操作函数(窗口最大化,全屏,隐藏最大化最小化按钮)
    QT中窗口刷新事件的学习总结
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/13975618.html
Copyright © 2011-2022 走看看