我正在互联网上搜索,以便找到一些算法,该算法可以使用2个或n个进程并行遍历一个图,而一个过程不会进入另一个图的先前访问的节点,因此我可以加快整个图的总扫描速度,但我找不到任何东西。是否有任何算法可以帮助我并行执行此类任务?这值得么?

笔记 :
n个进程共享访问和访问节点的相同内存

谢谢你

最佳答案

您可以尝试使用消费者-生产者模型遍历图-但对纯模型进行一些修改:

  • 以块为单位读取和写入队列,而不是一次写入元素,还会更新以块为单位设置的visited。这样可以节省您的同步时间-不需要那么频繁地进行同步。
  • 修改队列(和visited集)时-您应该做一些额外的工作,以确保您不添加自从上次检查该集以来已经访问过的数据。

  • 请注意,使用这种方法-您可能会多次搜索某些顶点-但可以将其与队列和visited集的更新频率绑定(bind)在一起。

    值得吗?这些事情很难说-它取决于很多事情(图形结构,大小,队列实现等)。

    您应该运行一些测试,并尝试针对“更新频率”微调参数,并根据经验检查哪个更好。您应该使用statistical tools(通常wilcoxon test是事实上的标准),然后确定一个是否比另一个更好。

    10-08 14:24