在图中查找子图

时间:2013-09-24 09:34:16

标签: graph pattern-matching graph-algorithm subgraph

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

标准 -

  1. 子图包含1个A类节点,1个B类节点,1个C类节点,一个D类节点。
  2. 子图有一个从A型节点到B型节点的边,一个边连接B型和C型,一个节点连接C型和D型。
  3. 子图包含一个从A型走出子图到B型节点的边,一个边 从B型到C型节点外,从D型到E型外边缘。
  4. 现在这个描述应该给出结果 -

    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
    5. 我想知道,如果有任何算法,我可以通过它找到这样的子图? 我尝试通过制作所有可能的组合来找出算法。但是,这将是子图中节点数量的指数。因此,我想知道是否存在一种有效的计算方法。或者如果图论中存在类似性质的问题?

      Graph

1 个答案:

答案 0 :(得分:2)

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