私の大学のプロセスでは、ランダムシーケンシャル吸着と呼ばれるプロセスをシミュレートしています。私がしなければならないことの 1 つは、正方形 (重なり合うことはできません) をラティス上にランダムに配置し、残りのスペースがなくなるまで、このプロセスを数回繰り返して、平均の「ジャミング」カバレッジ % を見つけることです。
基本的に、整数の大きな配列に対して操作を実行しています。そのうちの 3 つの可能な値は、0、1、および 2 です。「0」でマークされたサイトは空で、「1」でマークされたサイトはいっぱいです。最初に、配列は次のように定義されます。
int i, j;
int n = 1000000000;
int array[n][n];
for(j = 0; j < n; j++)
{
for(i = 0; i < n; i++)
{
array[i][j] = 0;
}
}
正方形が「1」で表されるように、5*5 の正方形を配列にランダムに配置したいとします (オーバーラップできません)。これは、x 座標と y 座標をランダムに選択し、その点から始まる正方形の左上点で '1' の 5*5 正方形を作成することによって行われます。次に、広場に近いサイトを「2」とマークします。これらのサイトに正方形を配置すると、既存の正方形と重なってしまうため、これらは利用できないサイトを表しています。このプロセスは、アレイに正方形を配置する余地がなくなるまで続きます (基本的に、アレイに「0」がなくなる)。
とにかく、ポイントに。ビット単位の操作を使用して、このプロセスをできるだけ効率的にしたいと考えています。正方形の近くのサイトをマークする必要がなければ、これは簡単です。「2」でマークされたサイトを説明できるように、2ビットの数値を作成できるかどうか疑問に思っていました.
これが本当に複雑に聞こえる場合は申し訳ありませんが、これを行う理由を説明したかっただけです。