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

随机算法

时间:2018-09-26 01:15:12      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:img   http   ack   https   蓄水池问题   turn   des   and   alt   

Fisher–Yates shuffle 洗牌算法



海量数据随机抽样问题(蓄水池问题)

题目

技术分享图片
class Solution {
private:
    vector<int> vc;
public:
    Solution(vector<int> nums) {
        vc = nums;
    }
    
    int pick(int target) {
        vector<int> tmp;
        int size = 0;
        for (int i = 0; i < vc.size(); ++i) {
            if (target == vc[i]) {
                if (tmp.size() != 0) {
                    int lim = 66666666 - 66666666 % i;
                    int id = rand();
                    while (id > lim) id = rand();
                    id %= ++size;
                    if (id == 0) tmp[id] = i;
                } else {
                    ++size;
                    tmp.push_back(i);
                }
            }
        }
        return tmp[0];
    }
};
View Code

 

随机算法

标签:img   http   ack   https   蓄水池问题   turn   des   and   alt   

原文地址:https://www.cnblogs.com/liuweimingcprogram/p/9704319.html

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