繁体   English   中英

并行联合查找算法

[英]Parallel union find algorithm

我需要并行化kruskal的算法,串行版本使用联合查找算法来检测无向图中的循环。 有没有办法并行化这部分代码?

嗯,它可以在某种程度上并行化。 它如下:

最初,所有边缘都按升序排序。 有一个main thread实际上从头开始扫描每个边缘,并决定添加当前边缘是否形成周期。 我们将算法并行化的主要目的是使这些检查并行。

这是我们使用worker threads 每个线程都有一定数量的边来检查,每个线程在每次迭代后检查其边是否与当前表示形成一个循环(迭代意味着主线程添加新边)。 当主线程继续添加边时,一些线程看到某些边已经与当前表示形成一个循环。

这些边缘被标记为discarded 当主线程到达这样的边缘时,它只是移动到下一个边缘而不对其进行任何检查。

因此,我们实际上已经将这些检查并行,这意味着算法快速运行,从而提高了效率。

事实上,有一篇很好的论文使用了与上述相同的想法。

编辑:

如果你非常关心整体算法的运行时间,你甚至可以在@ jarod42建议时最初使用并行排序算法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM