随机算法

加权随机算法 //待随机类 class Temp{ //名字 String name; //权重 double wight; public Temp(String name,double wight){ this.name=name; this.wight=wight; } public double get() { ... 阅读详情

1. 要求从N个元素中随机的抽取1个元素。


2. 要求从N个元素中随机的抽取K个元素。

复制代码
int remain = N
int select = K
for (int i = 0; i < N; ++i){
   
if (rand()% remain < select){
      cout
<<i<<" ";
      
--select;
   }
   
--remain;
}
复制代码

 

第一个元素被选中的概率为 K/N

第二个元素被选中的概率为(K/N)*((K-1)/(N-1)) + ((N-K)/N) * (K/(N-1)) = K/N

.........

证明略(参看The Art of Computer Programming III)


3. 要求从N个元素中随机的抽取1个元素, 其中N无法确定(数据流)。

复制代码
int Num;
int i = 0;
int choose = 0;
while(scanf("%d", &Num)&& Num != 0){
   
if (((double)rand()/(double)RANDOM_MAX) < (1.0 / (double)++i))
      choose 
= Num;
}
cout 
<< choose <<endl;
复制代码


总是选择第一行, 二分之一几率选择第二行, 以此类推, K分之一机率选择第K行, 当while 执行完毕,假设N个数字,则每个数字被选择的机率均为1/N

第一行被选择的机率为:

1 * 1/2 * 2/3 * 3/4 *.... (N-1)/N = 1/N

第K行被选择的机率为:

1/K * K/(K+1) * .... (N-1)/N = 1/N


4. 要求从N个元素中随机的抽取K个元素, 其中N无法确定(数据流)。

reservoir sampling

//Init : a reservoir with the size: K
for(int i = K; i < N; ++i){
   
int M = rand() % i;
   
if( M < K)
      SWAP the Mth value and ith value
}


解决方案就是蓄水库抽样(reservoid sampling)。主要思想就是保持一个集合(这个集合中的每个数字出现),作为蓄水池,依次遍历所有数据的时候以一定概率替换这个蓄水池中的数字。

(1)初始情况。出现在水库中的k个元素的出现概率都是一致的,都是1。这个很显然。

(2)第一步。第一步就是指,处理第k+1个元素的情况。分两种情况:元素全部都没有被替换;其中某个元素被第k+1个元素替换掉。

我们先看情况2:第k+1个元素被选中的概率是k/(k+1)(根据公式k/i),所以这个新元素在水库中出现的概率就一定是k/(k+1)(不管它替换掉哪个元素,反正肯定它是以这个概率出现在水库中)。下面来看水库中剩余的元素出现的概率,也就是1-P(这个元素被替换掉的概率)。水库中任意一个元素被替换掉的概率是:(k/k+1)*(1/k)=1/(k+1),意即首先要第k+1个元素被选中,然后自己在集合的k个元素中被选中。那它出现的概率就是1-1/(k+1)=k/(k+1)。可以看出来,旧元素和新元素出现的概率是相等的。

情况1:当元素全部都没有替换掉的时候,每个元素的出现概率肯定是一样的,这很显然。但具体是多少呢?就是1-P(第k+1个元素被选中)=1-k/(k+1)=1/(k+1)。

(3)归纳法:重复上面的过程,只要证明第i步到第i+1步,所有元素出现的概率是相等的即可。参见:http://wansishuang.javaeye.com/blog/443902


5. Shuffle (Fisher–Yates shuffle)

复制代码
void shuffle(int cards[], int n){
    
while (n > 1){
        
// Swap a random unshuffled card with the top-most card
        int k = rand() % n--;
        swap(cards[n], cards[k]);
    }
}
复制代码
带隙基准电路设计实战:从HSPICE仿真到Virtuoso版图全流程解析 在模拟集成电路设计中,基准电压源是确保系统精度与稳定性的核心模块。其基本原理在于巧妙结合具有正、负温度系数的电压,通过加权求和实现近似零温度系数的稳定输出,这一特性对于高精度数据转换器、电源管理芯片等至关重要。从工程实践角度,利用HSPICE进行深入的直流工作点、温度扫描和工艺角仿真,是验证电路性能、优化温度系数和电源抑制比的关键步骤。而借助Cadence Virtuoso进行版图实现时,必须重点关注电阻与BJT的匹配布局、敏感节点的保护以及电源完整性设计,以确保设计意图在硅片上得以准确呈现。通过完整的从前 阅读详情

相关推荐

python零基础入门到精通,python入门到精通教程

坚持到了这儿,恭喜你,表示你有做开发的潜力,其实我想说的上面的内容还是刚刚开始,刚开始大家不需要多么精通了解这些内容,除了Python方面的知识,每个部分掌握一点儿能进行基本开发就好,主要是不断练习,让自己跳出「舒适区」,进入「学习区」,但是又不进入「恐慌区」,不断给自己「喂招」。上述这份完整版的Python全套学习资料已经上传优快云官方,朋友们如果需要可以扫描下方二维码免费获取【保证100%免费】

YYmmsss的博客 3450

分支(if)、循环、Random随机数相关知识点

分支结构 循环 Random随机数

长安1108的博客 170

Dev C++调试程序方法详解

Dev C++调试程序方法详解

weixin_70641798的博客 1万+

常见安全算法

本文整理了常见的安全算法,包括MD5、SHA、DES、AES、RSA等,并写了完整的工具类(Java 版),工具类包含测试。转自:http://www.jianshu.com/p/2196a601d444 一、数字摘要算法数字摘要也称为消息摘要,它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash函数对消息进行计算而产生。如果消息在传递的途中改变了,接收者通过对收到消息采用相同的Ha

qq_35729168的博客 1491

【SAP HANA 46】关于HANA CPU高峰到 80-100%

关于HANA CPU高峰到 80-100%

探索 Java 编程的技巧、最佳实践和解决方案。本博客提供针对 Java 开发者的实用指南,涵盖从基础到高级话题,旨在提升编程效率和技能。 429

Arcgis模型构建器01——写一个简单的模型

在使用模型构建器解决这个需求之前,我们要想清楚如果我们手动解决的话,应该如何去处理,因为构建模型的过程正是基于我们手动处理的过程来构建的。我有一个全国的dem影像数据和一个陕西省边界范围矢量,现在我想获取陕西省的dem影像的坡度数据。填写完之后点击确定,我们发现,两个输入数据和工具连接起来了,并且通过裁剪工具得到一个中间结果,即。我们发现工具框和中间数据框都存在阴影,说明已经运行过了这个模型,不报错就说明模型运行成功!现在我们就把数据和工具都串联起来了,成功构建好了模型。

爱吃雪糕的小布丁的博客 918

java中if条件判断以及Random随机数

if判断条件是否为真,为真则输出,为假则不输出。 示例: if(表达式){ 语句块 } public class demo{ public static void main(String[]args){ int i=70; if(i>60){ //判断i值是否大于60,大于就及格。 System.out.println("及格"); } } ...

weixin_63849316的博客 1344

Modis数据处理工具:MRT百度网盘下载和手把手图文安装教程

如下图所示为MODIS Reprojection Tool(MRT)的软界面,看似简单,却是Modis遥感影像必不可少的处理工具,如投影变换等。本文以图文并茂的形式,详细讲解MRT软件在Windows10平台上的安装过程,并附MRT软件百度网盘下载地址。 Modis Tool主界面: 一、安装过程 1、安装Java运行环境 双击Java.exe,安装运行环境。默认的安装路径为C:\Program Files (x86)\Java\jre6\bin,后面需要用到这个路径。 等待...

智慧空间实验室 2623

生成安全的随机数

阅读文本大概需要10分钟。0x01:生产随机数的方式Math.random()0到1之间随机数java.util.Random伪随机数(线性同余法生成)java.secu...

天行健,君子以自强不息;地势坤,君子以厚德载物。 1704

基于 Vivado HLS 的 AC97 音频系统设计

介绍一种基于 FPGA 的 AC97 音频系统设计。系统的核心部件采用 Xilinx Atlys 的板载 Spartan6 XCSLX45 芯片,使用的工具为 Xilinx 的高层 次 综 合 技 术 Vivado HLS。首先使用 C /C + + 代码编写的算法描述系统的 FIR 滤波器; 然后按 照 Vivado HLS 编译工具的规范,将程序代码转换为 RTL 模型,快速、直接地生成对 应左右声道的 FIR IP 核和综合结果; 再结合互连的 MicroBlaze 处理器 IP 核,处理 一段立体声

qq_43416206的博客 327

AUTOSAR知识点 之 XCP (二):XCP基础概念

学习XCP的过程中,对XCP的基本概念要做一个全面的认知,因为里面有很多缩写以及难以理解的点,假设对此模模糊糊一知半解,那么对整个协议栈的认知会遇到极大的障碍。XCP的信号流传输图示如下XCP 标准主要分为 5 个部分:这部分提供了对于协议的一个概况介绍,包括 XCP 的功能和基础性内容。这部分内容对协议层进行了详细的规范和说明。

梦想技术家 2769

《白帽子讲Web安全》11-加密算法与随机数

常见的加密算法

CD的博客 1483

【Halcon-2D测量】add_metrology_object_rectangle2_measure 函数功能(用于向2D计量模型中添加旋转矩形(rectangle2类型)计量对象)

HALCON算子add_metrology_object_rectangle2_measure解析摘要 该算子是HALCON 2D计量模块的核心算子,用于添加旋转矩形计量对象并配置测量参数。主要功能包括:定义旋转矩形几何轮廓(中心坐标、主轴角度、长短半长);生成垂直于矩形边界的测量区域;设置边缘提取预处理参数(高斯平滑、振幅阈值)。关键注意事项:MeasureLength1必须小于矩形长短半长;角度参数Phi需使用弧度单位;多线程需同步模型句柄。该算子适用于方形螺母、PCB板边框等矩形零件的精密测量,需与a

weixin_45590420的博客 1225

随机算法全面总结

随机算法涉及大量概率论知识,有时候难得去仔细看推导过程,当然能够完全了解推导的过程自然是有好处的,如果不了解推导过程,至少记住结论也是必要的。本文总结最常见的一些随机算法的题目,也当作面试的准备工作吧。需要说明的是,这里用到的随机函数都假定它能随机的产生范围[a,b]内的整数,即产生每个整数的概率相等。(虽然在实际中并不一定能实现,不过,谁在乎呢?这个世界都是这么随机) 一、随机排列数组

__七把刀__ 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

什么是随机算法

期望性能:尽管个别执行可能不理想,但从期望上看,随机算法通常具有良好的性能。随机选择:算法中包含随机选择步骤,使得同样的输入可能产生不同的结果。从后向前遍历数组,每次随机选择一个元素与当前元素交换。概率保证:随机算法的正确性和效率通常以概率保证。问题描述:在未排序的数组中找到第k小的元素。随机选择一个基准元素,将数组划分为两部分。随机选择一个基准元素,将数组划分为两部分。递归地在适当的部分中寻找第k小的元素。问题描述:对给定数组进行随机打乱。问题描述:对给定数组进行排序。问题描述:估计圆周率π的值。

m0_70960708的博客 588

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

红包随机算法&微信群红包随机算法

1.前言 因疫情影响,部门 2021 年会以线上直播的形式进行,通过微信小程序展开。为活跃年会氛围,年会直播间会有抢红包环节。因产品要求,红包金额要随机生成,所以这里涉及到指定红包总额、数量和最大最小值情况下如何生成红包金额。 可以看出,红包随机金额生成的输入是一个四元组 <sum, num, min, max>,其中 sum 是红包总额,num 是红包数量,min 和 max 分别是红包最小最大值。所以这里可以抽象成如下算法: input: <sum, num, min, max>

Doublelv 的博客专栏。 7628

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

算法学习8——随机算法

随机算法是一类在算法执行过程中使用随机选择的算法。其行为可能因随机选择的不同而有所不同,但在大多数情况下能够给出高效的解。随机算法通常用于求解复杂问题,如蒙特卡罗方法、快速排序等。

零度°C的博客 1004

【算法】随机快速排序和随机选择算法

学习一下更简洁的快排以及随机选择算法

Ahaooooooo的博客 1432

随机选择算法

问题 如何从一个无序数组中求出第 K 大的数(为了简化讨论,假设数组中的数各不相同)。 例如,对数组 { 5,12,7,2,9,3 }来说,第三大的是 5,第五大的是 9 随机选择算法 概念 最直接的想法是对数组排序,然后取出第 K 个。这样做法时间复杂度 O(nlogn),虽然看起来很好,但是还有更优的算法。 随机选择算法,对任何输入都可以达到 O(n)的期望时间复杂度 随机选择算法的原理类似于 随机快速排序 假设主元为 A[p],当对 A[left,right] 执行一次 randPartition 函

小枫哥的博客 4416

简单红包随机算法

简单红包随机算法 给点总额allMoney 随机分成 count 份,要求每份的金额不小于min 不大于max /** * * @param allMoney 总金额 * @param count 总条数 * @param min 最小额 * @param max 最大额 * @return */ ...

qq_37209293的博客 23万+

几种随机算法的实现原理

在日常工作中,经常需要使用随机算法。比如面对大量的数据, 需要从其中随机选取一些数据来做分析。 又如在得到某个分数后, 为了增加随机性, 需要在该分数的基础上, 添加一个扰动, 并使该扰动服从特定的概率分布。本文主要从这两个方面出发, 介绍一些算法, 供大家参考。 首先假设我们有一个使用的随机函数float frand(), 返回值在(0, 1)上均匀分布。大多数的程序语言库提供这样的函

androidstar_cn的博客 3万+
上一篇: 面试中的涉及随机的算法
下一篇: 数据工程师必知算法:蓄水池抽样
_KingKazma_
博客等级 码龄14年 29粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值