用于生成软件堆栈图的算法

时间:2009-05-11 14:57:17

标签: algorithm diagram

我正在寻找一种算法的想法,该算法在给定一组非循环依赖项的情况下生成类似于以下的图表(我使用此图像来表明依赖项可能很复杂)

alt text
(来源:interactivetvweb.org

3 个答案:

答案 0 :(得分:2)

虽然不是算法(这是你要求的),但你可能想要查看NDepend,它执行类似的分析,并生成类似于你所追求的图表:

http://ndepend.com/

(我与NDepend没有任何关系)

答案 1 :(得分:2)

并不总是可以制作这样的图表。 (非循环)依赖关系:

  

A取决于X,Y,Z

     

B取决于X,Y,Z

     

C取决于X,Y,Z

描述了六个顶点的完整二分图,即non-planar。对于您显示的图表类型,这样做的结果是图表中的至少一个区域必须分成两个单独的部分,和/或至少其中一个区域不能直接连接到其依赖。

基于图形的可视化(例如graphvis)可避免此问题,其中边可以相互交叉。

用于生成您正在寻找的图表类型的启发式算法的大纲如下:

  1. 解析依赖关系树以计算每个项目的“级别”。在上面给出的例子中,X,Y和Z将在该图中的1级出现三次,作为A,B和C(在0级)的子项
  2. 以明显的方式绘制树,每个“级别”的项目处于相同的水平级别,并且他们的祖先/子级分别位于其上方/上方。可以选择在每个级别放置项目的顺序。
  3. 根据图表中单个项目拆分为多个区域的次数,计算图表有多好的度量标准。如果物品的订购是好的,并且代表相同物品的两个或多个区域相互接触,则可以将它们融合在一起。
  4. 使用此指标,使用组合优化算法(例如Metropolis algorithm)优化同一级别的项目排列。
  5. 这不会每次都产生最好的图表(如果这样的概念定义得很好......)但是应该像你的例子那样为问题做一个合理的工作。

答案 2 :(得分:0)

STAN4J从java-code生成这种图表。