【问题标题】:How can I merge nodes in a graph?如何合并图中的节点?
【发布时间】:2013-02-19 19:52:54
【问题描述】:

我想合并在我的应用程序中语义相同的节点。有什么工具或算法可以用来处理我的图表吗?

输入示例: 节点 ab 应合并。

digraph g {                                                                     
  a -> {b;c;d;e};                                                               
  b -> {a;c;d;e};                                                               
}

使用dot的图形图像:

输出示例: 节点 ab 已合并为节点 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

【问题讨论】:

  • 嗨,Martin,我知道这已经很长时间了,但你设法让它工作了吗?

标签: graph graphviz graph-algorithm


【解决方案1】:

有一个工具:它叫做gvpr,代表图形模式扫描和处理语言

来自链接的 pdf:

gvpr 是一个受 awk 启发的图形流编辑器。它将输入图复制到其输出,可能会改变它们的结构和 属性、创建新图表或打印任意信息。

我相信您可以通过创建一个 gvpr 程序来实现您所需要的。

我没有时间创建一个可行的解决方案,但您可以查看this answer 以获取示例 gvpr 程序和其他信息。

【讨论】:

    【解决方案2】:

    Graphviz 中没有内置这样的功能,但您可以借助 disjoint set data structure 对图形进行预处理

    【讨论】:

      猜你喜欢
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多