У меня есть этот массив (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 голосу. Один сказал, что это практически невозможно, потому что это пошаговый процесс, в то время как другой, похоже, уверен, что это будет действительно легко реализовать. Что ты думаешь?
P
фрагментов сокращает время этапа поиска наO(log P)
шага. Но настройкаP
потоков занимаетO(P)
времени. - person Daniel Fischer   schedule 27.11.2012