Algorithm “的标准名称”;“堆叠”;对;悬挂;分层图绘制算法?

Algorithm “的标准名称”;“堆叠”;对;悬挂;分层图绘制算法?,algorithm,graph-theory,directed-acyclic-graphs,graph-layout,Algorithm,Graph Theory,Directed Acyclic Graphs,Graph Layout,这里有两种不同的方法来绘制相同的层次结构。请注意,在“堆叠”布局中,节点始终比其最高的“子”节点高一层。(重要提示:请参见问题底部的编辑以了解另一个示例) 这两种类型的分层绘图方法是否有特定的名称?我试图找到“堆叠”算法的现有算法,但似乎无法显示任何信息,因为我不知道它叫什么 如果他们没有名字来区分它们,因为他们依赖于相同的算法,那么是否有一组众所周知的参数用于使用现有算法获得“叠加”版本的图形?谢谢 编辑:尽管上面的图表是严格的“”,但我正在寻找的算法应该能够处理节点有多个父节点的情况,以及

这里有两种不同的方法来绘制相同的层次结构。请注意,在“堆叠”布局中,节点始终比其最高的“子”节点高一层。(重要提示:请参见问题底部的编辑以了解另一个示例)

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

如果他们没有名字来区分它们,因为他们依赖于相同的算法,那么是否有一组众所周知的参数用于使用现有算法获得“叠加”版本的图形?谢谢

编辑:尽管上面的图表是严格的“”,但我正在寻找的算法应该能够处理节点有多个父节点的情况,以及从根到叶有多条路径的情况,和

Edit2:如果它对任何人都有用的话,一种带有预先计算的节点层(y轴约束)的简单(缓慢)的力导向方法似乎可以正常工作。该示例使用cytoscape.js和cola.js,并且是颠倒的。这根本不是这个问题的解决方案,所以我只是把它作为一个编辑放在这里

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

我不知道上面有什么具体的名字。看起来这两种情况下的分层算法都是最小化高度但实际上忽略宽度的算法。如果自下而上对图形进行分层,并且图形具有多个汇点(顶点的出度为零),则将得到一个较宽的底层(“堆叠”布局?)。如果自上而下对图形进行分层,并且图形有多个源(顶点的度数为零),则会得到一个较宽的顶层(“悬挂”布局?)。

如果我理解正确,在左侧,每个节点的y位置取决于任何子节点的最大深度?所以叶节点的定义是y=0?这基本上就是你的算法。是的,没错。两者都有非常简单的节点深度规则——它们有点相反,一个锚定叶节点,另一个锚定根节点。我想最小化交叉的逻辑可能会有点不同,但我没有认真考虑,因为我希望/假设已经有很多实现供我使用。交叉?树是平面图。必须是,这是非循环的。因此,零交叉点。简单地说:任何有限树每个节点都有一个上限N个子节点,并且有一个有限的深度D。因此,每棵树都是深度D的完整N元树的一个子集,很容易在没有交叉的情况下绘制。啊,看起来我意外地绘制了一个特例。这不是我的领域,但我想我正在寻找一个更通用的“DAG”算法,而不是一个严格的树。它应该能够处理的另一个图形(我将更新问题)。如果我必须为这个堆叠的布局编写自己的cytoscape扩展,我会有点惊讶,但也许这和我最初搜索时看到的一样罕见。