(N×M)图解问题

时间:2011-04-10 12:43:26

标签: algorithm graph diagramming bipartite

我需要一种算法来(有效地)解决我正在编写的一些图表软件中出现的问题。

我有两组节点,N和M.N中的每个节点n0与M中的唯一(对于n0)节点有0到M个连接。这些节点集将被排列在两条平行的水平线上, M节点上方的N个节点。连接将绘制为从N到M的直线。

我需要做的是重新排列水平线内的N和M节点,以尽量减少交叉。他们以任何方式做到这一点比只是天真地列举所有可能的安排更有效率,即O(N!* M!)? (实际上,它比这要差得多,因为每个连接都必须检查交叉)。

也欢迎参考相关文献,但需要解释为何需要相关文献。


正如已经指出的那样,在一般情况下,这可以被认为是二分图(集合N和M)平面化算法。但是,这个特定的问题比那个(我希望可以使它更快)受到更多的限制,并且需要产生额外的信息(可能会使它变慢),如下所示:

  1. 图的限制是必须将连接绘制为从N到M的直线。在图论中,这实际上意味着连接不能 落后于 N或M中的节点,仅在它们之间。因此,在一般的Bipartite图形情况下,可以平面化具有四个连接器的2x2情况,但在我的图表的情况下不能

  2. 附加信息是,如果无法平面化,我仍然需要一个最小交叉解决方案(或接近它)。通常,最小交叉算法与仅平面化的算法明显不同。

4 个答案:

答案 0 :(得分:1)

您描述的模型称为二分图,您要求的是平面化算法。回答你问题的最好方法是google。

答案 1 :(得分:1)

suddnely_me是对的,但也许你不需要一个完美的解决方案。你也可以尝试一个非常简单的贪婪算法。根据连接数排序所有节点。然后一个接一个地添加到水平线..虽然没想过但是可能导致一个简单的方法..

答案 2 :(得分:1)

你的问题可以通过强制图对齐来解决,只要你不要求节点在它们的行上保持一个特定的位置(即使你确实需要进行一些改动,你可以把它拉下来)

您需要更改的主要内容是强制对齐1D而不是2D,仅对齐X轴上的节点,而不是对齐X和Y上的节点。

算法的前提是你有作用在节点上的力,所以节点有排斥力作用于它们导致它们彼此远离地移动,但是相互连接的节点具有吸引力作用于它们比排斥更大。在每个循环中,你添加力使得彼此吸引的节点彼此更接近,而不能排斥的节点,当你总和低于某个阈值的总力时就完成对齐,类似于0.001

http://en.wikipedia.org/wiki/Force-based_algorithms_(graph_drawing)

答案 3 :(得分:0)

N和M有多大?基于动态编程的解决方案在时间O(min(N,M)!* 2 ** max(N,M)* poly(N,M))中运行,但我不确定这是否是一个重大改进在你看来蛮力。