【问题标题】:Graph transformation - vertices into edges and edges into vertices图变换——顶点到边,边到顶点
【发布时间】:2012-12-04 10:34:55
【问题描述】:

是否有任何算法或任何名称可以将图转换为可以将边转换为顶点并将顶点转换为边的图?就为了我们可以从中得到一个新的图表或任何与这个问题类似的东西?我不确定这是否真的有意义,但如果你能就这样的问题给我任何提示,我会很高兴。

【问题讨论】:

  • 您想要新的边缘在哪里?旧边在哪里相遇? en.wikipedia.org/wiki/Edge_graph
  • 在我看来,这种类型的任何转换都会在时间上呈指数增长,因为它可以用来将汉密尔顿循环问题简化为欧拉循环问题。
  • @jan-dvorak 是的,边缘图就是我要找的,谢谢。所以现在我知道如何将有向图转换成它的有向线图,但是你知道是否有办法将它转换回原始图吗?
  • @krajol 参见维基百科文章。您需要找到一种方法来用团(完整子图)覆盖折线图,这样每个顶点都是两个团的一部分。
  • 如果你只连接内边和外边,你需要找到对应图的覆盖(完全二分图)。这种特殊情况可能比无向情况更容易:折线图中某个顶点的所有入边都属于一个完全二部子图,所有出边都属于另一个事件完全二部。

标签: algorithm graph


【解决方案1】:

LineGraph 是 Wolfram 语言的内置函数:

http://reference.wolfram.com/language/ref/LineGraph.html

这就是它的作用:

  • LineGraph[g] 中的每个顶点对应 g 中的一条边。
  • 对于无向图 g,如果 LineGraph[g] 中的两个顶点的对应边共享一个公共顶点,则它们是相邻的。
  • 对于有向图 g,如果 LineGraph[g] 中的两个顶点的对应边相连,则它们是相邻的,即一条边的目标是另一条边的源。
  • LineGraph 适用于无向图、有向图和多重图。

【讨论】:

    【解决方案2】:

    您要的是折线图。您可以使用networkx line_graph function 创建给定图形的折线图或对偶图。但是,请注意,此函数不会传播原始图表中的数据,因此如果需要,您必须自行解决。

    【讨论】:

      【解决方案3】:

      您是否考虑过基于模式的图形转换?就像你会

      • 搜索图形模式,例如您想变成节点的那种边,以及
      • 定义将该边转换为节点/顶点的操作,例如将所有边属性转换为新节点/顶点的属性。

      在图转换文献中,这两个步骤被称为 graph-transformation-ruleleft-hand sideright-hand-hand .

      在该领域有很多可用的科学文献,例如:http://www.springer.com/de/book/9783319211442

      还有专门的图转换开发方案,比如Soley Studio

      希望对您有所帮助。

      【讨论】:

        【解决方案4】:

        我相信您可以使用以下 Python 库轻松地将边转换为顶点:http://networkx.lanl.gov/

        您可以获取边列表、节点列表并交换两者以构建新图。您只需要一些(基本)Python 知识。

        【讨论】:

        • 1.我认为链接是错误的。我认为您的意思是 networkx 库。它是图形库... 2. networkx 具有内置函数“line_graph”...
        猜你喜欢
        • 2016-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-14
        • 2011-09-08
        • 2010-10-03
        • 1970-01-01
        • 2016-12-14
        相关资源
        最近更新 更多