【发布时间】:2011-01-19 20:25:45
【问题描述】:
首先,这是功课。话虽如此,它是非常开放的,对于如何开始思考这个问题(或一般的并行算法),我们的指导几乎为零。我想要正确方向的指针,不是一个完整的解决方案。任何可能有帮助的读物也会非常好。
我正在研究一种使用并行算法匹配大量文本中第一次出现的模式的有效方法。该模式是简单的字符匹配,不涉及正则表达式。我已经设法找到一种可能的方法来查找 所有 匹配项,但这需要我查看所有匹配项并找到第一个匹配项。
所以问题是,我会更成功地在进程之间分解文本并以这种方式扫描吗?还是最好进行某种进程同步搜索,其中第 j 个进程搜索模式的第 j 个字符?如果所有的进程都为它们的匹配返回真,这些进程将改变它们在匹配所述模式中的位置并再次向上移动,直到所有字符都匹配,然后返回第一个匹配的索引。
到目前为止,我所拥有的都是非常基本的,而且很可能不起作用。我不会实现这一点,但任何指针将不胜感激。
使用 p 个处理器,长度为 t 的文本,长度为 L 的模式,以及使用 L 个处理器的上限:
对于 i=0 到 t-l: 对于 j=0 到 p: 处理器 j 将 text[i+j] 与 pattern[i+j] 进行比较 在错误匹配上: 所有处理器终止当前比较,i++ 在所有处理器真正匹配时: 一次迭代 p 个字符,直到比较了 L 个字符 如果所有 L 比较返回 true: 返回 i(模式的位置) 别的: 我++【问题讨论】:
-
您提出的算法的问题在于处理器之间的通信开销过多。除非模式非常长,否则最好让每个处理器在特定点查找匹配,并在最早的匹配处终止。
-
是否指定了 PRAM 型号?或者你可以假设吗? L处理器的限制也是你强加的还是问题?
-
L 处理器限制是我指定的。我假设内存没有共享,因为这是使用 MPI 的借口。
标签: algorithm language-agnostic parallel-processing string-matching