0

1 から 9 までの範囲の乱数を使用してリソースを割り当てる必要があります。まず、1 から 9 までの乱数を取得する関数を実行します。次に、ランダムに等しいインデックスでリソースが割り当てられているかどうかを確認します。生成された数。リソースが割り当てられていない場合は割り当て、それ以外の場合は別の乱数の計算に戻ります。正常に動作しますが、ある時点を過ぎると効率が低下します。9 つのうち 5 つまたは 6 つのリソースが割り当てられた時点に到達すると、残りの割り当てを取得するまで長い間待たなければなりません。これを最適化するにはどうすればよいですか?

アルゴリズムは次のとおりです。

  1. リソースを取得します。
  2. 乱数を生成します。
  3. インデックスが乱数に等しい位置にリソースが割り当てられていない場合は、手順 4 に進みます。そうでない場合は、手順 5 に進みます。
  4. インデックスが乱数に等しい位置にリソースを割り当てます。
  5. ステップ 2 に進みます。
4

1 に答える 1

3

ループ内で乱数を生成する代わりに、次のようなインデックスとシャッフルを含む配列を事前に割り当てます。

indices = [0, 1, 2, ..., n)
shuffle(indices)
for i := 0; i < n; i++ {
    allocate(resource[i], indices[i])
}
于 2013-03-11T10:46:51.377 に答える