私は 2D 水圧データを持っています。これは、グリッド内の各ポイントの深度と速度の情報を含むマルチギガバイトのテキスト ファイルで、タイム ステップに分割されています。各タイムステップには、グリッド内のすべてのポイントの深さ/速度の値が含まれています。したがって、タイムステップごとに 1 つのポイントを追跡し、その深さ/速度がどのように変化するかを確認できます。このデータを一度に 1 つのタイムステップで読み込み、グリッド セルが達成する最大深度、最大速度、水深が 2 フィートを超える最初のタイムステップの数など、さまざまなことを計算します。それぞれの結果これらの計算はグリッドになります - 各ポイントでの最大深度など。
これまでのところ、これは Decorator パターンのように思えます。ただし、さまざまな計算から結果を取得する方法がわかりません。計算ごとに異なるグリッドが生成されます。結果を抽出するために、作成後に各デコレーターへの参照を保持するかgetResults()
、さまざまな結果のマップを返すメソッドを追加する必要がありますが、どちらも理想的ではありません。
別のオプションは、戦略パターンです。各計算は、時間ステップ (現在の深度/速度) と前のラウンドの結果 (これまでの最大深度、これまでの最大速度など) で動作する異なるアルゴリズムです。ただし、これらの以前の結果は計算ごとに異なります。つまり、アルゴリズム クラスがステートフルになるか、以前の結果を追跡してフィードすることが呼び出し元の仕事になります。また、ストラテジー パターンも嫌いです。 timesteps は呼び出し元の責任になります。「計算機」に timesteps のイテレータを与えて (必要に応じてディスクからフェッチして)、必要な結果を生成させたいと思います。
追加の制約:
- 入力が大きく、ディスクから読み取られているため、時間ステップごとに 1 回だけ反復することが唯一の実用的な方法です
- グリッドは大きいため、計算は可能な限りその場で行う必要があります