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