zoukankan      html  css  js  c++  java
  • Shuffle an Array (水塘抽样)

    随机性问题

    水塘抽样算法可保证每个样本被抽到的概率相等

    使用场景:从包含n个项目的集合S中选取k个样本,其中n为一很大或未知的数量,尤其适用于不能把所有n个项目都存放到主内存的情况

    Knuth洗牌算法

    拿起第i张牌时,只从它前面的牌随机选出j,或从它后面的牌随机选出j交换即可

     1 class Solution {
     2 public:
     3     Solution(vector<int>& nums) {
     4         v = nums;
     5     }
     6     
     7     /** Resets the array to its original configuration and return it. */
     8     vector<int> reset() {
     9         return v;
    10     }
    11     
    12     /** Returns a random shuffling of the array. */
    13     vector<int> shuffle() {
    14         vector<int> res = v;
    15         for (int i = 0; i < res.size(); ++i) {
    16             int t = i + rand() % (res.size() - i);
    17             swap(res[i], res[t]);
    18         }
    19         return res;
    20     }
    21     vector<int> v;
    22 };
    23 
    24 /**
    25  * Your Solution object will be instantiated and called as such:
    26  * Solution* obj = new Solution(nums);
    27  * vector<int> param_1 = obj->reset();
    28  * vector<int> param_2 = obj->shuffle();
    29  */
  • 相关阅读:
    关于浏览器及系统的判断
    toggle与slideToggle
    安卓与ios的不同处理
    关于常用循环遍历获取数据
    docker
    Mysql
    rabbitMQ的使用转载
    Git命令行
    vue项目创建完整版
    redis操作(str.hash.list.set)
  • 原文地址:https://www.cnblogs.com/demian/p/11240184.html
Copyright © 2011-2022 走看看