之前提到过帮朋友做个东西 http://www.v2ex.com/t/269177 ,虽然我拒绝了,但是他有个随机生成算法问题问我。
朋友希望号码随机范围是抽奖人数(总人数是 1w ,抽奖号码就是 1-10000 )。//想吐槽一下,网易的号码不都是一样长短的么
然后涉及到随机号码分配的问题。//也想吐槽下,既然最后抽奖算法是随机的,号码随机不随机感觉没有必要
他希望用户申请抽奖时,分配的号码是随机的,下个用户申请时,从剩余号码中再随机抽取一个。算法类似 http://www.cnblogs.com/eaglet/archive/2011/01/17/1937083.html
我感觉这种算法有问题:如果将未分配的号码缓存起来,在活动比较多的时候会比较消耗内存;如果存数据库里,每次都要从数据库中读取未使用的数组,然后再随机取一个或多个,然后再更新数据库,步骤比较繁琐。
我的建议:创建时,直接初始化随机排序的号码到数据库中,每次分配号码,按照顺序从表中读取指定数量未分配的号码即可。
大家有没有好的建议?!
朋友希望号码随机范围是抽奖人数(总人数是 1w ,抽奖号码就是 1-10000 )。//想吐槽一下,网易的号码不都是一样长短的么
然后涉及到随机号码分配的问题。//也想吐槽下,既然最后抽奖算法是随机的,号码随机不随机感觉没有必要
他希望用户申请抽奖时,分配的号码是随机的,下个用户申请时,从剩余号码中再随机抽取一个。算法类似 http://www.cnblogs.com/eaglet/archive/2011/01/17/1937083.html
我感觉这种算法有问题:如果将未分配的号码缓存起来,在活动比较多的时候会比较消耗内存;如果存数据库里,每次都要从数据库中读取未使用的数组,然后再随机取一个或多个,然后再更新数据库,步骤比较繁琐。
我的建议:创建时,直接初始化随机排序的号码到数据库中,每次分配号码,按照顺序从表中读取指定数量未分配的号码即可。
大家有没有好的建议?!