首页 > 编程语言 >【LBLD】带权重的随机选择算法

【LBLD】带权重的随机选择算法

时间:2023-04-16 11:12:51浏览次数:33  
标签:int Solution randNum 算法 vector 随机 LBLD preSum

带权重的随机选择算法

528. 按权重随机选择

不使用二分法:

class Solution {
private:
    vector<int> preSum;
    int N = 0;
public:
    Solution(vector<int>& w) {
        srand(time(0));
        preSum.push_back(0);
        for (int i = 1; i <= w.size(); i++) {
            preSum.push_back(preSum[i-1] + w[i-1]);
        }
        N = preSum[w.size()];
    }
    
    int pickIndex() {
        int randNum = (rand() % N) + 1;
        
        for (int i = 1; i < preSum.size(); i++) {
            if (randNum > preSum[i-1] && randNum <= preSum[i]) {
                return i-1;
            }
        }
        return -1;
    }
};

使用二分法:

class Solution {
private:
    vector<int> preSum;
    int N = 0;
public:
    Solution(vector<int>& w) {
        preSum.push_back(0);
        for (int i = 1; i <= w.size(); i++) {
            preSum.push_back(preSum[i-1] + w[i-1]);
        }
        N = preSum[w.size()];
    }
    
    int pickIndex() {
        // srand(time(0));
        int randNum = (rand() % N) + 1;
        cout << "randNum:" << randNum << endl;

        int left = 0, right = preSum.size();

        while (left < right) {
            int mid = left + (right - left) / 2;
            if (randNum > preSum[mid-1] && randNum <= preSum[mid]) {
                return mid - 1;
            }
            else if (preSum[mid] < randNum) {
                left = mid + 1;
            }
            else if (preSum[mid] > randNum) {
                right = mid;
            }
        }
        
        return left;
    }
};

标签:int,Solution,randNum,算法,vector,随机,LBLD,preSum
From: https://www.cnblogs.com/yangxuanzhi/p/17322687.html

相关文章

  • Java中常用排序算法及示例-冒泡排序、希尔排序、选择排序、插入排序、合并排序、基数
    场景Java中需要对数据进行排序处理,常用的排序算法以及示例进行归纳整理。注:实现1、冒泡排序冒泡排序法又称为交换排序法,原理是从第一个元素开始,比较相邻元素的大小,若大小顺序有误,则对调后再进行下一个元素的比较。如此扫描一次之后就可以确保最后一个元素位于正确的顺序,接着逐步进......
  • Java中常用算法及示例-分治、迭代、递归、递推、动态规划、回溯、穷举、贪心
    场景1、分治算法的基本思想是将一个计算复杂的问题分成规模较小、计算简单的小问题求解,然后综合各个小问题,得到最终答案。2、穷举(又称枚举)算法的基本思想是从所有可能的情况中搜索正确的答案。3、迭代法(IterativeMethod)无法使用公式一次求解,而需要使用重复结构(即循环)重复执......
  • 算法-回文链表-24
    /***Definitionforsingly-linkedlist.*publicclassListNode{*publicintval;*publicListNodenext;*publicListNode(intx){val=x;}*}*/publicclassSolution{publicListNodeReverseList(ListNodehead){i......
  • 期望最大化算法(EM)简介
    ExpectationMaximization,EM算法是带有隐变量的概率模型参数的极大似然估计(MLE为给定参数,观测数据出现/生成的可能性)。如下为《统计机器学习》中对应EM算法的笔记。观测数据Y和隐变量X合称,完全数据观测数据Y称,不完全数据E步:(期望步)求Q函数(上一轮参数固定,模型参数为变量的......
  • 加密算法
    #include<stdio.h>#include<stdlib.h>#include<stdint.h>#include<string.h>#include<openssl/rsa.h>#include<openssl/err.h>#include<openssl/objects.h>#pragmacomment(lib,"libssl.lib")#pragmac......
  • 二叉树遍历算法分析
    二叉树遍历算法分析前/中/后序遍历算法可以发现这三种遍历算法只有一行代码,也就是输出结点数据域的位置不同前序遍历是先输出数据域再递归到左孩子和右孩子中序遍历是先递归到左孩子等返回的时候输出数据域再递归到右孩子后序遍历是指先递归到左孩子,然后递归到右孩子,最后......
  • COMS3200 算法解答
    COMS3200Assignment12023S1100totalmarks,25%overallcoursemarkDue:15:0019April20231Preface1.1NotesThisdocumentissubjecttochangeforthepurposesofclarification.Changesmadesincetheoriginalreleasewillbehighlightedinred.Please......
  • 归并排序算法
    一、归并排序分治思想。  求解一个比较复杂的问题时我们通常都会把复杂的问题分解为几个简单的步骤逐一解决后对所形成的解进行处理得到最终解。分治排序算法就是利用这个思想。把一个给定数组进行拆分成最小的有顺序的单元,然后对最小单元进行排序组合成新数组的过程。二、归......
  • 为何vs编译边出来的程序ebp-4存放的不是第一个局部变量?而是security_cookie——本质上
    快速识别 最后那个call就是比较存的随机数和ebp异或的值是否和之前是否一样:    探究security_cookie在程序中的作用 from:https://www.kn0sky.com/?p=66学习环境:Windows1020H2+VisualStudio2019前言在学习看反汇编程序的时候,使用VS2019编译的releas......
  • 集成电路IC(4Gbit)IS46TR16256BL-125KBLA1动态随机存取存储器
    IS46TR16256BL-125KBLA14GBitDDR3SDRAM提供紧凑型BGA-96封装的高速SDRAM。IS46TR16256BL具有256Mx16结构,电源电压为1.45V或1.3V,最大时钟频率为800MHz。该SDRAM具有8个内部银行并发操作和8nBit预取架构。IS46TR16256BL是电信和网络、汽车和工业嵌入式计算的理想选择。应用汽车;......