リストをシャッフルするために
とを使用する効率は何ですか? Random
この記事では、リストをシャッフルするためにOrderBy
およびメソッドを使用する効率について説明します。コードの例は次のとおりです
コード作業原則Random
OrderBy
このコードは
<code class="language-csharp">var r = new Random(); var shuffled = ordered.OrderBy(x => r.Next());</code>メソッドはlambda式
を使用して乱数を割り当てます。次に、これらの乱数に従ってリストをソートして、シャッフル効果を達成します。 このシャッフルアルゴリズムの効率は何ですか?
このコードはシャッフルの目的を達成することができますが、その効率には問題があります。このメソッドの最下層は、o(n log n)ソーティングアルゴリズムを使用します。これは、再シャッフルタスクには複雑すぎます。 Random
ordered
OrderBy
x => r.Next()
を考慮してください
拡張方法を作成できます。 フィッシャー - イテレーションリストを介してシャッフルアルゴリズムを介して、ランダムに選択された要素と要素を交換してシャッフルを実現します。以下は、単純な拡張方法(無制限のチェック)です。
フィッシャー - イェートアルゴリズムを使用すると、シャッフル機能を維持しながら、OrderBy
によってもたらされる計算オーバーヘッドを回避できます。
以上が「ランダム」で「Orderby」を使用すると、リストをシャッフルする効率的な方法ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。