如何才能生成一个唯一的随机数

2012-08-27 18:14:26 +08:00
 macdino
正在做一个优惠券相关的系统:
要求:生成的优惠券验证码为6位,并且唯一。
因为系统中有N个优惠券同时提供,所以这个6位不好生成唯一。
大家有什么好的想法或算法。
系统的服务并发不大,预计每天请求20W次左右。
12103 次点击
所在节点    问与答
41 条回复
soulhacker
2012-08-29 11:18:38 +08:00
@macdino 另外关于乱序算法,准确的说叫“生成一个有限集合的随机序列”的算法,经典的是 Knuth / Fisher–Yates Shuffle,复杂度是 O(n),具体请 Google。

如果对效率要求不高,有更简单的的算法,就是先给每个码一个 0 到 1 之间的随机实数,然后按照这个数排序,大致复杂度 O(nlogn)。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/46204

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX