根据已知随机数产生器,构造新的随机数产生器
来源:互联网 发布:域名dns更改 编辑:程序博客网 时间:2024/05/06 12:54
http://blog.csdn.net/nathan_wz/article/details/8045566
(1) 有一个函数fun能返回0和1两个值,返回0和1的概率都是1/2,问怎么利用这个函数得到另一个函数fun2,使fun2也只能返回0和1,且返回0的概率为0.3,返回1的概率为0.7。
(1) 有一个函数fun能返回0和1两个值,返回0和1的概率都是1/2,问怎么利用这个函数得到另一个函数fun2,使fun2也只能返回0和1,且返回0的概率为0.3,返回1的概率为0.7。
分析:
Nathan 16:42:59
随机生成长度为4的01串
0000~1111每个串出现的概率都为1/16
Nathan 16:44:28
如果生成的串为0000 0001 0010之一,则返回0
Nathan 16:45:45
如果生成的串为0011 0100 0101 0110 0111 1000 1001则返回1(共七个串)
否则,递归,重新来过
随机生成长度为4的01串
0000~1111每个串出现的概率都为1/16
Nathan 16:44:28
如果生成的串为0000 0001 0010之一,则返回0
Nathan 16:45:45
如果生成的串为0011 0100 0101 0110 0111 1000 1001则返回1(共七个串)
否则,递归,重新来过
代码:
- int func2()
- {
- int n = 0;
- int v0 = fun();
- int v1 = fun();
- int v2 = fun();
- int v3 = fun();
- n |= v0;
- n |= (v1<<1);
- n |= (v2<<2);
- n |= (v3<<3);
- if(n <= 2) return 0;//0, 1, 2
- else if(n <= 9) return 1;//3, 4, 5, 6, 7, 8, 9
- return func2();
- }
生成的四个数放到n的低四位上
0000 对应十进制数 0
0001 对应十进制数 1
...
1111对应十进制数15
16个串对应0 ~ 15共16个整数
0001 对应十进制数 1
...
1111对应十进制数15
16个串对应0 ~ 15共16个整数
(2)Use rand5(), to generate rand7() (with the same probability),类似解法
- int rand7()
- {
- v1 = rand5();
- v2 = rand5();
- t = v2*5 + v1;//看作两位5进制数,数值范围0~24之间 25 = 3 * 7 + 4
- t: [0, 2] return 0;
- t: [3, 5] return 1;
- t: [6, 8] return 2;
- t: [9, 11] return 3;
- t: [12, 14] return 4;
- t: [15, 17] return 5;
- t: [18, 20] return 6;
- t: [21, 24] return rand7();
- }
0 0
- 根据已知随机数产生器,构造新的随机数产生器
- 根据已知随机数产生器,构造新的随机数产生器(百度)
- 根据已知0-1均匀随机数产生器,构造新的随机数产生器
- 使用均匀分布随机数产生器构造任意分布的随机数产生器
- 随机数产生器
- 随机数产生器
- 随机数的产生器rand()和初始化随机数产生器函数srand()
- NS2中的随机数产生器
- NS-2随机数产生器
- ns2中随机数产生器
- 内核随机数产生器
- linux内核随机数产生器
- (转)随机数产生器RNG
- 随机数产生器RNG
- 随机数产生器RNG
- MSP430随机数产生器
- JVM随机数产生器
- C++随机数产生器
- C++程序内存泄露检测工具
- 241个jquery插件—jquery插件大全
- Perl——条件判断语句
- QUSTOJ1227:打印图形
- 使用jquery.qrcode生成二维码
- 根据已知随机数产生器,构造新的随机数产生器
- xcode c++ 编程错误
- 第十周项目1
- android settings源代码分析(2)
- iOS定位原理和使用建议
- win7下播放组播
- WUA API学习笔记
- socket: 揭开Socket编程的面纱
- Java通过浏览器请求头(User-Agent)获取 浏览器类型,操作系统类型,手机机型