Для начала, это is домашнее задание. Это, как говорится, чрезвычайно открытое, и у нас почти нет указаний относительно того, как даже начать думать об этой проблеме (или о параллельных алгоритмах в целом). Я бы хотел, чтобы указатели в правильном направлении и - не полное решение. Любое чтение, которое могло бы помочь, было бы превосходным.Алгоритм сопоставления параллельных строк первого порядка
Я работаю над эффективным способом сопоставления первого вхождения шаблона в большом количестве текста с использованием параллельного алгоритма. Шаблон - это простое совпадение символов, при этом не задействовано регулярное выражение. Мне удалось найти возможный способ найти всех совпадений, но для этого требуется, чтобы я просмотрел все совпадения и нашел первый.
Итак, вопрос в том, будет ли у меня больше успеха, нарушая текст между процессами и сканированием таким образом? Или было бы лучше, если бы какой-то процесс выполнял синхронизацию процессов, где j-й процесс ищет j-й символ шаблона? Если тогда все процессы возвращают true для их соответствия, процессы будут менять свою позицию в соответствии с указанным шаблоном и снова двигаться вверх, продолжая до тех пор, пока все символы не будут сопоставлены, а затем вернут индекс первого совпадения.
Что я до сих пор крайне элементарно и, скорее всего, не работает. Я не буду реализовывать это, но любые указатели будут оценены.
С р процессорами, текстом длиной т, а шаблоном длиной L и потолком L процессоров, используемым:
for i=0 to t-l: for j=0 to p: processor j compares the text[i+j] to pattern[i+j] On false match: all processors terminate current comparison, i++ On true match by all processors: Iterate p characters at a time until L characters have been compared If all L comparisons return true: return i (position of pattern) Else: i++
Проблема с вашим предлагаемым алгоритмом заключается в том, что есть * путь * слишком много служебных сообщений между процессорами. Если шаблон не слишком длинный, вам будет лучше, если каждый процессор будет искать соответствие в определенной точке и прекратится в самом раннем матче. –
Была ли задана модель PRAM? Или вы можете принять любой? Также является ли ограничение на процессор L, наложенным вами или проблемой? – 2010-02-22 23:02:15
Предел процессора L указан мной. Я предполагаю, что память не разделяется, так как это предлог для использования MPI. – Xorlev