【问题标题】:Finding Subgraph in a Graph在图中查找子图
【发布时间】:2013-09-24 09:34:15
【问题描述】:

我在这里显示了一个图表。仅针对节点 B_0、B_1 属于类型 B、C_0、C_1 的节点的节点。 C_2、C_3 属于 C 类节点,以此类推。 现在,我想找到多个子图,它们可以满足本示例定义的标准 -

标准 -

  1. 子图包含1个A类节点,1个B类节点,1个C类节点,1个D类节点。
  2. 子图有一条从A型节点到B型节点的边,一条边连接B型和C型,一条节点连接C型和D型。
  3. 子图包含一条从A型出子图到B型节点的边,一条边 从B型到C型节点在外面,从D型到E型的一条边在外面。

现在这个描述应该给出结果 -

  1. 子图 :: A_0, B_0, C_1, D_1
  2. 子图 :: A_0, B_0, C_0, D_0
  3. 子图 :: A_0、B_1、C_2、D_2
  4. 子图 :: A_0, B_1, C_3, D_3

我想知道,如果有什么算法,我可以找到这样的子图吗? 我试图通过进行所有可能的组合来找出一种算法。但是,这将是子图中节点数量的指数。因此,我想知道是否存在一种有效的计算方法。或者图论中是否存在类似性质的问题?

【问题讨论】:

标签: graph pattern-matching graph-algorithm subgraph


【解决方案1】:

您可以从访问 A 类型的所有节点开始。对于每个 A 节点,查看与其连接的所有 B 类型节点。从那里查看所有 C 类型的节点,依此类推,跟踪您的节点'已经从最后一个 A 节点访问过。然后,每当您到达完成搜索条件的子节点时,您就会添加从 A 节点到您所在位置的所有节点列表。本质上,您正在进行深度优先搜索,只要一个节点满足应该遵循的标准,只要没有更多有效节点(即会产生有效子图)从您当前的节点。

【讨论】:

  • 感谢这个想法。我认为,它看起来像一个 DFS 问题。但假设我必须选择 2C、3D 和 2E,它仍然是类似 DFS 的问题吗?因为它应该生成许多子图,例如 C_0,C_1,D_0,D_1,D_2,E_0,E_1 是解决方案之一。我们可以想象其他人。
猜你喜欢
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
相关资源
最近更新 更多