簡體   English   中英

Graphviz點算法

[英]Graphviz Dot Algorithm

有關Graphviz Library中dot的算法是否有任何文檔(完整的偽代碼?)?

我只找到了一些部分偽代碼文檔。

以下是一些參考資料。 最完整的(缺少Graphviz源代碼本身 )可能是#2,文章“繪制有向圖的技術”,由幾個Graphviz貢獻者自己編寫。

(1)“用點繪制圖形”

使用點繪制圖形時 ,點的布局算法如下所述:

dot在四個主要階段繪制圖表。 了解這一點有助於您了解dot所做的布局類型以及如何控制它們。 點使用的布局過程依賴於圖形是非循環的。 因此,第一步是通過反轉某些循環邊緣的內部方向來破壞輸入圖中出現的任何循環。 下一步將節點分配給離散的排名或級別。 在從上到下的圖形中,等級確定Y坐標。 跨越多個等級的邊緣被分成“虛擬”節點和單位長度邊的鏈。 第三步命令級別內的節點以避免交叉。 第四步設置節點的X坐標以保持邊緣短,最后一步設置邊緣樣條。 基於Warfield [War77],Carpano [Car80]和Sugiyama [STT81]的工作,這與大多數層次圖繪制程序的通用方法相同。 我們將讀者推薦給[GKNV93]以獲得對dot算法的詳盡解釋

該段引用的論文如下:

  • [Car80] M. Carpano。 自動顯示用於計算機輔助決策分析的分層圖。 IEEE軟件工程學報,SE-12(4):538 - 546,1980年4月。(顯然可以在這里購買。)

  • [GKNV93] Emden R. Gansner,Eleftherios Koutsofios,Stephen C. North和Kiem-Phong Vo。 一種繪制有向圖的技術。 IEEE Trans。 Sofware Eng。,19(3):214 - 230,1993年5月。(可 Graphviz.org網站上找到。)

  • [STT81] K.Sugiyama,S。Tagawa和M. Toda。 分層系統結構的視覺理解方法。 IEEE Transactions on Systems,Man,and Cyber​​netics,SMC-11(2):109-125,1981年2月。(顯然可以在這里購買。)

  • [War77] John Warfield。 交叉理論與層次映射。 IEEE Transactions on Systems,Man,and Cyber​​netics,SMC-7(7):505 - 523,1977年7月。(顯然可以在這里購買。)

(2)“繪制有向圖的技術”

dot的算法在1993年的IEEE Transactions on Software Engineering期刊發表的論文“A Drawing for Drawing Directed Graphs”中有詳細描述(可在Graphviz.org網站上免費獲得)。 這是上面引用的“[GKNV93]”來源。

摘要,它的價值在於:

我們描述了用於繪制有向圖的四遍算法。 第一遍使用網絡單純形算法找到最佳秩分配。 第二遍通過迭代啟發式設置排名內的頂點順序,該迭代啟發式結合了新的權重函數和局部轉置以減少交叉。 第三遍通過構造和排列輔助圖來找到節點的最佳坐標。 第四遍使樣條線繪制邊緣。 該算法可以很好地繪制圖紙並快速運行。

(3)“使用Graphviz作為庫”

“使用Graphviz作為庫”在3.1節中提供了每個布局引擎的算法的摘要。 點的部分描述是這樣的:

如果可能,點算法產生關於邊緣方向的圖的排序布局。 它特別適合顯示層次結構或有向非循環圖。 基本布局方案歸功於Sugiyama等人[STT81]點使用的特定算法遵循Gansner等人[GKNV93]描述的步驟。

點布局中的步驟是:1)初始化2)秩3)mincross 4)位置5)相同的端口6)樣條7)復合邊界

在初始化之后,算法使用整數程序將每個節點分配給離散等級(等級)以最小化(離散)邊長度的總和。 下一步(mincross)重新排列等級內的節點以減少邊緣交叉。 接下來是實際坐標到節點的分配(位置),使用另一個整數程序來壓縮圖形並拉直邊緣。 此時,所有節點都將在coord屬性中設置位置。 另外,設置所有簇的邊界框bb屬性。

“[GKNV93]”參考是如上所述的“繪制有向圖的技術”。

“[STT81]”參考如上所述的“用於視覺理解分層系統結構的方法”。

(4)您可能還對以下內容感興趣:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM