【问题标题】:Minimizing number of crossings in a bipartite graph最小化二部图中的交叉数
【发布时间】:2013-11-20 21:43:07
【问题描述】:

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

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

作为后续,如果有第三列 w,它只与 v 有边呢?还是更进一步?

【问题讨论】:

  • 你想要两列(每个子图一个)还是可以任意放置节点?
  • 您想要最优解还是近似值? (好问题顺便说一句)
  • @arturgrzesiak 节点仍应位于两列中。我将编辑问题以使其更清楚。
  • 两者都有帮助。一种人类可计算的算法(即我可以在手动绘制图形时使用的算法)会特别好。

标签: algorithm graph bipartite planar-graph


【解决方案1】:

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

给定一个二分图,一个 2 层绘图由放置节点组成 在直线 L1 上的第一个节点集合 V 并将节点放置在 第二个节点集合 W 在平行线 L2 上。最小化问题 在 2 层图中,弧之间的交叉数是第一位的 由 Harary 和 Schwenk 介绍。单边交叉最小化 问题要求在 V 中找到要放置在 L1 上的节点的顺序,所以 弧交叉的数量最小化(而排序 L2 上 W 中的节点是给定的并且是固定的)。问题的应用 可以在 VLSI 布局和分层图中找到。

然而,双边和单边问题被证明是 NP-hard 分别由 Garey 和 Johnson 以及 Eades 和 Wormald 撰写。

【讨论】:

  • 那张纸看起来正是我要找的。谢谢!
【解决方案2】:

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

免费获得类似的东西 :-):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 2021-12-19
    • 1970-01-01
    相关资源
    最近更新 更多