3

ドキュメントには、「すべての順列はほぼ同じ確率で発生する」と書かれています。しかし、それが同じ注文を返す可能性が含まれているかどうかはわかりません。私は、2 回のテスト実行中にリストが元の順序で返されたメソッド (以下を参照) を持っています。おそらく..アナグラムが選択され、結果が単語であったなど、他の要因が間違っていた可能性があります。レキシコンは約 300,000 語なので、このようなことがないように、より適切なテストに方法を変更しました。メソッド:

private static char[] nextScrambledWord(int wordLength) {

    String word;
    do {
        word = "ABCDEF"; //TODO Get a word from lexicon
    } while(word.length() != wordLength);

    ArrayList<Character> temp = new ArrayList<Character>(wordLength);
    for(int i = 0; i < wordLength; i++) {
        temp.add(word.charAt(i));
    }

    Collections.shuffle(temp);

    char[] result = new char[wordLength];
    for(int i = 0; i < wordLength; i++) {
        result[i] = temp.get(i);
    }
    return result;
}

その方法自体にも興味があります。これを改善する方法について提案がある場合は、お気軽に共有してください。基本的に、このメソッドはセットから wordLength の単語を取り出し、シャッフルされた結果の char 配列を返します。既知の長さの単語をポーリングするのではなく、単語の長さに基づいてレキシコンを複数のセットに分割することを検討しました。

4

1 に答える 1

11

はい、元の順序が保持される可能性はありますが、あなたが言うように、長いリストではそうはなりません。要素が 2 つだけのリストを試して、これが起こることを確認してください。

于 2012-09-05T01:41:43.793 に答える