我需要一個算法來(有效地)解決我寫的一些圖表軟件中出現的問題。(N x M)圖解問題
我有兩組節點,N和M.N中的每個節點n0與M中的唯一(對於n0)節點具有0到M個連接。這些節點組將被安排在兩條平行的水平線上, N個節點在M個節點的上方。該連接將被畫成直線,從N到M.
我需要做的是他們的水平線內重新排列N和M節點,以減少交叉。他們是否有辦法做到這一點,比僅僅列舉所有可能的安排,即O(N!* M!)更有效率? (實際上,它比它差得多,因爲每個連接都必須檢查穿越)。
參考相關文獻,歡迎此外,雖然一個解釋,爲什麼它的相關需要。
正如已經指出的那樣,在此可以被認爲是二分圖(集合N和M)平坦化算法的一般情況。然而,這個特定問題大大超過該限制的(我希望能使其更快),並需要產生的附加信息(這可能使慢),具體如下:
圖的限制是的連接必須被繪製爲直線從N等於M.在圖論中,這實際上意味着該連接不能去後面在N或者M的節點,僅在它們之間。因此,具有四個連接器的2x2機箱可以在一般的二分圖機箱中平面化,但在我的示意圖中,不能爲。
的附加信息,是,如果它不能被平坦化,我還需要一個最小的交叉溶液(或接近)。一般來說,最小交叉算法與僅平面化算法顯着不同。
是的,這是一個二分圖,感謝提醒。然而,繪圖和繪圖並不是完全相同的東西,這並不是嚴格意義上的平面化算法的要求,因爲繪圖約束顯着受限於此。 – RBarryYoung 2011-04-10 14:54:59
我理解這個問題,但我看到算法要求非常不通用,我只是指出了算法本身的缺陷方向。你可能會喜歡的是基於N個元素的M集覆蓋的N集合枚舉的平衡樹搜索算法(也許是貪婪的算法)。 – iehrlich 2011-04-10 15:06:11
我在考慮這個。任何想法多麼接近這樣的方法會達到一個最佳的解決方案,平均? – RBarryYoung 2011-04-10 15:14:50