转载自:http://sumnous.github.io/blog/2014/05/13/random-pick-function/
前阵子去某公司笔试,有道题是
已知随机数生成函数f(),返回0的概率是60%,返回1的概率是40%。根据f()求随机数函数g(),使返回0和1的概率是50%,不能用已有的随机生成库函数。
分析:
调用f()两次即可,会出现4种结果(0,0), (0,1), (1,0), (1,1),其中出现(0,1), (1,0)的概率是一样的,可以构造出等概率事件,比如出现(0,1)可返回0,出现(1,0)可返回1,如果出现其他两种情况则舍掉重新调用。
代码如下:
1 2 3 4 5 6 7 8 |
|
这道笔试题到此为止。
接下来扩展一下,如何实现这个随机数生成函数f(),可用random(),也就是以指定概率获取元素。《Python Cookbook》中有此示例。分析一下,也就是在(0, 0.6]区间内取0,在(0.6, 1]区间内取1。扩展到多个数也一样。
1 2 3 4 5 6 7 8 9 |
|
验证一下:
1 2 3 4 5 6 7 |
|
得到的结果是:
1 2 |
|
《程序员面试金典第5版》(Cracking the Coding Interview)中也有一道给定一个随机数函数生成另一个随机数函数的题目。
给定rand5(),实现一个方法rand7()。也即,给定一个产生0到4(含)随机数方法,编写一个产生0到6(含)随机数的方法。(第105页)
分析:随机数函数的关键是确保产生每一个数的的概率相等。我们可用通过5 * rand5() + rand5()产生[0:24],舍弃[21:24],最后除以7取余数,则可得到概率相等的[0:6]的数值。
1 2 3 4 5 |
|
变形一下,给定rand7(),如何实现rand5()?
相关推荐
随机数生成函数 该函数的功能是生成一个随机数,可以连续调用
这是一个关于随机数生成函数的matlab程序 需要的同学可以下载看看
【程序老媛出品,必属精品,亲测校正,质量保证】 资源名:matlab最常用的...源码说明: matlab随机数生成大全,包括matlab中最常用的随机数生成函数,并提供了具体实例进行讲解 适合人群:新手及有一定经验的开发人员
北邮数电实验 6 随机数生成电路的设计与实现 报告(含VHDL代码)
可以生成制定范围内的随机数。有GUI界面
随机数生成专家是一款免费强大的随机数生成器,该软件无需安装,打开即可使用,支持三种随机数生成模式,比如范围模式、列举模式和多维模式,可以生成不同形式的随机数,支持生成指定范围内的几乎所有精度的整数和...
程序包含了随机数值生成的几种方法,可以直接拿来用。
包含随机数生成器的源码和打包好的软件,可以生成设定区间的任意个随机数
matlab随机数生成大全,包括matlab中最常用的随机数生成函数,并提供了具体实例进行讲解
Java简易随机数生成 下载完请输入测试代码 public static void main(String[] args) { System.out.println(random(50,100));//example System.out.println(random(50.0,100.0)); }
随机数生成器,可以随机生成随机数,可用于幸运号抽奖等。
1. 设计并实现一个随机数生成电路,每2秒随机生成一个0~999之间的数字,并在数码管上显示生成的随机数。2. 为系统设置一个复位键,复位后数码管显示“000”,2秒后再开始每2秒生成并显示随机数,要求使用按键复位。
随机数生成器(包括数字、字母、特殊符号)
labview随机数生成并组成数组.vi
可以随机生成序列号、纯数字、字符串; 其中随机生成纯数字可以自己控制随机数位数。
使用NIST统计测试集验证STM32微控制器随机数生成 使用NIST统计测试集验证STM32微控制器随机数生成 使用NIST统计测试集验证STM32微控制器随机数生成 使用NIST统计测试集验证STM32微控制器随机数生成 使用NIST统计测试...
JAVA做的0-100随机数生成器,可脱离JAVA环境运行,稍微有点大
既可以在不指定范围产生随机数 也可以在指定范围产生随机数,产生0到某个数的随机数
Linux随机数生成器的原理及缺陷