率直に言って、これは宿題です。そうは言っても、それは非常にオープンエンドであり、この問題(または一般的な並列アルゴリズム)について考え始める方法についてのガイダンスはほとんどありません。完全な解決策ではなく、正しい方向へのポインタが欲しいのですが。役立つかもしれないどんな読書も同様に素晴らしいでしょう。
私は、並列アルゴリズムを使用して、大量のテキストで最初に出現するパターンを一致させる効率的な方法に取り組んでいます。パターンは単純な文字マッチングであり、正規表現は含まれていません。私はなんとかすべての一致を見つけるための可能な方法を思いついたが、それは私がすべての一致を調べて最初のものを見つけることを必要とする。
だから問題は、プロセス間でテキストを分割し、そのようにスキャンすることにもっと成功するでしょうか?または、j番目のプロセスがパターンのj番目の文字を検索する、ある種のプロセス同期検索を行うのが最善でしょうか?その後、すべてのプロセスが一致に対してtrueを返す場合、プロセスは上記のパターンに一致する位置を変更して再び上に移動し、すべての文字が一致するまで続行してから、最初の一致のインデックスを返します。
私がこれまでに持っているものは非常に基本的なものであり、おそらく機能しません。私はこれを実装しませんが、どんなポインタでもいただければ幸いです。
pプロセッサ、長さtのテキスト、長さLのパターン、および使用されるLプロセッサの上限の場合:
i = 0からtlの場合: j = 0からpの場合: プロセッサjは、text [i+j]をpattern[i+j]と比較します 誤一致の場合: すべてのプロセッサが現在の比較を終了します、i ++ すべてのプロセッサによる真の一致: L文字が比較されるまで、一度にp文字を繰り返します すべてのL比較がtrueを返す場合: return i(パターンの位置) そうしないと: i ++