如何在大图中找到所有连接的两条边?

时间:2015-02-10 18:23:16

标签: algorithm graph social-networking data-mining graph-theory

我有一个大图(例如,facebook网络,推特网络),我想找到两个连接的边。例如,如社交网络中的p1< ---> p2< ---> p3,p1,p2,p3是三个不同的人,但它们是连接的。我知道有一些算法可以找到三角形,但除了三角形之外,我还需要找到上面的组件(也就是说,通过从三角形中删除一条边来形成的组件)。 顺便说一下,这个组件有一个术语吗?

感谢。

3 个答案:

答案 0 :(得分:1)

你没有找到很多关于这方面的出版物的原因是这个问题太容易了。

如果你有对称关系,节点“b”的任何两个邻居“a”和“c”形成这样的“1-transitive”连接:b是链接。 map-reduce的伪代码是

def map(b, neighbors):
  for a in neighbors:
    for c in neighbors:
      if not a == c:
        send(a, c)

如果关系不对称,只需添加另一个映射器以使其对称。

答案 1 :(得分:0)

我相信您正在寻找输入图的connected components。基本上,可以使用depth-first search找到这些。你从图中的某个点开始。终止时,所有访问的节点形成一个连接的组件。然后,通过选择下一个未访问的节点进行迭代,发现连接的组件,直到访问所有节点。

答案 2 :(得分:0)

使用depth first search并跟踪递归深度:一旦达到深度2,打印堆栈中的所有节点。

对每个节点重复,根据需要消除重复。

我不知道某个特定术语,您似乎想在任意2个节点之间找到长度为2的所有路径。