我们说我有一个对象objects
的数组列表。
任何人都可以建议使用并行算法来找到距离任何objects[i]
左边最近的空对象的距离吗?
我知道如何按顺序执行此操作,需要O(n)
,但我需要一个可以并行执行的更快的操作。
答案 0 :(得分:1)
我们假设你有k
个帖子。
- 将数组划分为k个部分,每个部分大小为n / k。
- 在每个线程中,您有一个带有n / k个元素的子数组。
2.1。设置变量lastNull
- 保存此块中最后一个空值的索引- 屏障 - 所有线程必须在到达此处之前结束
- "主人"线程现在迭代k个线程的值,并将最接近的null(向左)的索引发送到每个块
- 所有线程都会迭代其数据并为每个线程设置正确的值。
醇>
复杂度:
k
个线程。 (假设是共享内存模型,否则你将需要发送将采用O(n)的数据,而无法绕过它)。小记:从理论上讲,人们通常可以优化O(k)阶段以并行执行它们,但这通常是多余的,除非处理数千台机器的大量集群。