最小化二分图中的交叉数

时间:2013-11-20 21:43:08

标签: algorithm graph bipartite planar-graph

在为不相关的内容绘制图表时,我遇到了以下算法问题:

enter image description here

我们有一个二分图的平面绘图,其中不相交的集合排列在列中,如图所示。我们如何重新排列每列中的节点,以便最小化边缘交叉的数量?我知道这个问题对于一般图形来说是NP难的(link),但考虑到图是二分的,是否有一些技巧?

作为后续行动,如果有第三列 w ,只有 v 的边缘怎么办?还是进一步?

2 个答案:

答案 0 :(得分:8)

论文On the one-sided crossing minimization in a bipartite graph with large degrees by Hiroshi Nagamochi  提到Garey和。的交叉号码的原始论文  约翰逊还证明了最小化边缘交叉的数量 二分图是NP难的。事实上,它仍然是NP难的  即使您被告知一列的最佳订单:

  

给出二分图,2层图包括放置节点   在第一个节点中,在直线L1上设置V并将节点放置在   第二节点在平行线L2上设置W.最小化的问题   首先是2层图纸中弧线之间的交叉数量   由Harary和Schwenk介绍。单边交叉最小化   问题要求找到V中节点的排序,以便放置在L1上   电弧交叉的数量最小化(而顺序为   给出并固定了L2上W中的节点。问题的应用   可以在VLSI布局和分层图纸中找到。

     

然而,双面和单侧问题显示为NP难   分别是Garey和Johnson以及Eades和Wormald。

答案 1 :(得分:4)

Peter de Rivaz指出它是NP-Hard,但如果你对某些近似值很好,你可以选择以下解决方案。

我最初的想法是使用一些基于力的算法进行图形布局,但实现起来可能有点繁琐。但是,嘿,有这个精彩的节目graphviz.org,可以让整个工作为你服务。

安装完成后,只需用图表准备一个文件:

graph G{
   {rank=same A B C D E}
   {rank=same F G H K I J}

    A -- F;
    A -- G;
    A -- K;
    A -- I;
    A -- H;
    A -- J;

    B -- G;

    C -- G;
    C -- J;

    D -- K;
    D -- I;
}

运行:dot -Tpng yourgraph -o yourgraph.png

并为免费获取类似内容: - ):

enter image description here