Summary: rand5构造rand7】的更多相关文章

给一个方法,比如 rand5(), 它能够等概率生成 1-5 之间的整数. 所谓等概率就是1,2,3,4,5 生产的概率均为 0.2 .现在利用rand5(), 构造一个能够等概率生成 1- 7 的方法. 这里有两个特别重要的点,一是 如果 rand5() + rand5(), 我们能够产生一个均匀分布的1 - 10 吗? 答案是否定的.比如对于 6来讲(4+2, 2+4, 3+3),它被生成的生成的概率比1 (1+0,0+1)要大. 第二个点就是我们不可能用rand5()直接产生 1- 7 的…
http://www.cnblogs.com/dwdxdy/archive/2012/07/28/2613135.html 利用rand5()产生rand7().rand5()产生1到5的整数,rand7()产生1到7的整数. 解决思路与上述的练习题是一样的.利用rand5()产生的一个整数空间,然后将其映射到[1,7]的整数空间上,映射时保证概率相等,且等于1/7. 下面介绍几个有意思的实现. 1.利用预置数组 该方法简单,易理解,但是不具扩展性,需要额外存储空间. int rand7() {…
题目:已知rand5()函数能随机等概率的生成0, 1, 2, 3, 4,利用rand5()函数编写一个rand7()函数实现相似的功能. 分析:其实就是利用rand5()组合成一个更大范围的数,之后利用求余(%)再映射到0-6之间. Java代码: int rand7() { //已知rand5()产生0,1,2,3,4,求rand7() int a; do { a = 5*rand5() + rand5(); //产生0-24 } while (a > 20); //只取0-20 retur…
rand5表示生成随机数1,2,3,4,5 rand7表示生成随机数1,2,3,4,5,6,7 要通过rand5构造rand7现在可能没有什么思路,我们先试着用rand7生成rand5 rand7生成rand5很简单,把6和7排除掉就是rand5了,也就是当随机到大于5的时候,就再随机一次,直到小于等于5 代码写起来很容易 public static int rand5(){ Random ra =new Random(); int result = ra.nextInt(7)+1; while…
题目: 给定一个函数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的概率. 正确的方法是利用rand…
多个线程同时访问共享数据时,线程同步能防止数据损坏.之所以要强调同时,是因为线程同步问题实际上就是计时问题. 不需要线程同步是最理想的情况,因为线程同步一般很繁琐,涉及到线程同步锁的获取和释放,容易遗漏,而且锁会损耗性能,获取和释放锁都需要时间,最后锁的玩法就在于一次只能让一个线程访问数据,那么就会阻塞线程,阻塞线程就会让额外的线程产生,阻塞越多,线程越多,线程过多的坏处就不谈了. 所以可以避免线程同步的话就应该去避免,尽量不要去使用静态字段这样的共享数据. 类库和线程安全 .net类库保证了所…
1. tf.reuse_default_graph() # 对graph结构图进行清除和重置操作 2.tf.summary.FileWriter(path)构造writer实例化,以便进行后续的graph写入 参数说明:path表示路径 3.writer.add_graph(sess.graph) 将当前参数的graph写入到tensorboard中 参数说明:sess.graph当前的网络结构图 4. summ = tf.summary.merge_all() # 将所有的summary都添加…
问题本身很明确,但不知道起个什么题目好,姑且先这么说吧. 问题描述:现在有一个叫做Rand5的函数,可以生成等概率的[0, 5)范围内的随机整数,要求利用此函数写一个Rand3函数(除此之外,不能再使用任何能产生随机数的函数或数据源),生成等概率的[0, 3)范围内的随机整数. 我第一次遇到这个问题的时候,着实犯了一回傻,自以为是地证明了这个题目是无解的.其实从概率的角度来看,题目的要求就是,利用一个1/5的概率源,通过某种方式产生出1/3的概率输出.我们都知道,概率运算法则有加法和乘法,而在我…
问题:有函数rand5(),它能够等概率生成[0,5)之间的整数.由rand5()构造rand(n)使其能够等概率生成[0,n)之间的整数. 思路1:有rand5()先生成等概率生成0和1的rand01(),有了rand01就可以像上一篇文章一样生成rand(n). 思路2:rand5和rand01有何区别?一个是生成01,一个是生成01234,(一个以2为基,一个以5为基),既然rand01能用来构造rand(n),那么rand5也可以通过同样的原理得到rand(n). Java代码: //用…
randA()表示可以随机生成1--A的整数 rand7()生成rand5() int Rand5(){ int x = ~(1<<31); // max int while(x > 5) x = Rand7(); return x; } 证明:我们要的1可能是第一次调用Rand7时产生,也可能是第二次,第三次,-第n次. 第1次就生成1,概率是1/7:第2次生成1,说明第1次没生成1到5间的数而生成了6,7, 所以概率是(2/7)*(1/7),依次类推.生成1的概率计算如下: P(x=…