我需要一个算法来(高效地)解决我正在编写的一些绘图软件中出现的问题。我有两组节点N和M。每个在N中的节点n0最多与一个在M中独特的节点连接了M次。这些节点集将被排列在两条平行的水平线上,N节点在M节点的上面。连接将作为从N到M的直线绘制。
我需要重新排列N和M节点在它们的水平线内,以使交叉最少。是否有比仅单纯枚举所有可能的排列更有效率的方法(实际上,由于还必须检查每个连接的交叉,因此要更差,其时间复杂度为O(N!*M!))?
欢迎提供相关文献的参考,但需要说明其相关性。
正如已经指出的,一般情况下,这可以被认为是二分图(集合N和M)平面化算法。然而,这个具体问题比那个限制要严格得多(这希望能让它变得更快),并且需要产生额外的信息(这可能会使它变得更慢),如下所示:
1.图的限制是连接必须作为从N到M的直线绘制。在图论中,这实际上意味着连接不能穿过N或M中的节点,只能在它们之间。因此,四个连接的2x2案例可以在一般二分图情况下平面化,但在我的图中不能。
2.如果不能进行平面化,则需要一个最小交叉解(或接近最小)。通常,最小交叉算法与仅平面化的算法显着不同。
我需要重新排列N和M节点在它们的水平线内,以使交叉最少。是否有比仅单纯枚举所有可能的排列更有效率的方法(实际上,由于还必须检查每个连接的交叉,因此要更差,其时间复杂度为O(N!*M!))?
欢迎提供相关文献的参考,但需要说明其相关性。
正如已经指出的,一般情况下,这可以被认为是二分图(集合N和M)平面化算法。然而,这个具体问题比那个限制要严格得多(这希望能让它变得更快),并且需要产生额外的信息(这可能会使它变得更慢),如下所示:
1.图的限制是连接必须作为从N到M的直线绘制。在图论中,这实际上意味着连接不能穿过N或M中的节点,只能在它们之间。因此,四个连接的2x2案例可以在一般二分图情况下平面化,但在我的图中不能。
2.如果不能进行平面化,则需要一个最小交叉解(或接近最小)。通常,最小交叉算法与仅平面化的算法显着不同。