2017-08-31 5 views
0
  1. ユーザーは最初に、名前、電子メール、電話などのテキストフィールドを入力します。
  2. それから彼は15の項目(1,2,3、... 15)が表示されます。
  3. 数字の1を常に先頭にしたくないため、表示順序にある​​程度の差異を追加します。
  4. このユーザー(またはこのセッション)の表示順序は、後で再利用されます。そのため4の
  5. )、我々は
    a)は、それをキャッシュし、一度の順序をランダム化、または
    b)は、このユーザーのいくつかの情報(またはこのセッション)から順に計算することができるのいずれか。
  6. b)の場合、テキストフィールドの入力からハッシュを生成することを考えています。
    ハッシュを表示順に変換します。
  7. 変換は均等に分配する必要はありません。すなわち、
    それぞれの15の発生確率! (= 1.3e + 12)の順列は等しくなる必要はない。

M =アイテムの数
P(1)= {1,2,3、...、M}
P(2)= {2,1,3、... 、M}
P(m)は、いくつかの順列ハッシュから順列へ

H =ハッシュ(名前、電子メール、電話)、またはハッシュ(セッションID)=、いくつかのテキストからわずかハッシュ
N(H)は整数を=範囲[1、M]

次に、私たちが望む次数= P(N(h))

質問:この変換にはどのような方法が良いですか?

+1

なぜ入力を使って擬似乱数ジェネレータをシードし、ランダムコールからの出力を使って順列を生成しますか? – TheGreatContini

+0

N番目の置換を計算することは、例えば、https://stackoverflow.com/q/7918806/555045 – harold

答えて

1

@TheGreatContiniが示唆しているように、ハッシュ値を使用して乱数ジェネレータをシードし、Fisher–Yates shuffleと一緒に使用してランダムな並べ替えを生成します。

関連する問題