我有这个数组(A),其中有 n 个元素,这些元素保证被排序,我需要在并行系统中对它们执行二进制搜索。我从制作这个二分搜索算法开始。它是迭代的,因为我还不确定如何将递归合并到并行处理中。
/* Looking for element k in array A of length n */
min = 0;
max = n - 1;
while(min <= max)
{
midpoint = min + ((max-min)/2); //index
if(A[midpoint] > k) //discard upper half
max = midpoint - 1;
else if(A[midpoint] < k) //discard lower half
min = midpoint + 1;
else
return midpoint; //Found k, return index
}
return -1; //not found
在并行算法中,我可以访问 p 个处理器,它是一个允许并发读取但独占写入的系统。真正的问题是我仍在按顺序思考。也就是说,我似乎看不出有任何方法可以使用多个处理器来完成,因为您不能在不首先知道您在中点值方面的位置的情况下“丢弃”阵列中不需要的部分。它似乎天生是顺序的。
伪代码:
Global: //Variables accessible by all processors
index; //index of k
p; //number of processors
i; //the i^th processor
n; //number elements in array A
A[0, 1, ... , (n-1)];
local: //Variables accessible by only the owning processor
//Not sure what I need yet
Begin
Spawn(P1, P2 . . . P(p-1)); //"create" the p processors
for all P where 0 <= i <= (p-1) do //each processor does the following code
//I'm stuck here
endfor
End
最后一件事:我看到一个用户发布的问题,询问是否有办法通过并行处理进行二进制搜索。这个问题没有真正决定性的答案,因为两个相关的答案都获得了 1 票。一个人说这实际上是不可能的,因为这是一个循序渐进的过程,而另一个人似乎非常有信心它会很容易实施。你觉得呢?你有没有什么想法?