Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在175K个节点的图中查找路径_Algorithm_Graph_Graph Theory_Dijkstra - Fatal编程技术网

Algorithm 在175K个节点的图中查找路径

Algorithm 在175K个节点的图中查找路径,algorithm,graph,graph-theory,dijkstra,Algorithm,Graph,Graph Theory,Dijkstra,我在大数据分析中遇到了一个问题,我正在使用Dijkstras算法为超过175K个节点的图找出路径。但问题是,对于特定的源和目标,我不知道是否存在路径。我必须为大约1000个来源和目的地这样做。但我不能随机选择它们,因为我不确定它们之间是否存在路径。我不知道该怎么处理。在MapReduce环境中执行一次算法在本地大约需要15分钟的时间。因此,试错法不是一种选择。只有我们我能找到至少1000个源和目的地,才能找到循环(?)或强连接组件?这是正确的吗?我希望我的问题清楚易懂 我基本上是在寻找1000对

我在大数据分析中遇到了一个问题,我正在使用Dijkstras算法为超过175K个节点的图找出路径。但问题是,对于特定的源和目标,我不知道是否存在路径。我必须为大约1000个来源和目的地这样做。但我不能随机选择它们,因为我不确定它们之间是否存在路径。我不知道该怎么处理。在MapReduce环境中执行一次算法在本地大约需要15分钟的时间。因此,试错法不是一种选择。只有我们我能找到至少1000个源和目的地,才能找到循环(?)或强连接组件?这是正确的吗?我希望我的问题清楚易懂


我基本上是在寻找1000对源和目的地,对于这些源和目的地,在这样大小的图中存在路径

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


通过这种方法,您可以保证每个目的地都可以从该源访问。

我们可以使用像不相交联合集(DUS)这样的数据结构。我们进行初始化,得到整个图的连通性。如果a可以到达b,则它们将位于DU中的同一集合中。初始化的复杂性完全取决于图中的边数。查询是关于O(1)。

我建议使用一种算法:

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)

     }

}
findPairsPath()
{
定义二维数组SD//保存源目标节点
SD={}
随机选取任意节点u
k=0

虽然(kSo您是否在寻找一种方法来确定节点
dest
是否可以从节点
src
访问?我基本上是在寻找1000对源和目标,这些源和目标的路径存在于一个如此大的图中这些对上有任何约束?或者它们是否完全是任意的?您能告诉我们您使用mapreduce做了什么吗hink 175k顶点可以通过igraph()轻松处理,所以您可以切换到那个位置。当然,这也取决于图形的密度。免责声明:我是igraph的作者之一。为什么要麻烦BFS?只需选择一个随机节点作为源,选择它的一个邻居作为目标,无需搜索。@jwpat7这是
k=0
的情况,对吗?BFS会让您更感兴趣我认为,ing的问题。但问题陈述没有提到任何路径长度,只要求存在一条路径。k=0使它保持简单;给定问题陈述,k>0是一个不必要的复杂性。@jwpat7严格来说,是的。但我对OP的解释是,他希望能够运行Djikstra的非平凡执行。Picking neighbors不会导致这种情况。我认为这里的讨论是关于偏差的。即使是
k>0
对的选择也存在偏差,这可能是一个问题,因为应用程序似乎是数据分析。OP需要澄清他们在采样过程特征方面的要求。这在无向图中有效,但在有向图中,
a
可以从
b
中访问,而
b
不能从
a
中访问,我认为DUS不能指出这一点。@sammusmann是的,你是对的,这个算法可以只处理无向图。