配列項目のランダム選択の効率を高める方法
繰り返しを避けながら配列項目をランダムに選択する場合、効率が重要な役割を果たします。提供されたコードは同じ項目を連続して複数回選択することを効果的に防止しますが、パフォーマンスが向上する可能性があります。
再帰の問題に関しては、提供された関数はそれ自体を呼び出さないため、技術的には再帰的とみなされません。直接ではなく、別の関数 (chooseName()) を通じてそれ自体を呼び出します。ただし、反復的な性質においては再帰関数との類似点があります。
効率を向上させるために、再帰的な動作を排除し、一意の項目の検索にかかる時間を大幅に短縮する代替アプローチを採用できます。この戦略には、配列内のすべての項目がなくなるまで項目をランダムに選択する新しい関数の作成が含まれます。すべての項目が使用されると、関数は最初からやり直して、項目が繰り返されないようにします。
次のコードは、このアプローチを実装しています。
<code class="javascript">function randomNoRepeats(array) { var copy = array.slice(0); return function() { if (copy.length < 1) { copy = array.slice(0); } var index = Math.floor(Math.random() * copy.length); var item = copy[index]; copy.splice(index, 1); return item; }; } var chooser = randomNoRepeats(['Foo', 'Bar', 'Gah']); chooser(); // => "Bar" chooser(); // => "Foo" chooser(); // => "Gah" chooser(); // => "Foo" -- only repeats once all items are exhausted.</code>
この変更されたアプローチを使用すると、再帰的な実装のように長いループ反復が発生する可能性がなく、効率的な項目選択を維持しながら繰り返しを効果的に回避できます。
以上が繰り返しを行わずに配列項目のランダム選択を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。