使用Boruvka MST算法搜索森林边缘的最佳方法是什么?

时间:2017-12-11 19:45:14

标签: java algorithm data-structures graph minimum-spanning-tree

我目前正致力于编写Baruvka算法,如下所示。但是如果已经存在于使用贪婪选择已经采用的边缘列表中,则给出一个检查边e = uv的问题。如何在O(logn)时间内搜索边e?你可以帮忙解决这个问题......搜索操作可以使用BFS或DFS来完成,并检查是否存在边缘,但如果我为每个阶段进行操作,这将成为一项代价高昂的操作。

Boruvka
 { 
while (T < n-1 edges)
 { 
Find the components of T 
for each tree Ti of the forest T
 { 
Find the smallest weight edge e = uv such that u is in Ti and v is not in Ti 

//Before adding e to T I have to check if it already exists in the list of greedy edges or not. If it exists then I would like to skip adding e to T and go to the next phase. 
Add e to T 
 } 
} 
 return T 
}

但是存在多次添加一条边的问题。因此,为了消除这一点,我们需要在添加之前检查是否已将边添加到T中。这项检查是否有O(n)实现?

1 个答案:

答案 0 :(得分:0)

您应该为每个组件使用不相交的集数据结构或其他一些数据结构。当边连接两个不同的连接组件时,边缘如何先前存在于树边列表中?请阅读Boruvka's algorithm

无论何时选择边,都应合并由该边连接的那两个组件。合并时,将此大型组件视为新的顶点,其边缘应为其组成组件的边缘向外。