到左边最近的空节点的距离(并行算法)

时间:2015-02-10 22:00:15

标签: algorithm parallel-processing

我们说我有一个对象objects的数组列表。 任何人都可以建议使用并行算法来找到距离任何objects[i]左边最近的空对象的距离吗?

我知道如何按顺序执行此操作,需要O(n),但我需要一个可以并行执行的更快的操作。

1 个答案:

答案 0 :(得分:1)

我们假设你有k个帖子。

  
      
  1. 将数组划分为k个部分,每个部分大小为n / k。
  2.   
  3. 在每个线程中,您有一个带有n / k个元素的子数组。   
    2.1。设置变量lastNull - 保存此块中最后一个空值的索引
  4.   
  5. 屏障 - 所有线程必须在到达此处之前结束
  6.   
  7. "主人"线程现在迭代k个线程的值,并将最接近的null(向左)的索引发送到每个块
  8.   
  9. 所有线程都会迭代其数据并为每个线程设置正确的值。
  10.   

复杂度:

  • 步骤1需要O(k)时间 - 将数据发送到k个线程。 (假设是共享内存模型,否则你将需要发送将采用O(n)的数据,而无法绕过它)。
  • 步骤2为每个线程花费O(n / k)时间并且并行完成
  • 步骤3是一个简单的障碍,是O(k) - 等待所有线程。
  • 步骤4是O(k) - 从每个线程轮询数据,然后迭代并将数据推送到每个线程。
  • 步骤5对于每个线程再次为O(n / k)并且并行完成。

小记:从理论上讲,人们通常可以优化O(k)阶段以并行执行它们,但这通常是多余的,除非处理数千台机器的大量集群。