我需要并行kruskal算法,序列版本使用联合查找算法来检测无向图中的周期。有什么办法可以将这部分代码并行化吗?并行联合查找算法
并行联合查找算法
回答
那么,它可以在一定程度上并行化。它如下:
最初所有的边都按照升序排序。有一个main thread
实际上从头开始扫描每条边,并决定添加当前边是否形成循环。我们并行化算法的主要目的是使这些检查平行。
这是我们使用worker threads
的地方。每个线程都有一定数量的边进行检查,每个线程在每次迭代后检查其边是否与当前表示形成循环(迭代表示主线添加新边)。当主线程继续添加边时,一些线程会看到某些边已经与当前表示形成一个循环。
这样的边缘被标记为discarded
。当主线程到达这样的边缘时,它会简单地移动到下一个边缘,而不进行任何检查。
因此,我们实际上使这些检查并行,这意味着算法运行迅速提高效率。
实际上,有一个nice paper使用了上述相同的想法。
编辑:
如果你非常在意过的所有算法的运行时间,你甚至可以使用并行排序算法最初是作为@ jarod42建议。
在openMP中使用这种方法很容易吗?我的意思是,用时间表管理线程似乎很困难.. – Betelgeuse
@Betelgeuse你只需创建线程并为每个线程分配特定数量的边线。一种分配方式是序列式的。而且他们会在添加新边缘后检查。如果分配给线程的所有边都由主线程完全处理,则终止相应的工作线程。我想这很容易! – nitish712
- 1. 快速查找算法 - 联合运算 - 与集合论中的联合相同吗?
- 2. 加权联盟查找算法
- 3. SQL从联合结果合并行并计算
- 4. 合并算法
- 5. Apriori算法 - 查找2组合
- 6. 查找算法
- 7. 查找算法
- 8. 结合行联合查询
- 9. 合并算法查看只读
- 10. 当集合不相交时,是否有任何与联合查找相似的交集查找算法?
- 11. 联合查询合并字段
- 12. 查找算法类
- 13. 加权联合查找算法中树的大小是什么意思?
- 14. 查找按字符索引分组的多个字符串的联合算法
- 15. 查找下一个多行的算法
- 16. 算法:在一行中查找峰值
- 17. 算法找出cheapst组合
- 18. 在4连接两遍算法中寻找联合发现
- 19. 阵列合并或联合发行
- 20. 合并文件算法
- 21. 合并排序Java算法
- 22. 合并使用STL算法
- 23. 算法:合并重叠段
- 24. SQL表合并算法
- 25. 3路XML合并算法
- 26. 算法:合并的std :: unordered_maps
- 27. 使用关联运算符在Scala中的并行聚合
- 28. 查找要合并的表
- 29. 查找更改合并
- 30. levenshtein算法并行
好问题!但是,你能告诉我们迄今为止你的尝试代码吗? –
由于[Disjoint-set_data_structure](http://en.wikipedia.org/wiki/Disjoint-set_data_structure)的所有功能几乎都是恒定时间(但初始化)。我想知道在这些函数上做并行性是否合理...可以通过并行来对边缘进行分类。 – Jarod42