随机数算法之从N个数中取M个数

等概率无重复的从n个数中选取m个数 问题描述:程序的输入包含两个整数m和n,其中m 学习过概率统计的同学应该都知道每一个数字被抽取的概率都应该为m/n. 那么我们怎么构造出这样的概率呢?在《编程珠玑》上面是这样解析的:   依次考虑整数0,1,2,.....,n-1,并通过一个适当的随机测试对每个整数进行选择。通过按序访问整数,我们可以保证输出结果是有序的。 假如我们考虑m = 2,n = 5的情况,那么选择的每一个数字的概率都 阅读详情

算法描述如下:从M个数中选出N个数来(0<N<=M),要求N个数之间不能有重复。


分两种情况:
1.n>>m时 

 repeat 
        Randomize;                   //初始化随机数 
        a:=Random(n-1)+1;     //如果n=50,0 <=Random(50-1) <=49 
        b:=Random(n-1)+1; 
        c:=Random(n-1)+1; 
    until   (a <> b)   and   (b <> c)   and   (a <> C) 


2 m接近n时,随机抽取一个,如果重复了,重新抽取一次。缺陷是需要对比。

进一步做法:每次随机取出一个数,之后将该数放置到集合的末尾去,这样下次取随机数的时候,只从1到目标集合个数-1个中随机抽取,如此循环,这样就避免了判断在结果集合中判断是否存在相冲突的数的过程。

另外一种不使用数组而使用可变集合的办法,这种算法的做法是使用了之后马上从源集合中清除掉(数组是没有办法这么做的),因而也是可以做到生成不重复的随机数的。



C++高效率在m个单位中随机取n个单位的算法 在m个单位中随机取n个单位的算法 一、简述 在编程中,尤其是编写游戏的过程中经常会遇到在m个东西中取出n个东西的需求,这个时候一般人都会想到随机n个数出来,然后在原来的列表中去凑这n个数的下标。这样会导致许多的问题,例如很难保证不出现重复的随机数,更重要的是我们会为了避免这些问题去做许多没有意义的循环从而严重的影响了效率,这个时候就需要一个更加有效率的算法。 二、基本原理 如果我们总共有的个数为m... 阅读详情

相关推荐

生产N个不重复的随机数(从一个数组中随机取N个元素)

有个需求,想要从一个长度为M的数组中随机的取其中的N个元素。 有两个思路: ①生成N个不重复的随机数(0到M-1之间)然后取以这N个数为下标的单元; ②将这个数组所有单元打乱,取前N个值。 第一种 这有个还不错的方法:http://blog.youkuaiyun.com/devfun/article/details/6534476 int startArray[] = {0,1,2,3,4,

u011429058的专栏 8048

求C n m(从n个数中选m个数,有多少种组合?问题)暴力—递归——回归数学公式,三种方法,层层优化!

文章将以代码+解析(简单)的方式进行,欢迎大家的阅读! 首先,任何一个问题都是有来源的,所以请先看题(我遇到的): 暴力解法(我第一次的想法) 代码如下: #include <stdio.h> int main() { int n, m, i, num; scanf("%d", &num); while (num--) { scanf("%d %d", &n, &m); int N = 1;..

m0_60593173的博客 1972

C语言回溯法 实现组合数 从N个数中选择M个数

在平时的算法的题目中,时常会遇到组合数相关的问题,暴力枚举。在N个数中挑选M个数出来。利用for循环也可以处理,但是可拓展性不强,于是写这个模板供以后参考

最全随机抽样算法(从N个数中抽取M个等)集合

1.从N个数中等概率抽取M个数 从N个样本中等概率抽取M个样本(M&amp;amp;lt;N)是常见的需求。现在我们以一个数组来模拟样本,看看怎么实现这个算法。 最容易想到的方法,肯定就是直接等概率抽取。具体做法如下:每次都随机在[0, N-1](假设第一个样本d的标号为0)之间抽取一个数,并且与之前的数相比较。如果与前面生成的随机数相同,则继续随机生成,直到生成一个与之前所有生成数不同的数。如果不相同,则将该随...

bitcarmanlee的博客 3万+

FTPClient使用中,碰到SocketTimeoutException 坑

ftpclient设置soTimeout无效

u010379794的博客 1950

告别QWebEngineView!用QtLocation+SQLite打造离线地图应用(附完整源码)

本文详细介绍了如何利用QtLocation模块与SQLite数据库构建高性能离线地图引擎,解决传统QWebEngineView方案在网络依赖、内存占用和定制化方面的不足。通过多级缓存机制、异步写入优化和纹理压缩技术,实现工业级应用的稳定运行和高效渲染,特别适合车载导航和野外勘探等场景。

weixin_30431445的博客 362

从N个数中选M个数的算法实现_拔剑-浆糊的传说_新浪博客

【情况一,不存在重复数】 实现机理:先创建一个字符串数组,其下标表示 1 到 n 个数,数组元素的值为1表示其下标代表的数被选中,为0则没选中。 然后初始化,将数组前 m 个元素置 1,表示第一个组合为前 m 个数。 然后从左到右扫描数组元素值的 10 组合,找到第一个 "10" 后交换 1 和 0 的位置,变为 01,而后将该10组合...

拔剑—浆糊的传说 951

CTF全能工具箱ProV2:集成AI与94GB离线资源库,打造无网环境下的智能解题流水线

CTF全能工具箱ProV2是一款专为线下CTF比赛设计的All-in-One离线解决方案。它集成了94GB的庞大离线资源库,涵盖Web、逆向、Pwn等全方向工具链与知识库,并创新性地内置了本地AI大模型,可在断网环境下提供智能解题辅助,实现从信息收集到漏洞利用的智能流水线作业,极大提升比赛效率。

weixin_29240343的博客 422

洗牌算法拓展(从n个数中随机m个数)

一般洗牌算法达到的效果就是打乱序列,可以理解为从n个数中随机m个数。 当n==m的时候,就是全打乱,m<n的时候,有两种做法。 ①全打乱,然后取前m项。 ②每次从n中取出一个数,然后从n中删除这个数,重复m次。 全打乱(n等于m) 1、random_shuffle 一般洗牌就是全打乱,这个时候可以直接用stl的 random_shuffle 函数。源码如下: template <class RandomAccessIterator> ...

瑾修的博客 828

常微分方程 (ODE) 和 随机微分方程 (SDE)

常微分方程(Ordinary Differential Equations, ODE)和随机微分方程(Stochastic Differential Equations, SDE)是数学中描述系统动态行为的重要工具。它们有一些相似之处,但在处理随机性方面存在显著差异。

weixin_39699362的博客 4384

从一只龙虾到一支团队:OpenClaw 单 Bot 多 Agent 配置实践

单 Bot 多 Agent只有一个对外的聊天入口(飞书 Bot)内部有多个独立的 AI Agent,各司其职主 Agent(总指挥)负责接收任务并分配给子 Agent子 Agent 完成任务后将结果返回给主 Agent角色Agent ID职责使用场景🎯 总指挥main-agent统筹协调,任务分发接收所有用户请求✍️ 笔杆子内容创作公众号、博客、小红书🔬 参谋canmou深度研究竞品分析、市场调研📋 运营官operations运营管理邮件、日历、社交媒体。

Maynor的博客 1079

n 中选 m —— 随机采样的艺术

1…n 中个数随机取 m 个数,要求 1…n 中被取到的概率相同: Knuth 书中的随机数方法,很容易写出: void genkunth (int n, int m) { for (int i = 0; i &amp;lt; n; ++i) { if (bigrand() % (n-i) &amp;lt; m) { m--; cout ...

2051

Python办公自动化 2.1开发环境搭建:PyCharm社区版配置Anaconda开发环境

本篇文章主要讲述了如何在windows主机上配置 PyCharm + Anaconda开发环境、以及了如何配置 PyQt界面开发环境,安装过程超级详细,初学者可以照着一步一步来!

超级大洋葱的博客 2584

从1....n中随机输出m个不重复的数

csdn上看到的一帖子 http://topic.youkuaiyun.com/u/20120825/20/6171393d-15ea-4a50-ba30-78d1d24974e3.html,是关于一种不重复随机算法,可以计算0 ~ n中不重复的m个数。 [cpp] view plaincopy #include    #include    usi

stay hungry,stay foolish 2142

PCL 使用RANSAC拟合平面【2026最新版】

RANSAC拟合平面算法原理和实现流程详解以及最大迭代次数和内点期望概率的设置方法。最后再对拟合后的平面法向量与向量(1,1,1)进行定向。博客长期更新,最近一次更新时间为:2026年4月24日。

点云侠的博客 42万+

网络工程师如何利用Python自动Telnet到N个路由器并执行配置?

telnetlib是Python标准库中的一个模块,专门用于实现Telnet协议。通过telnetlib,我们可以方便地与支持Telnet协议的远程设备进行通信。telnetlib提供了基本的Telnet功能,如连接远程主机、发送命令、读取响应等,使得编写Telnet自动化脚本变得非常简单。文档:可以选择中文:虽然telnetlib的功能相对基础,但对于大多数Telnet操作来说已经足够。通过telnetlib,可以轻松地实现与网络设备的交互,完成自动化配置任务。

网络技术联盟站 298

从M个数中随机取出N个

看到这样一个题目:在M个数中,随机取出其中的N个,要求等概率。 这应该是一个比较简单的题目,看到题目后的第一想法是:维护一个关于这M个数的集合,然后每次随机从集合中抽一个数,抽N次即可。 等概率显然不是什么问题,当然前提是假设随机函数是等概率的,否则任何方法都免谈了。 对于其中的每一个数,它在每一次不被抽走的概率是:(M-1)/M、(M-2)/(M...

weixin_34253539的博客 2877

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

随机生成0到n之间的m个数

如何用随机数生成0到n之间的m个不重复的数 1、最直接的方法就是先随机生成一个0到n之间的数,判断这个数是否已被选上,如果以前没选过,则选上,如果以前已选,则丢弃 void common(int n,int m) { int * randnum=(int *)malloc(n*sizeof(int)); memset(randnum,0,n*sizeof(int)); //把n个位

dlengong的专栏 6872

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

给定1到N的随机数函数,产生1到M的随机数

给定能随机生成整数 1 到 n 的函数,写出能随机生成整数 1 到 m 的函数(m > n)。 设 n = 5, m = 7 关键是让生成的 1 到 7 的数出现概率相同。调用 n 次给定函数,生成 n 个 1 到 5 之间的随机数,选取最大数所在位置,直到剩下最后一个。如: 初始的 7 个数 [1, 2, 3, 4, 5, 6, 7]。 (1)7 个 1 到 5 的随机数,如 [5,

songuo' s home 5197

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

M个数字中随机取N个数(不重复)

方法1: 要从M个数字中随机取N个数,最直接的想法把已经取得的随机数存储起来, 每次随机取一个数, 在存储的随机数中如果能够找到,就要重新再取, 直到取到足够数量的随机数。 这个方法的好处是容易理解,容易实现。 但它的时间性能是O(N2),因为存在一个2重循环。如果样本较多,时间会急剧增加。 方法2: 在外层循环难以避免的情况下,我们考虑把内层循环换成固定时间的算法。代码如

vulcan 5849

java 从m个数中均匀找出n个数_JAVA的算法实现--从长度为n的数组(元素互不相同)中任意选择m个数的所有组合...

从长度为n的数组(元素互不相同)中任意选择m个数的所有组合//分析及构思1.键盘输入数组的长度2.键盘输入组合的个数3.利用随机数获得一个数组4.在构建数组是要对数组中的元素进行判断,保证新生成的随机数与之前的数不同5.以数组a[]和m为参数调用方法zuhe(a,m)得到一个list6.遍历输出list算法:1.创建一个辅助数组tempNum和a相对应.tempNum中的值是0或1,1所在的位置就...

weixin_36330704的博客 841

javascript取随机数_js随机数生成方法和实例,生成[n,m]的随机整数,获取1-10之间的随机数...

随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串、数字。或者像js-task1中一样随机选择一个盒子,随机一个颜色等等。这个时候我们就要知道用js应该如何获取一个随机数。一、js随机数知识Math.ceil(); //向上取整。Math.floor(); //向下取整。Math.round(); //四舍五入。Math.random(); //0.0 ~ 1.0 之间的一个伪随...

weixin_39902107的博客 3265

java 从n个数中随机抽取m个_从n个数中随机选取m个

咋一看,这是个很简单的问题,但是如果n是个不确定的数呢?比如服务器每天会收到数以亿计的请求,但是目前服务器端不希望保存所有的请求,只想随机保存这些请求中的m个。试设计一种算法,能够使服务器实时保存m个请求,并使这些请求是从所有请求中的大致等概率被选中的结果。注意:不到一天的结束,是不能提前知道当天所有请求数n是多少的。下面我们分两种情况讨论(1)n已知,(2)n未知。1 n已知可以将问题简化为:从...

weixin_28952093的博客 2688

从m个数中获取n个不同的数

最近在写一个从Excle题库抽题组卷在jsp显示的功能,其中用到了一些算法和技术,在此做记录。 1.通过java读取excle中内容; 2.获取某范围内的一个随机数; 3.从m个数中随机抽取n个数; 4.获取jsp界面中单选框的选择结果; 5.EL表达式的一些注意点(不定时更新)。 本篇主要来介绍从m个数中随机抽取n个数。 // 从数组中取k个数 int k = 5;...

LittleWheat的博客 1206
上一篇: sizeof和strlen
下一篇: 设计包含min函数的栈,O(1)空间实现方法
crazyhacking
博客等级 码龄15年 299粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值