ホームページ >バックエンド開発 >C++ >「ランダム」で「Orderby」を使用すると、リストをシャッフルする効率的な方法ですか?

「ランダム」で「Orderby」を使用すると、リストをシャッフルする効率的な方法ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-31 18:51:10907ブラウズ

Is Using `OrderBy` with `Random` an Efficient Way to Shuffle a List?

リストをシャッフルするために

を使用する効率は何ですか? Random この記事では、リストをシャッフルするためにOrderByおよびメソッドを使用する効率について説明します。コードの例は次のとおりです

コード作業原則RandomOrderBy このコードは

クラスを使用して乱数を生成します。リスト内の各要素について、
<code class="language-csharp">var r = new Random();
var shuffled = ordered.OrderBy(x => r.Next());</code>
メソッドはlambda式

を使用して乱数を割り当てます。次に、これらの乱数に従ってリストをソートして、シャッフル効果を達成します。 このシャッフルアルゴリズムの効率は何ですか?

このコードはシャッフルの目的を達成することができますが、その効率には問題があります。このメソッドの最下層は、o(n log n)ソーティングアルゴリズムを使用します。これは、再シャッフルタスクには複雑すぎます。 Random orderedOrderBy x => r.Next()を考慮してください

より効果的なシャッフルアルゴリズムは、フィッシャーイエートシャッフルアルゴリズムです。便利さと明確さのために、Fisher-Yatesアルゴリズムを使用して

拡張方法を作成できます。 フィッシャー - イテレーションリストを介してシャッフルアルゴリズムを介して、ランダムに選択された要素と要素を交換してシャッフルを実現します。以下は、単純な拡張方法(無制限のチェック)です。

フィッシャー - イェートアルゴリズムを使用すると、シャッフル機能を維持しながら、OrderByによってもたらされる計算オーバーヘッドを回避できます。

以上が「ランダム」で「Orderby」を使用すると、リストをシャッフルする効率的な方法ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。