如果您从 R 中使用 igraph,请使用此选项
| dominator_tree {igraph} | R 文档 |
有向图的支配树。
dominator_tree(graph, root, mode = c("out", "in", "all", "total"))
图 |
一个有向图。如果它不是一个流图,并且包含一些从根顶点不可达的顶点,那么这些顶点将被收集并作为结果的一部分返回。 |
root |
根(或源)顶点的 ID,这将是树的根。 |
模式 |
常量,必须是 ' |
流图是一个有向图,具有一个特殊的起始(或根)顶点 r,使得对于任何顶点 v,都存在一条从 r 到 v 的路径。顶点 v 支配另一个顶点 w (不等于 v),如果从 r 到 w 的每条路径都包含 v。顶点 v 是 w 的直接支配者,v=\textrm{idom}(w),如果 v 支配 w 并且 w 的每个其他支配者都支配 v。边 {(\textrm{idom}(w), w)| w \ne r} 形成一棵有向树,以 r 为根,称为图的支配树。顶点 v 支配顶点 w 当且仅当 v 是支配树中 w 的祖先。
此函数实现 Lengauer-Tarjan 算法来构造有向图的支配树。有关详细信息,请参见下面的参考。
具有以下组件的列表
dom |
一个数值向量,给出每个顶点的直接支配者。 对于从根无法到达的顶点,它包含 |
domtree |
一个图对象,即支配树。 它的顶点 ID 与输入图的顶点 ID 相同。 孤立顶点是从根无法到达的顶点。 |
leftout |
一个数值向量,包含从根无法到达的顶点 ID。 |
Gabor Csardi csardi.gabor@gmail.com
Thomas Lengauer, Robert Endre Tarjan: A fast algorithm for finding dominators in a flowgraph, ACM Transactions on Programming Languages and Systems (TOPLAS) I/1, 121–141, 1979.
## The example from the paper
g <- graph_from_literal(R-+A:B:C, A-+D, B-+A:D:E, C-+F:G, D-+L,
E-+H, F-+I, G-+I:J, H-+E:K, I-+K, J-+I,
K-+I:R, L-+H)
dtree <- dominator_tree(g, root="R")
layout <- layout_as_tree(dtree$domtree, root="R")
layout[,2] <- -layout[,2]
plot(dtree$domtree, layout=layout, vertex.label=V(dtree$domtree)$name)