用于确定数据集中离散图的数量的算法

时间:2013-06-17 17:36:34

标签: algorithm mapreduce graph-theory graph-algorithm

我有一个包含顶点和它们连接到的其他顶点的数据集。该数据集表示无向图。我想要确定的是数据集中存在的谨慎断开连接图的数量。

例如,下面的数据(顶点,连接顶点数组)将代表两个谨慎的断开连接图:

123,[567,345]
345,[123,567,789]
567,[123,345]
789,[345]
321,[987]
987,[321]

在如此小的数据集上,我很容易想到让我得到答案的方法,但是当我将其扩展到具有数亿个顶点的数据集时,我不确定我有什么这非常有效。我倾向于做一些可以在Hadoop上运行的东西,但直接编写MapReduce工作的天气或使用像Giraph或Faunus这样的东西我很乐意得到一些建议。

感谢。

1 个答案:

答案 0 :(得分:1)

正如巴赫在评论中所说,这个问题,识别连通组件,通常是通过普通的广度优先搜索来解决的。 Skiena给出了如下基本算法:

connected_components( graph *g ){
   int c, i; /* component number and counter */
   initialize_search( g );
   c = 0;
   for( i = 1; i <= g->num_vertices; i++ ){
      if( discovered[i] == FALSE ){
         c += 1;
         printf( "component %d: ", c );
         bfs( g, i );  // breadth first search
         printf( "\n" );
      }
    }
}