2012-03-08 7 views
0

バイナリツリー: たとえば、Treeデータ構造をパラレルに処理する必要がある場合。我々は、左のノードを処理するために1つのスレッドを生成し、右のノードを処理するために別のスレッドを生成することができる。現在、両方とも、同じデータ構造で独立して実行できます。どのような種類のデータ構造で並列処理が可能になるか

リンクリストには同じ種類の並列処理を使用することはできません。

私は、他のデータ構造があれば、バイナリツリーに似た並列性を実現する柔軟性があると考えていますか?

+0

リンクされたリストの途中まで移動して、2つのスレッドを作成してそれらの要素を並列に処理するのはどうですか?あなたの「処理」が十分に複雑であれば、勝利かもしれません。 – dasblinkenlight

+0

リンクされたリストを断片化するだけです。並列性の観点からの些細な懸念。あなたが処理している間に何か他のものがあなたのツリーに書いていたら、それは便利な分かれていたという事実は左右に役立っていないのですか? –

+0

"処理"の意味に依存します:バイナリツリーの分割と征服の性質のために、バイナリツリー(探索、挿入、削除...リバランスを無視する)上で最も一般的な操作は意味をえなくして並列化できません。 –

答えて

2

どのようなタイプの並列処理ですか?いつも並行して読むことができますが、書き込みはより複雑です。変更されているのはノードに格納されているデータだけの場合、リスト全体ではなく個々のノードごとにロックを作成してLinkedListまたはArrayを並列化できない理由はありません。しかし、構造の接続が影響を受けている場合は、さらに心配することがあります。

答えは、何をしようとしているか、ロック、条件などを設定する方法に依存しますが、本質的に並列化可能でないか、または並行して高速化できるものはありません。

+0

私は、この回答の12分の1では、できないことを意味すると思いますか? –

+0

あなたは正しいです。一定 – twain249

0

あなたが並列処理について話すと、2つのことが私の心に浮かびます。1)タスクの並列性2)データ並列性。私はここで2番目について話します。

ツリー:グラフのスーパーセットを確認してください。 Crowd/Collective IntelligenceのWisdomに基づく多くの巨大なデータ問題をグラフとしてモデル化することができます。 Map Reduceフレームワークを使用したグラフの並列処理は、あなたが面白くなるでしょう。

関連する問題