生成a到b之间的随机数
来源:互联网 发布:小米手机数据误删恢复 编辑:程序博客网 时间:2024/05/16 05:50
现在有一个函数rand(0,1)可以随机生成0或者1,即生成0的概率是1/2,生成1的概率也是1/2.现在要求用这个函数实现函数rand(a,b):生成a和b之间的随机数(包含a和b),并分析时间复杂度~
取值c = b-a作为一个整数,找到不小于数c的第一个2的n次方(例如,如果c为5,就是2的3次方是8;c为63就是2的6次方64) 之后利用rand(0,1),分别每次产生这个2^n的数的每一位,这样的方法可以随机的保证在0-2^n-1以等概率产生随机数,如果产生的这个数randNum在[0,c]的范围内,返回a+randNum;如果产生的数在(c,2^n)之间,则重新生成一个随机数直到落入[0,c]的范围。
一般是已知一个生成1-m随机数的函数rand(1, m),要求一个生成1-n随机数的函数rand(1, n),n往往与m互质,一般的做法是先将rand(1, m)扩大为一个生成1-m^k随机数的函数rand(1, m^k),使得m^k >= n,然后再调用函数rand(1, m^k)。如果其生成的数在[1 n]之间,直接返回作为结果,如果其生成的数在(n, m^k], 那么就进入一个反复调用rand(1, m^k)的循环,直到取得的随机数落在[1 n]为止。该算法在最差情况下的时间复杂度为无穷大,但其最差情况发生的概率也是极其小的。
- rand(1, m^k)
- {
- //调用rand(1, m)达到目的
- return result // 位于[1, m^k]之间
- }
- rand(1, n)
- {
- do
- {
- result = rand(1, m^k);
- }
- until (result in range[1, n])
- return result;
- }
- 生成a到b之间的随机数
- 产生a到b之间均匀分布的随机数
- C++取a到b之间的随机数
- 产生a到b的随机数
- Golang:生成n个从a到b不重复的随机数
- 生成A-B之间随机数函数(含A,B)C语言
- Objective-C中取a-b之间的随机数方法
- a到b之间的整数求和
- 利用Java API生成50到100之间的随机数
- 生成0到1之间随机数的C代码
- C++生成0到1之间的随机数
- 生成区间[a,b)中的随机数
- 求A到B之间完全平方数的个数
- 【Java笔记】随机生成a到b的整数
- 使用Random对象生成n个[a,b]区间的随机数
- 生成一组-0.1到0.1之间的随机数,且总和为0
- 取00000000到99999999 之间的随机数
- 获取0到max之间的随机数
- ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第五篇:MVC整合Ajax
- 半小时精通正则表达式-精华版
- 2013.6.23 阿里实习面试 悲惨结局
- WPF绘制基本形状
- 安卓中的四大组件_BroadcastReceiver
- 生成a到b之间的随机数
- 经典C#书籍
- C++中的文件输入/输出
- ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第六篇:拦截器
- Linux使用串口与Windows传输文件
- 【第五章】Spring表达式语言 之 5.1 概述 5.2 SpEL基础 ——跟我学spring3
- ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第七篇:闲话ASP.NET MVC
- Oracle数据库逻辑增量备份之exp/imp
- 【第五章】Spring表达式语言 之 5.3 SpEL语法 ——跟我学spring3