“堆叠”与“悬挂”分层图形绘制算法的标准名称?
Posted
技术标签:
【中文标题】“堆叠”与“悬挂”分层图形绘制算法的标准名称?【英文标题】:Standard names for "stacked" versus "hanging" layered graph drawing algorithms? 【发布时间】:2018-01-28 16:11:58 【问题描述】:这是绘制相同层次结构的两种不同方法。请注意,在“堆叠”布局中,节点总是比它们最高的“子”节点高一层。 (重要提示:请参阅问题底部的编辑以获取另一个示例)
这两种分层绘制方法有具体的名称吗?我正在尝试为“堆叠”算法查找现有算法,但似乎无法显示任何信息,因为我不知道它叫什么。
如果它们没有名称来区分它们,因为它们依赖于相同的算法,那么是否有众所周知的参数集可以使用现有算法获得“堆叠”版本的图?谢谢!
编辑:虽然上面的图表是严格的“trees”,但我正在寻找的算法应该能够处理节点有多个父节点的情况,以及有从根到叶的路径不止一条。 Here's an example 和 here's another。
Edit2:如果它对任何人都有用,使用预先计算的节点层(y 轴约束)的 hacky(且缓慢)强制导向方法似乎可以正常工作。 Here's what it looks like。该示例使用 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”算法,而不是一种用于严格树的算法。 Here's an example 它应该能够处理的另一个图表(我将更新问题)。如果我必须为这种堆叠布局编写自己的 cytoscape 扩展,我会感到有点惊讶,但也许它和我最初搜索时看起来一样罕见。 【参考方案1】:我不知道上述的任何具体名称。看起来这两种情况下的分层算法都是longest path algorithm,它最小化了高度,但基本上忽略了宽度。如果您从下往上对图进行分层,并且该图有许多汇(出度为零的顶点),那么您将得到一个宽的底层(“堆叠”布局?)。如果您从上到下对图形进行分层,并且它有很多来源(入度为零的顶点),那么您将获得一个宽的顶层(“悬挂”布局?)。
【讨论】:
以上是关于“堆叠”与“悬挂”分层图形绘制算法的标准名称?的主要内容,如果未能解决你的问题,请参考以下文章