2017-08-31 18 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生成随机排列。