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