在175K节点的图形中找出路径

时间:2012-12-04 03:03:51

标签: algorithm graph graph-theory dijkstra

我在大数据分析中面临一个问题,我发现使用Dijkstras算法的路径超过175K节点的图形。但问题是,如果路径存在与否,我不知道特定的源和目的地。我必须为大约1000个来源和目的地做这件事。但是我无法随机选择它们,因为我不确定它们之间是否存在路径。我不知道如何处理这个问题。 MapReduce环境中的一次算法执行在本地大约需要15分钟。因此,试错不是一种选择。只有我能找到至少1000个来源和目的地才能找到周期(?)或强连接组件?它是否正确 ?我希望我的问题清楚明白。

我基本上是在寻找找到1000对来源和目的地,在这个尺寸的图表中存在路径

3 个答案:

答案 0 :(得分:4)

我建议随机选择1000个源节点,然后为每个节点运行Breadth-First-Search,直到您访问k个节点。然后,选择您要访问的下一个节点,并将其设置为该源的目标。

使用此方法,可以保证每个目标都可以从该源访问。

答案 1 :(得分:3)

我们可以使用像disjoint-union-set(DUS)这样的数据结构。我们进行初始化以获得整个图的连通性。如果a可以达到b,它们将位于DUS中的同一组中。初始化的复杂性完全取决于图中边的数量。查询是关于O(1)。

答案 2 :(得分:0)

这是我建议的算法:

findPairsPath ()
{
    define 2D Array SD //holds source-destination nodes
    SD = {}
    pick any node u randomly
    k=0

    while (k<1000)
    {
       DFS (u, k)
       pick any node u randomly not stored in SD 
    }
}

DFS (u, k)
{

    for all nodes v adjacent to u and not stored in SD
     {
       store (u,v) in SD //storing a source and a destination
       k++
       DFS (v,k)

     }

}