Graphviz点算法

时间:2013-10-08 10:34:08

标签: graph graphviz dot directed-graph

Graphviz Library中的dot算法是否有任何文档(完整伪代码?)?

我只找到了一些部分伪代码文档。

1 个答案:

答案 0 :(得分:23)

以下是一些针对您的参考资料。最完整的(缺少点源代码本身)可能是#2,论文“绘制有向图的技术”,由几位Graphiz贡献者自己编写。

(1)“用点绘制图形”

Drawing graphs with dot中,dot的布局算法如下所示:

  

dot在四个主要阶段绘制图表。了解这一点有助于您了解dot所做的布局类型以及如何控制它们。点使用的布局过程依赖于图形是非循环的。因此,第一步是通过反转某些循环边缘的内部方向来破坏输入图中出现的任何循环。下一步将节点分配给离散的排名或级别。在从上到下的图形中,等级确定Y坐标。跨越多个等级的边缘被分成“虚拟”节点和单位长度边的链。第三步命令级别内的节点以避免交叉。第四步设置节点的X坐标以保持边缘短,最后一步设置边缘样条。基于Warfield [War77],Carpano [Car80]和Sugiyama [STT81]的工作,这与大多数层次图绘制程序的通用方法相同。我们将读者引用[GKNV93]以获得对dot算法的详尽解释

该段引用的论文是:

  • [Car80] M. Carpano。自动显示用于计算机辅助决策分析的分层图。 IEEE软件工程学报,SE-12(4):538 - 546,1980年4月。(显然可以购买here。)

  • [GKNV93] Emden R. Gansner,Eleftherios Koutsofios,Stephen C. North和Kiem-Phong Vo。一种绘制有向图的技术。 IEEE Trans。 Sofware Eng。,19(3):214 - 230,1993年5月。(Graphviz.org网站上提供here。)

  • [STT81] K.Sugiyama,S。Tagawa和M. Toda。分层系统结构的视觉理解方法。 IEEE Transactions on Systems,Man,and Cyber​​netics,SMC-11(2):109-125,1981年2月。(显然可以购买here。)

  • [War77] John Warfield。交叉理论与层次映射。 IEEE Transactions on Systems,Man,and Cyber​​netics,SMC-7(7):505 - 523,1977年7月。(显然可以购买here。)

(2)“绘制有向图的技术”

dot的算法在1993年发表在 IEEE Transactions on Software Engineering 期刊上的论文"A Technique for Drawing Directed Graphs"中有详细描述(可在Graphviz.org网站上免费获得)。这是上面引用的“[GKNV93]”来源。

摘要,值得的是:

  

我们描述了用于绘制有向图的四遍算法。第一遍使用网络单纯形算法找到最佳秩分配。第二遍通过迭代启发式设置排名内的顶点顺序,该迭代启发式结合了新的权重函数和局部转置以减少交叉。第三遍通过构造和排列辅助图来找到节点的最佳坐标。第四遍使样条线绘制边缘。该算法可以很好地绘制图纸并快速运行。

(3)“将Graphviz用作库”

"Using Graphviz as a Library"提供了3.1节中每个布局引擎算法的摘要。 dot的部分描述如下:

  

如果可能,点算法产生关于边缘方向的图的排序布局。它特别适合显示层次结构或有向非循环图。基本布局方案归功于Sugiyama等[STT81]。点使用的具体算法遵循Gansner等[GKNV93]描述的步骤

     

点布局中的步骤是:1)初始化2)等级3)mincross 4)位置5)同一端口6)样条7)compoundEdges

     

在初始化之后,算法使用整数程序将每个节点分配给离散等级(等级)以最小化(离散)边长度的总和。下一步(mincross)重新排列等级内的节点以减少边缘交叉。接下来是实际坐标到节点的分配(位置),使用另一个整数程序来压缩图形并拉直边缘。此时,所有节点都将在coord属性中设置位置。另外,设置所有簇的边界框bb属性。

“[GKNV93]”参考是“绘制有向图的技术”,如上所述。

“[STT81]”参考如上所述的“分层系统结构的视觉理解方法”。

(4)您可能也对以下内容感兴趣: