`
atell
  • 浏览: 158678 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

随机函数的面试题

阅读更多

来自 http://blog.csdn.net/wuxianglong/article/details/6804216的一道题。

 

题目:

给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一样。现要求使用该函数构造函数rand7(),使函数rand7()可以随机等概率的生成1-7的整数。

思路:

很多人的第一反应是利用rand5() + rand()%3来实现rand7()函数,这个方法确实可以产生1-7之间的随机数,但是仔细想想可以发现数字生成的概率是不相等的。rand()%3 产生0的概率是1/5,而产生1和2的概率都是2/5,所以这个方法产生6和7的概率大于产生5的概率。

正确的方法是利用rand5()函数生成1-25之间的数字,然后将其中的1-21映射成1-7,丢弃22-25。例如生成(1,1),(1,2),(1,3),则看成rand7()中的1,如果出现剩下的4种,则丢弃重新生成。

 

简单实现:

    public class Test {  
        public int rand7() {  
            int x = 22;  
            while(x > 21) {  
                x = rand5() + (rand5() - 1)*5;  
            }  
            return 1 + x%7;  
        }  
      
    }  

   我的备注:

    这种思想是基于,rand()产生[0,N-1],把rand()视为N进制的一位数产生器,那么可以使用rand()*N+rand()来产生2位的N进制数,以此类推,可以产生3位,4位,5位...的N进制数。这种按构造N进制数的方式生成的随机数,必定能保证随机,而相反,借助其他方式来使用rand()产生随机数(如 rand5() + rand()%3 )都是不能保证概率平均的。

    此题中N为5,因此可以使用rand5()*5+rand5()来产生2位的5进制数,范围就是1到25。再去掉22-25,剩余的除3,以此作为rand7()的产生器.

 

 有网友留了另外一种的办法:

 

(rand5()+rand5()+rand5()+rand5()+rand5()+rand5()+rand5())/5

  我的备注:

    这种做法根本就不对,试试1+1+1+1+1+1+1 / 5 ,除不尽。

0
1
分享到:
评论
1 楼 cli 2011-09-28  
在csdn上看到过用rand7做rand10的

相关推荐

    随机森林等集成算法高频面试题1

    2. XGBoost所做的改进2.1. 损失函数从平方损失推广到二阶可导的损失GBDT的核心在于后面的树拟合的是前面预测值的残差,这样可以一步步逼近真值 3.为

    最常见的36个Python面试题(Python面试题汇总一)

    解释 Python 中的 help 函数和 dir 函数10. 当退出 Python 时是否释放所有内存分配11. 什么是猴子补丁12. 什么是 Python 字典13. 能否解释一下 *args 和 **kwargs14. 编程实现计算文件中的大写字母数15. 什么是负...

    摩托罗拉C++面试题

    (最好这个项目继承,多态,虚函数都有体现)这个问题大概会占面试时间的一半,并且会问很多问题,一不小心可能会被问住)。 。。。 12。基类的有1个虚函数,子类还需要申明为virtual吗?为什么。 不申明没有关系的...

    大数据面试题(2).docx

    这样新生成的文件每个的大小大约也1G(假设hash函数是随机的)。 s、找一台内存在2G左右的机器,依次对用hash_map(query, query_count)大数据面试题(2)全文共26页,当前为第2页。大数据面试题(2)全文共26页,当前为...

    java 面试题 总结

    多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang....

    大数据高频面试题.pdf

    可以选择是否使⽤随机数进⾏替换,seed⽤于指定随机 数⽣成器种⼦ union(otherDataset) 对源RDD和参数RDD求并集后返回⼀个新的RDD intersection(otherDataset) 对源RDD和参数RDD求交集后返回⼀个新的RDD distinct(...

    mysql面试题-电商零售数据分析

    (1)编写SQL,计算商品“益达(Extra)木糖醇无糖口香糖冰凉薄荷约40粒56g*6瓶装办公室休闲零食(新旧包装随机发)”2021年1月的销售额。 (2)编写SQL,求2021年第四季度“大白兔”这个品牌在哪个平台的销量最好。...

    Java面试笔试题

    1写出你能记住的圆周率最多位2写出歌德巴赫猜想的内容3有一映射函数 y=f(x),已知f(1)=1,f(1.99)=1,现要求对x的n+1位四舍五入,试写出映射函数4如果你现在要开发一种语言,现要设计一随机函数Random(m),可以去...

    超级有影响力霸气的Java面试题大全文档

    超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...

    java面试题

    DOM:处理大型文件时性能下降的非常厉害,适合对xml的随机访问 SAX:事件驱动型的xml解析方法,适合对xml的顺序访问 jsp常用动作? 答:jsp:include 引入一个文件 jsp:useBean 实例化JavaBean jsp:setProperty ...

    分享9个实战及面试常用Linux Shell脚本编写

    3)命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。 4)默认变量是全局的,在函数中变量local指定为局部变量,避免污染其他作用域。 5)有两个命令能帮助我调试脚本:set -e 遇到执行非0...

    isodata的matlab代码博客-machine-learning-interview:算法工程师-机器学习面试题总结

    随机森林(RF) GBDT k-means PCA降维 3、 深度学习 DNN CNN RNN 4、 基础工具 Spark Xgboost Tensorflow 5、推荐系统 二、数学相关 6、 概率论和统计学 7、 最优化问题 解答 一、机器学习相关 1、基本概念 1-1 简述...

    世界500强面试题.pdf

    第一篇 面试题 ................................................................................ 8 1.1. 简介 ................................................................................................

    随机生成10个不重复的0-100的数字(实例讲解)

    在面试时,面试官问了我一道js题:随机生成一个含有10个元素的数组,且元素为0-100的不重复的整数。当时的第一反应是for循环生成10个数字,但是可能会有重复的情况;进一步思考,需要对生成的数字进行验证才能放到...

    leetcode亲密字符串-leetcode-js:js算法学习笔记(leetcode刷题)

    面试题17.09.第K个数 859.亲密字符串 860.柠檬水找零 969.煎饼排序 621.任务调度器 递归与栈:解决表达式求值 面试题03.04.化栈为队 682.棒球比赛 844.比较含退格的字符串 946.验证栈序列 20.有效括号 1021.删除最...

    General-Knowledge-of-Stochastic-Processes

    本文旨在帮助准备电子系推研面试的同学大体复习随机过程的最基本常识,面试中张颢老师的难题深不可测,本文不予关注。##随机过程随机过程X(ω,t)是一个二元函数,ω∈Ω(样本空间),t∈R+ .t可以指时间(一维)也可以...

    leetcode比赛真题-algorithms-notes:总结了一些算法笔记和刷题指南,记录在这里。链接:https://xia-yu.me

    上随机解决问题,但这并不能帮助我掌握编码面试或从我梦想中的公司获得报价。 即使几个月前我也做过同样的问题,我也无法解决实际面试中的问题。 直到我开始以更结构化的方式组织问题,并学会从中总结出常见的模式。...

    剑指Offer(Python多种思路实现):斐波那契数列

    面试10题: 题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39  n=0时,f(n)=0 n=1时,f(n)=1 n>1时,f(n)=f(n-1)+f(n-2) 解题思路一:基于循环【推荐】 # 基于循环...

    超实用的jQuery代码段

    序3 最流行的前端面试题 XXIII 第1章 jQuery操作网页 1.1 显示或隐藏网页内容 1.2 切换页面的显示或隐藏 1.3 实现幻灯片式的淡入淡出效果 1.4 切换页面的淡入淡出 1.5 页面的滑动隐藏 1.6 切换页面的滑动 1.7 图片...

    net学习笔记及其他代码应用

    net的最近面试经典试题ASP.NET面试题集合 1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中...

Global site tag (gtag.js) - Google Analytics