转载自: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()?
相关推荐
在IT行业的面试中,C++作为一门强大的编程语言,其面试题往往涵盖了广泛的知识领域,包括基础语法、面向对象编程、模板、STL、内存管理、多线程、异常处理等。以下是一些可能出现在“C++经典50大面试题”中的关键...
在面试准备过程中,了解和掌握一些常见的Python面试题对于求职者来说至关重要。以下将详细解释上述文件中提到的Python知识点。 1. 利用Python的内置函数sum()可以非常简便地计算序列的总和。例如一行代码`sum(range...
民生银行 Java 面试题解析 在本文中,我们将对民生银行 Java 面试题进行详细解析,每个问题都将被拆分成多个知识点,并对每个知识点进行详细的解释。 问题 1: 班级表和学生表 SQL 语句 在这个问题中,我们需要写...
以下是 Python 面试题汇总,涵盖了 Python 的基础知识、数据结构、函数、面向对象编程、文件操作、正则表达式、随机数生成、断言、SQL 等方面。 一、Python 基础知识 * Python 的标准库包括 os、sys、re、math、...
- NumPy:数组操作、矩阵运算、统计函数和随机数生成。 - Pandas:数据结构DataFrame和Series,数据清洗、合并、切片和分析。 - Matplotlib和Seaborn:数据可视化,包括折线图、柱状图、散点图和直方图。 - ...
C#面试题集锦 在这篇文章中,我们将讨论一些常见的C#面试题,并提供解答。这些问题涵盖了C#的基本概念、类和接口、结构体、异常处理、集合等方面。 1. const和readonly的区别 const和readonly都是用于定义常量的...
【Python数据分析面试题汇总】 1. **Python求和**:Python内置函数`sum()`可用于求和,例如`sum(range(1, 101))`将计算从1到100的所有数字的总和。 2. **全局变量修改**:在函数内部修改全局变量需使用`global`...
11. **生成随机数**:使用random模块生成随机整数可以使用`random.randint(a, b)`,随机小数可以使用`random.random()`(0-1之间的浮点数)。若需要numpy库,`np.random.randn(d0, d1, ..., dn)`能生成指定形状的...
本资源摘要信息是关于 Python 面试题的知识点总结,涵盖了 Python 的多方面知识点,包括基本语法、函数、数据类型、面向对象、文件操作、异常处理、正则表达式、随机数生成、断言、SQL 等。 1. 基本语法 * 一行...
以下是一些基于给定文件中的面试题所涵盖的关键知识点: 1. **在圆内随机生成点**: 这个问题涉及到概率论和几何学。在JavaScript中,可以使用Math.random()函数生成[0,1)之间的随机数来确定点的坐标。通过将这两...
Python面试题总结知识点: 1. 单例模式的实现方法: Python中实现单例模式主要有两种方式。第一种是利用装饰器(decorator),创建一个全局的字典用于存储类的实例,并通过装饰器返回这个实例。如果在字典中不存在类...
不过,每次运行这个查询,由于`RAND()`函数会生成不同的随机数,所以结果会有所不同。示例如下: ```sql SELECT * FROM emp ORDER BY RAND() LIMIT 5; ``` 第三个问题是要按部门编号(Deptno)创建一个新的列并...
`DBMS_RANDOM.VALUE()`用于生成随机数,`ROWNUM`则用来限制返回的记录数。 **题目8.3:** 处理空值排序。 **解答:** ```sql SELECT * FROM EMP ORDER BY COMM DESC NULLS LAST (FIRST); ``` **解析:** 此题考查...
【Python面试题:交换圣诞节礼物】是一个典型的编程问题,它涉及到随机数生成、字典操作以及循环控制等Python基础知识。在此题中,我们要创建一个模拟圣诞礼物交换的游戏,确保每个人都能拿到别人送出的礼物,而不会...
这份文件是关于BAT(百度、阿里巴巴、腾讯)公司的经典面试题集,包含了多个方面的技术问题,覆盖算法、C/C++基础、智力题以及概率题和操作系统题等。接下来我将详细解释这些知识点: ### 算法部分知识点 1. **...
Python标准库中的random模块提供了生成随机数的功能,如random.random()可以生成一个[0,1)之间的随机浮点数。 ### 访问C语言编写的Python模块 可以通过Python的C API来访问使用C语言编写的模块,具体是使用 **Py...
Java面试题涵盖了许多核心知识点,包括数据类型转换、设计模式、程序结构设计、随机数生成、数组操作以及方法重写和重载的概念。以下是对这些知识点的详细解析: 1. **数据类型转换**: 在Java中,整数直接量可以...