Looking for random Answers? Try Ask4KnowledgeBase
Looking for random Keywords? Try Ask4Keywords

randomランダムを始めよう


備考

このセクションでは、ランダムとは何か、そしてなぜそれを使用したいのかを概説します。

ランダムな範囲内にある大きなテーマについても言及し、関連するトピックにリンクする必要があります。ランダム化のためのドキュメンテーションは新しいので、それらの関連トピックの初期バージョンを作成する必要があります。

フィッシャー=イェーツシャッフル

KnuthシャッフルとDurstenfeld-Fisher-Yatesシャッフルとしても知られています。このシャッフルはn 要素の配列を取り、それをシャッフルします。アルゴリズムは本当にランダムであり、シャッフルの後、配列の各順列は等しくなる可能性がある。

Javaの場合:

public static void shuffle(E[] deck) {

    //From the end, swap each card with a random card from the unswapped portion.
    for(int i = deck.length - 1; i > 0; i--)
    {
        //Pick an element from [0,i], inclusive.
        int chosenCard = (int) (Math.random() * (i + 1));

        E temp = deck[i];
        deck[i] = deck[chosenCard];
        deck[chosenCard] = temp;
    }
}
 

注意:置換要素は[0、i]から来る必要があり、[0、i)排他ではありません。それ以外の場合、要素が所定の位置に残っている配列の置換は不可能です。

乱数が生成するためにO(1)を取ると仮定すると、アルゴリズムは定位置で動作し、O(n)時間と空間を要する。この方法でシャッフルされた配列は、要素ごとに償却されたO(1)の非繰り返し要素を取得するために使用できます。

E[] deck;
int drawIndex;

//Elements are taken from an index that advances.
public E drawUniqueCard()
{
    //Once all cards have been drawn, reshuffle the deck and draw from the top.
    if(drawIndex == deck.length)
    {
        shuffle(deck);
        drawIndex = 0;
    }
    //Pull the next card off the deck.
    return deck[drawIndex++];
}
 

インストールまたはセットアップ

ランダムなセットアップやインストールに関する詳しい手順。