ホームページ > ウェブフロントエンド > jsチュートリアル > シャッフルに JavaScript の Array.sort() を使用するのは信頼できる方法ですか?

シャッフルに JavaScript の Array.sort() を使用するのは信頼できる方法ですか?

Patricia Arquette
リリース: 2024-11-29 18:30:14
オリジナル
408 人が閲覧しました

Is Using JavaScript's Array.sort() for Shuffling a Reliable Method?

シャッフルに JavaScript Array.sort() を使用する: 検討

この記事では、JavaScript を利用することの有効性と有効性を検討します。シャッフル用の Array.sort() メソッド。

問題

デバッグ セッション中に出現したコード スニペットにより、このアプローチの適切性について懸念が生じました。

function randOrd(){
  return (Math.round(Math.random())-0.5);
}
coords.sort(randOrd);
alert(coords);
ログイン後にコピー

結果は満足のいくものであるように見えましたが、不完全な点があったため懐疑論が残りました。 sort() メソッドで使用されるソート アルゴリズムの理論的サポート。さらに、異なる実装間でのシャッフルの均一性についての懸念も生じました。

質問への回答

シャッフルに sort() を使用するのは正しいですか?

ジョンが答えた理論上、sort() メソッドに依存することはお勧めできません。ソートアルゴリズムはさまざまであり、不均一な結果が生じる可能性があるため、シャッフルする場合に使用します。

代替シャッフル関数

sort() には欠点がありますが、効率的な実装は次のとおりです。順列の均等な分布を保証します:

function shuffle(array) {
    var tmp, current, top = array.length;

    if(top) while(--top) {
        current = Math.floor(Math.random() * (top + 1));
        tmp = array[current];
        array[current] = array[top];
        array[top] = tmp;
    }

    return array;
}
ログイン後にコピー

評価ランダム性

ランダム性を評価するには、シャッフル結果を注意深く測定します。分布を期待値と比較することで、結果の均一性を評価できます。

実際の使用法への影響

シャッフルに sort() を使用する場合は、次の点を考慮してください。

  • 実装で Mergesort が使用されていることを確認します。これにより、均等なマッピングが可能になります。
  • 他の実装では不均一なシャッフルが発生する可能性があることに注意してください。
  • パフォーマンス重視のアプリケーションの場合は、O( と比較して O(n) の複雑さのため、カスタムの Fisher-Yates アルゴリズムが推奨されます。 n log n) for sort().

以上がシャッフルに JavaScript の Array.sort() を使用するのは信頼できる方法ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート