2017-08-31 65 views
0
  1. 用戶首先填寫一些文本字段,例如:姓名,電子郵件,電話。
  2. 然後他顯示了15項(1,2,3,... 15)。
  3. 因爲我們不希望數字1始終處於開始位置,所以我們在顯示順序上添加了一些變化。
  4. 此用戶(或本次會話)的顯示順序將稍後重複使用。
  5. 由於4),我們可能要麼
    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生成隨機排列。