我想在我的应用程序中合并语义相同的节点。我可以使用工具或算法来处理我的图表吗?
输入示例:节点 a 和 b 应该合并。
digraph g {
a -> {b;c;d;e};
b -> {a;c;d;e};
}
使用dot
的图表图片:
输出示例:节点 a 和 b 已合并到节点 ab 。
digraph g {
ab -> {c;d;e};
}
粗略草图算法:
# XE = a set of nodes, represent a directed edge (x,_)
# YE = a set of nodes, representing a directed edge (y,_)
# XE \ y = XE except y
# YE \ x = YE except x
For each pair of nodes x,y
If (edges (x,y) and (y,x) exists) AND (XE \ y == YE \ x)
create new node xy -> xedges\y
delete nodes x and y and their edges
答案 0 :(得分:2)
有一个工具:它叫gvpr
,代表图形模式扫描和处理语言。
来自链接的pdf:
gvpr 是受 awk 启发的图表流编辑器。它将输入图复制到其输出,可能会改变它们的结构和 属性,创建新图表或打印任意信息。
我相信你可以通过创建一个gvpr程序来实现你所需要的。
我没有时间创建可行的解决方案,但您可以查看this answer以获取示例gvpr程序和其他信息。
答案 1 :(得分:1)
Graphviz中没有内置此功能,但您可以借助disjoint set data structure
预处理图表