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