ホームページ >バックエンド開発 >C++ >C# で整数リストのシャッフルを最適化するにはどうすればよいですか?

C# で整数リストのシャッフルを最適化するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-21 13:56:09861ブラウズ

How Can I Optimize Integer List Shuffling in C#?

C# での効率的な整数リスト シャッフル

C# で整数リストを最適にシャッフル (ランダム化) するには、処理時間を最小限に抑える高効率のアルゴリズムが不可欠です。 Fisher-Yates シャッフル アルゴリズムは線形時間ソリューションを提供し、シャッフルされていない要素を繰り返し検索する方法よりも大幅に優れたパフォーマンスを発揮します。 これらの効率の悪いメソッドは、リストのサイズが大きくなるにつれて徐々に遅くなります。

非効率的なシャッフル手法に伴う一般的な問題は、特に奇数の要素を含むリストの場合に無限ループが発生する可能性があることです。

フィッシャー・イェーツのシャッフル アルゴリズム

フィッシャー・イェーツのシャッフルは、リストのシャッフルされていない部分からランダムな要素を繰り返し選択し、それをすでにシャッフルされたセクションの要素と交換します。 これにより、すべての要素が最終的にシャッフルされたリスト内の任意の位置に同じ確率で出現することが保証されます。

フィッシャー・イェーツ シャッフルの C# 実装は次のとおりです。

<code class="language-csharp">private static void FisherYatesShuffle(int[] values)
{
    Random random = new Random();

    for (int i = values.Length - 1; i > 0; i--)
    {
        int swapIndex = random.Next(i + 1);
        int temp = values[i];
        values[i] = values[swapIndex];
        values[swapIndex] = temp;
    }
}</code>

この洗練された実装には、いくつかの利点があります。

  • 線形時間計算量 (O(n)): リストの単一パスのみを実行し、リストのサイズに関係なく一定の時間効率を維持します。
  • すべてのリスト サイズを処理します: 任意の長さのリストを正しくシャッフルし、無限ループのリスクを排除します。

これにより、フィッシャー・イェーツ シャッフルは、C# での効率的な整数リスト シャッフルに推奨される方法になります。

以上がC# で整数リストのシャッフルを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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