码迷,mamicode.com
首页 > 编程语言 > 详细

随机算法之30万员工抽取10万员工(洗牌算法)

时间:2015-09-24 19:31:19      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:洗牌算法   随机算法   


算法方面不是我的强项,所以遇到这个问题,记录一下解决方法;


最开始的时候,做法是从random中来随机选取一个,然后再判断已有列表中是否存在,

然后以此重复,看到这里,会算法的同学肯定会说这明显不行;就好比多少人中生日为一天的概率大于50%;


所以然后查找了一些资料,看到了洗牌算法;包括多种变种吧。


这里说一下我参考的解决办法;


比如有30万个元素的列表,那么第一次随机选择一个;记录位置是x;

然后把元素的最后一个位置元素存入位置x,然后把最后位置的元素删除;

(这里在交换的时候,需要判断这个元素原本是不是最后一个元素);

然后再在剩下的元素中随机选择一个,这样就不会重复了;

交换最后一个元素,可以减少列表整体偏移带来的性能影响;


大家可以试试;

随机算法之30万员工抽取10万员工(洗牌算法)

标签:洗牌算法   随机算法   

原文地址:http://qings.blog.51cto.com/4857138/1697893

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!