앞에 오면이 은 숙제입니다. 말하자면, 매우 개방적이며,이 문제 (또는 병렬 알고리즘)에 대해 생각하기 시작하는 방법에 관해서는 거의 지침이 없습니다. 포인터가 올바른 방향으로 가고 싶습니다. 은 전체 솔루션이 아닙니다. 도움이 될 수있는 독서도 우수 할 것입니다.첫 번째 발생 병렬 문자열 매칭 알고리즘
병렬 알고리즘을 사용하여 많은 양의 텍스트에서 패턴의 첫 번째 일치 항목을 일치시키는 효율적인 방법을 찾고 있습니다. 패턴은 간단한 문자 매칭이며 정규 표현식은 관련이 없습니다. 나는 의 모든을 찾을 수있는 방법을 찾아 낼 수 있었지만 그 다음에는 모든 경기를 살펴보고 첫 번째 것을 찾아야합니다.
그렇다면 질문을 통해 프로세스간에 텍스트를 깨고 성공을 거둘 수 있을까요? 아니면 j'th 프로세스가 패턴의 j 번째 문자를 검색 할 때 프로세스 동기화 검색을하는 것이 가장 좋을까요? 모든 프로세스가 일치하는 경우 true를 반환하면 프로세스는 해당 패턴과 일치하는 위치를 변경하고 모든 문자가 일치 될 때까지 계속 진행 한 다음 첫 번째 일치 항목의 인덱스를 반환합니다.
내가 지금까지 가지고있는 것은 극도로 기본이며, 작동하지 않을 수도 있습니다. 나는 이것을 구현하지 않겠지 만, 어떤 조언도 감사 할 것입니다.
P 프로세서, 길이 t의 텍스트, 길이 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 프로세서 한도를 부과합니까? –
L 프로세서 제한은 저에 의해 지정됩니다. 메모리가 공유되지 않는다고 가정합니다. MPI를 사용하는 것이 핑계 거리이기 때문입니다. – Xorlev