在做五子棋 AI 的时候,遇到要根据权重从一组数里边随机选出一个这个问题。这个问题恰好也是 leetcode 第 528 道题,使用 C++,标准库就有现成的:

#include <random>

int random_pick(double const* w, int k) {
std::random_device rd;
return std::discrete_distribution<int>{w, w+k}(rd);
}

若要自己实现,大致如下:

#include <numeric>
#include <random>
#include <algorithm> int random_pick(double const* w, int k) {
double *sum = (double*)alloca(k*sizeof(double)); //stack allocation
std::partial_sum(w, w+k, sum);
std::random_device rd;
std::uniform_real_distribution<double> rnd(0, sum[k-1]);
return std::upper_bound(sum, sum+k, rnd(rd)) - sum;
}

C++ 加权随机抽样的更多相关文章

  1. Python | random 模块:Python 中如何生成随机数和随机抽样?

    random 是平时开发过程中常用的一个模块,该模块实现了各种分布的伪随机数生成器,以及和随机数相关的各种实用函数.基本函数 random() 在区间 [0.0, 1.0) 内均匀生成随机浮点数,是模 ...

  2. T1加权像(T1 weighted image,T1WI)

    T1加权成像(T1-weighted imaging,T1WI)是指这种成像方法重点突出组织纵向弛豫差别,而尽量减少组织其他特性如横向弛豫等对图像的影响. 弛豫:物理用语,从某一个状态恢复到平衡态的过 ...

  3. 局部加权回归、欠拟合、过拟合(Locally Weighted Linear Regression、Underfitting、Overfitting)

    欠拟合.过拟合 如下图中三个拟合模型.第一个是一个线性模型,对训练数据拟合不够好,损失函数取值较大.如图中第二个模型,如果我们在线性模型上加一个新特征项,拟合结果就会好一些.图中第三个是一个包含5阶多 ...

  4. C# (灰度)加权平均法将图片转换为灰度图

    private Bitmap ToG(string file) { using (Bitmap o = new Bitmap(file)) { Bitmap g = new Bitmap(o.Widt ...

  5. IRLS(迭代加权最小二乘)

    IRLS用于解决这种目标函数的优化问题(实际上是用2范数来近似替代p范数,特殊的如1范数). 可将其等价变形为加权的线性最小二乘问题: 其中W(t)可看成对角矩阵,每步的w可用下面的序列代替 如果 p ...

  6. SPSS数据分析—加权最小二乘法

    标准的线性回归模型的假设之一是因变量方差齐性,即因变量或残差的方差不随自身预测值或其他自变量的值变化而变化.但是有时候,这种情况会被违反,称为异方差性,比如因变量为储蓄额,自变量为家庭收入,显然高收入 ...

  7. TF-IDF 加权及其应用

    TF-IDF 加权及其应用 TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索的常用加权技术.TF-IDF是一种统计方法,用以评估某个 ...

  8. Stanford大学机器学习公开课(三):局部加权回归、最小二乘的概率解释、逻辑回归、感知器算法

    (一)局部加权回归 通常情况下的线性拟合不能很好地预测所有的值,因为它容易导致欠拟合(under fitting).如下图的左图.而多项式拟合能拟合所有数据,但是在预测新样本的时候又会变得很糟糕,因为 ...

  9. 关于加权的LIS问题

    蒟蒻Zigzag正在准备联赛...... 这个算是这几天做的唯一一个值得写一写的题吧.首先LIS的N^2暴力dp应该都会写,就是F[i]=Max{F[j]}+1 那么加权的就吧后面的1换成数的权值就行 ...

  10. 随机抽样一致性算法(RANSAC)示例及源代码

    作者:王先荣 大约在两年前翻译了<随机抽样一致性算法RANSAC>,在文章的最后承诺写该算法的C#示例程序.可惜光阴似箭,转眼许久才写出来,实在抱歉.本文将使用随机抽样一致性算法来来检测直 ...

随机推荐

  1. oracle利用job实现存储过程异步执行

    1.背景 在实际开发中,我们可能会利用存储过程批量处理业务, 对应有些存储过程可能会执行很长时间,这时我们需要客户端点操作后,存储过程异步执行 具体实现如下 1.创建处理业务的存储过程:sp_test ...

  2. Fedora安装后需要做的事情

    http://blog.csdn.net/fengxinlinux/article/details/72794967

  3. 使用SiliconCloud尝试GraphRag——以《三国演义》为例(手把手教程,适合小白)

    使用OpenAI模型体验GraphRag--以<边城>为例 在使用SiliconCloud之前,先使用OpenAI的模型看看GraphRag的效果. GraphRAG是一种基于AI的内容理 ...

  4. CH06_函数

    CH06_函数 概述 作用:将一段可复用的代码封装起来,减少代码重复. 一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能. 函数的定义 函数的定义一般主要有5个步骤: 返回值类型 函数名 ...

  5. TCP/TP协议栈(逐渐更新版)

    TCP/IP协议栈 应用层 DNS协议 传输层 TCP协议 TCP协议报文结构 源端口 目的端口 序列号 确认号 头长度header length or data offset 保留字段reserve ...

  6. luoguP3330 [ZJOI2011] 看电影--组合数学--高精度

    \(luoguP3330\) [ZJOI2011] 看电影 废了老命想题解 $$luogu$$ $$HZOI$$ 题意 到了难得的假期,小白班上组织大家去看电影.但由于假期里看电影的人太多,很难做到让 ...

  7. 为什么说 Swoole 是 PHP 程序员技术水平的分水岭?

    大家好,我是码农先森. 谈到这个话题有些朋友心中不免会有疑惑,为什么是 Swoole 而不是其他呢?因为 Swoole 是基于 C/C++ 语言开发的高性能异步通信扩展,覆盖的特性足够的多,有利于 P ...

  8. B 端产品未来几年的发展趋势

    在当今数字化高速发展的时代,B 端产品经理作为企业数字化转型的关键推动者,肩负着重大的责任.不仅要深入了解企业的业务需求,还要紧跟技术发展的步伐,为企业提供高效.创新的解决方案.那么,未来几年,B 端 ...

  9. Gluon 编译 JavaFx -> exe

    Gluon 编译 JavaFx -> exe 能力强的伙伴可以直接参考官方文档 开发工具 idea 2023.3 idea gluon plugin git apache-maven-3.8.4 ...

  10. Angular 18+ 高级教程 – Coding Style Guide 编码风格

    前言 Angular 从 v14 开始大改特改,改最多的就是编码风格. 以前是 class first,Decorator first,mutable first. 现在变成了 function fi ...