- 浏览: 308315 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (272)
- java (42)
- c (49)
- 算法 (29)
- 汇编语言 (3)
- 字符集 (3)
- error (3)
- 搜索引擎 (2)
- 互联网 (18)
- linux (12)
- 网络 (20)
- VMWare (1)
- 面试 (7)
- c++ (55)
- 设计模式 (3)
- db (9)
- office (2)
- FS (1)
- rest (3)
- Ajax (2)
- Spring (2)
- Hibernate (3)
- matlab (1)
- load balancing (8)
- 分布式计算 (2)
- 易语言 (1)
- apache tomcat (1)
- 测试 (1)
- 数据结构 (5)
- 数学 (13)
- 服务器 (9)
- 读后感 (4)
- 好书介绍 (1)
- script (3)
- wordpress (2)
- delphi (21)
- pascal (8)
- xml (3)
- 趣味 (1)
- PHP (3)
- python (13)
- DLL (4)
- openGL (8)
- windows (2)
- QT (28)
- django (7)
- jquery (1)
- 数据挖掘 (7)
- nginx (1)
- js (1)
- mac (1)
- hadoop (3)
- 项目管理 (1)
- 推荐系统 (1)
- html (1)
最新评论
-
晴天1234:
related remove:attention.ibus和u ...
UBUNTU的默认root密码是多少,修改root密码 -
美丽的小岛:
美丽的小岛 写道如上配置好就得了。提示没有OpenGl.dll ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
如上配置好就得了。提示没有OpenGl.dll之类的,再增加入 ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
主要是理清哪两个对象之间的关系,是信号与所有槽的关系或者是槽与 ...
QT之DisConnect -
美丽的小岛:
LPCTSTR类型:L表示long指针 这是为了兼容Windo ...
QString与各种字符串之间的转化
问题描述:
假设我们有一堆数据(可能在一个链表里,也可能在文件里),数量未知。要求只遍历一次这些数据,随机选取其中的一个元素,任何一个元素被选到的概率相等。O(n)时间,O(1)辅助空间(n是数据总数,但事先不知道)。
引例:
5个人抽5个签,只有一个签意味着“中签”,轮流抽签,从很久很久以前我们就认为这个是非常公平的例子,这个应该不用去怀疑吧。如果怀疑了,好吧,看下面的分析:
分析:
设Ai为第i个人抽签抽中事件,P(Ai)表示第i个人中签的概念,依题意得:
第一个人中签概率:P(A1)=1/5;
第二个人中签概率:P(A2)=4/5*1/4=1/5;(因为第二个人是在第一个人选了之后才去抽的,所以,还有4/5是第一个没有选中的,剩下的四个再去抽一个所以是1/4)
同理, P(A3)=4/5*3/4*1/3=1/5;
P(A4)=4/5*3/4*2/3*1/2=1/5;
P(A3)=4/5*3/4*2/3*1/2*1=1/5;
就样,五个人抽到的是等概率的,相信了吧。
总结公式:
java产生随机数的几种方式
1.使用Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double,可以乘以一定的数,比如说乘以100,他就是个100以内的随机。(j2me没有)
2.在java.util这个包里面提供了一个Random的类,我们可以新建一个Random的对象来产生随机数,他可以产生随机整数、随机float、随机double,随机long,这个也是我们在j2me的程序里经常用的一个取随机数的方法。
3.在我们的System类中有一个currentTimeMillis()方法,这个方法返回一个从1970年1月1号0点0分0秒到目前的一个毫秒数,返回类型是long,我们可以拿他作为一个随机数,我们可以拿他对一些数取模,就可以把他限制在一个范围之内。
一般会用到java.util里面包中的,一个例子:
public class Test { public static void main(String[] args) { java.util.Random r=new java.util.Random(); for(int i=0;i<100;i++){ System.out.println("i="+i+" "+r.nextInt(100)); } } }
结果打印了100个0到100(不包含100)的随机数。
看一下Random类:
还有nextFloat().nextLong()等方法,重点看看nextInt(int n)方法吧,看jdk说明文档。
n - 要返回的随机数的范围。必须为正数。 0 (包括)和 n (不包括)之间均匀分布的 int 值。 IllegalArgumentException - 如果 n 不是正数 |
单遍历取等概率随机数问题求解JAVA实现:
public class Test { public static void main(String[] args) { java.util.Random r=new java.util.Random(); int n= 0 ; int[] a = {12,34,56,78,9,91,87,4,5,62,12,3,41,8,89,541,11,54,36}; int selectNum = 0 ; for(int k : a){ n++ ; if(r.nextInt(n) == 0){ selectNum = k ; } } System.out.println("selectNum:"+selectNum); } }
参考:
http://www.gocalf.com/blog/random-selection.html
http://www.blogjava.net/cool2009/archive/2009/03/15/259882.html
发表评论
-
推荐!国外程序员整理的Java资源大全
2015-12-15 10:14 665本文由 ImportNew - 唐 ... -
jsoup select 选择器
2015-12-09 14:03 982问题 采用CSS或类似jquery 选择器(selecto ... -
xmlbeans问题(深刻)
2015-11-12 23:08 1189运行scomp,路径永远是一个问题; 1.Program ... -
spring配置一个简单的数据连接池(dbcp)
2015-11-12 14:16 8201.文件结构 2.包结构 3.spring.x ... -
java泛型之通配符的使用
2015-11-12 12:15 708转自: http://blog.csdn.net/lone ... -
Ubuntu下安装JDK
2015-05-02 18:42 558安装JDK: 1.下载 http://www ... -
Apriori算法
2014-12-15 12:56 667http://blog.csdn.net/lizhengn ... -
编辑距离算法
2014-08-14 00:02 975字符串编辑距离: 是一种字符串之间相似度计算的方法。给定两个 ... -
八叉树及K-D树的应用和实现
2014-07-31 19:51 21531. 八叉树、k-d树的原理 2. 八叉树、k-d树的应用 ... -
四叉树与八叉树
2014-07-31 19:37 1407前序 四叉树或四元树也被称为Q树(Q-Tree)。四叉树 ... -
Delphi开发DLL,Java调用DLL
2014-01-01 16:40 1323用一个小例子来示范一下,不写文件字。 第一步 第二步, ... -
如何在Java中调用DLL方法<转>
2013-12-30 13:36 719Java语言本 ... -
Java对存储过程的调用方法
2013-05-14 09:29 796//一:Java如何实现对存储过程的调用: // A ... -
自行车往哪个方向行驶? <转>
2013-05-09 12:57 915文章转自: http://www.ma ... -
01虫子问题<转>
2013-05-09 12:26 732来自:http://www.cs.cmu.ed ... -
求数组中重复出现次数大于数组总个数一半的数
2013-04-17 21:39 1390变量设计,一个变量,存数num,另一个存这个数出现的次数ti ... -
约瑟夫环(时间复杂度为n)
2013-04-17 21:20 1828一、 题目描述: 约瑟夫环是一个数学的应用问 ... -
谈谈对象和XML文件的转换 <转>
2013-04-12 14:18 1044很多时候,我们开发 ... -
详解Java解析XML的四种方法<转>
2013-04-12 14:01 969XML现在已经成为一种通用的数据交换格式,它的平台无关性, ... -
不用除法运算符的除法
2013-04-04 09:53 1818题目描述: 给定一数组a[N],我们希望构造数组b [N] ...
相关推荐
2. **单遍历取等概率随机数问题**:在一次遍历数组的过程中,如何有效地选取具有等概率的随机元素。这通常涉及到随机数生成和概率论,可能使用Fisher-Yates洗牌算法或其他方法。 3. **查找任意两个节点的公共父节点...
在IT领域,随机数和概率计算是至关重要的概念,尤其在模拟、统计分析、游戏开发、加密算法以及机器学习等多个方面都有广泛应用。本篇将详细探讨如何利用编程语言中的随机函数生成数字序列,并通过分析这些序列来理解...
在 chanceSelect 方法中,我们首先计算总概率,然后生成一个随机数,然后遍历 Map,减去每个项的概率,直到随机数小于或等于 0,这时我们就选中了该项。这种方法可以根据预先设置的概率来生成随机数。 在实际应用中...
城市遍历问题是一个经典的组合优化问题,常被用于路径规划,特别是在机器人导航、物流配送等领域。在本课程中,我们重点讨论的是如何利用MATLAB来解决这个问题,特别是通过应用蚁群算法来寻找最短路径。 蚁群算法是...
在Python编程中,有时我们需要按照特定的概率来生成随机数,比如在模拟实验或者游戏中,不同事件发生的概率可能各不相同。本篇文章将介绍如何在Python中实现按概率生成随机数,以及一个具体的例子,用于模拟生成红、...
在计算机科学与统计学领域,生成符合特定概率分布的随机数对于模拟、实验设计以及数据分析等方面具有重要意义。其中,标准正态分布(均值为0,方差为1的正态分布)是一种非常重要的概率分布模型,在许多应用中被广泛...
`Random`类的构造函数通常不带参数,创建实例后,可以通过`nextInt()`、`nextDouble()`等方法来获取不同类型的随机数。例如: ```java Random random = new Random(); int randomInt = random.nextInt(); // 生成0...
通过遍历奖项,比较随机数与每个奖项的累计概率,当随机数小于某个累计概率时,选择该奖项。 4. **优化效率**:在处理大量奖项时,逐个比较累计概率可能会导致性能下降。因此,可以使用二分查找或者哈希映射等数据...
在JavaScript编程中,有时我们需要根据特定的概率分布生成随机数,比如在游戏开发、模拟系统或数据分析等场景。本文将深入探讨如何使用JavaScript控制随机数生成概率,并提供一个具体的代码实例。 首先,我们要理解...
总的来说,“36选7”开奖过程的实现涉及了随机数生成、概率公平性、数据结构(如列表)以及基本的循环和条件判断等编程概念。在实际编程中,还需要考虑性能优化和错误处理等细节。对于理解随机数生成、概率和算法...
总的来说,这个项目展示了Python在图像处理和随机数生成方面的强大能力,结合了计算机视觉和概率统计的知识,为实际应用提供了创新思路。通过学习和实践这个设计,开发者不仅可以掌握Python图像处理技巧,还能深入...
在计算机科学和编程领域,随机数的生成是一个重要的任务,特别是在模拟、统计计算以及游戏开发等应用中。本文将深入探讨如何使用VC++(Visual C++)编程环境生成任意分布的随机数,以正态分布为例,同时结合“示波器...
接着,生成一个介于0(包含)和总概率(不包含)之间的随机数,然后遍历奖项,通过比较随机数与每个奖项的累积概率来确定中奖项。 这个过程的关键在于如何高效地计算累积概率。一种方法是使用优先队列(如C#中的`...
在编程领域,随机数的应用广泛且重要,尤其是在游戏开发、模拟仿真、加密算法等领域。C#作为.NET框架下的主要编程语言,提供了丰富的随机数生成工具。本案例——“随机数的案例-洗牌程序”旨在讲解如何利用C#实现一...
2. **桶排序法**:创建一个大小为m的数组,每个位置代表一个随机数,通过随机数的索引将这些数放入对应的桶中,最后遍历桶得到不重复的随机数。 3. **布隆过滤器**:使用布隆过滤器检查生成的随机数是否已存在,避免...
开发者可能会定义一个数组来存储参与者的信息,然后通过循环遍历数组,用随机数选取幸运儿。此外,为了保证公平性,程序可能还会加入一些逻辑,比如避免重复抽中同一个号码,或者设定每个参与者被抽中的概率。 在...
该JAVA抽奖算法通过合理的概率缩放、累积概率计算以及随机数生成与比较等步骤,实现了基于不同概率分布的灵活抽奖功能。对于实际应用场景来说,这种算法不仅简单高效,而且易于扩展,能够满足多种不同的需求。