2

以下是绘制相同层次结构的两种不同方法。请注意,在“堆叠”布局中,节点总是比其最高“子”节点高一层。 (重要:再如看到问题的底部编辑)“堆叠”与“悬挂”分层图形绘制算法的标准名称?

two different ways of visualising the same graph

做这两种类型的分层绘制方法有特定的名称?我试图找到现有的“堆叠”算法,但似乎无法显示任何信息,因为我不知道它叫什么。

如果他们没有名称来区分它们,因为它们依赖于相同的算法,是否有众所周知的参数集用于通过现有算法获得图的“堆叠”版本?谢谢!

编辑:虽然上面的图是严格的“trees”,我正在寻找算法应该能够处理这种情况的节点有一个以上的家长那里是从根本多个路径的情况下,和案件叶子。 Here's an examplehere's another

编辑2:如果对任何人都有用,使用预先计算的节点图层(y轴约束)的哈克(缓慢)力指向方法似乎可以正常工作。 Here's what it looks like。这个例子使用cytoscape.js和cola.js,它是颠倒的。这不是一个解决这个问题的方法,所以我只是把它作为一个编辑。

(SO wouldn't let me submit the JSBin link without a code block...) 
+0

如果我理解正确,左边的每个节点的y位置取决于任何子节点的*最大*深度?那么根据定义叶节点有y = 0?这基本上是你的算法。 – MSalters

+0

是的,正好。两者都有非常简单的节点深度规则 - 它们之间有一些相反的地方,一个锚定叶节点,另一个锚定根节点。我想象最小化交叉的逻辑会有点不同,但我没有想太多,因为我希望/假设有一堆已经在我身边使用的实现。 – JoeRocc

+0

交叉?树是一个平面图。一定是,它是非循环的。因此,零交叉。简单地说:任何有限树都有每个节点的子节点上限N以及有限的深度D.因此,每棵树都是深度为D的完整N元树的一个子集,在没有交叉的情况下很容易绘制。 – MSalters

回答

1

我不知道上述的任何具体名称。看起来在两种情况下分层算法都是最小化高度但基本上忽略宽度的longest path algorithm。如果您从底部开始对图形进行分层,并且图形有许多汇(顶出度为零),那么您将获得宽底层(“堆叠”布局?)。如果您从上到下对图进行分层,并且它有许多来源(零度入射的顶点),那么您将获得一个宽顶层(“悬挂”布局?)。