Algorithm 二部图中交叉数的最小化
在为不相关的内容绘制图形时,我遇到了以下算法问题: 我们有一个二部图的平面图,不相交的集合按列排列,如图所示。我们如何重新排列每列中的节点,以使交叉边的数量最小化?我知道这个问题对于一般图()来说是NP难的,但是考虑到图是二部的,有什么技巧吗 作为后续,如果有第三列w,它只有到v的边,该怎么办?还是更进一步?这篇论文 提到Garey和 Johnson还证明了最小化边缘交叉的数量 对于二部图是NP难的。事实上,它仍然是NP难的 即使您被告知一列的最佳顺序: 给定一个二部图,2层图形由放置节点组成 在第一个节点集中,V位于直线L1上,并将节点放置在 平行线L2上的第二个节点集W。最小化问题 两层图形中圆弧之间的交叉数是第一个 由Harary和Schwenk介绍。单边交叉最小化 问题要求在V中查找要放置在L1 so上的节点的顺序 使弧交叉的数量最小化(同时 L2上W中的节点是给定和固定的)。问题的应用 可以在VLSI布局和层次结构图中找到 然而,双边和单边问题被证明是NP难问题 分别由Garey和Johnson以及Eades和Wormald撰写Algorithm 二部图中交叉数的最小化,algorithm,graph,bipartite,planar-graph,Algorithm,Graph,Bipartite,Planar Graph,在为不相关的内容绘制图形时,我遇到了以下算法问题: 我们有一个二部图的平面图,不相交的集合按列排列,如图所示。我们如何重新排列每列中的节点,以使交叉边的数量最小化?我知道这个问题对于一般图()来说是NP难的,但是考虑到图是二部的,有什么技巧吗 作为后续,如果有第三列w,它只有到v的边,该怎么办?还是更进一步?这篇论文 提到Garey和 Johnson还证明了最小化边缘交叉的数量 对于二部图是NP难的。事实上,它仍然是NP难的 即使您被告知一列的最佳顺序: 给定一个二部图,2层图形由放置节点组成
Peter de Rivaz指出,这是NP难的,但如果你对某种近似很好,你可以使用下面的解决方案 我最初的想法是使用一些基于力的算法进行图形布局,但实现起来可能有点乏味。但是,嘿,有一个很棒的程序,可以让整个工作为你 因此,安装后,只需准备一个带有图形的文件:
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
并且免费得到这样的东西:-):
您想要两列(每个子图一列)还是可以任意放置节点?您想要最佳解决方案还是近似值?(好问题顺便提一下)@arturgrzesiak节点应该仍然在两列中。我会修改这个问题,让它更清楚。两者都会有帮助。一个人类可计算的算法(即,我可以在手工绘制图形时使用的算法)会特别好。那篇论文看起来正是我想要的。谢谢