`
fxly0401
  • 浏览: 147774 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(转)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 的数,不管你用加减乘除都不行。
所以,我们要构造一个更大的范围,使得范围里每一个值被生成的概率是一样的,而且这个范围是7的倍数,代码如下:
[java] view plaincopy
int rand7() {  
        while (1) {  
                int rand = 5 * (rand5() -1) ;  
                rand = rand + rand5() -1;  
                if (rand < 22 && ran > 0) {  
                             return rand%7 + 1 ;  
                }  
         }  
}
 
第三行代码产生一个均匀分布的 0, 5, 10, 15, 20的数。
第四行代码产生一个均匀分布的 0, 1, 2, 3, 4 的数。
相加以后,会产生一个 0到24的数,而且每个数(除0外)生成的概率是一样的。我们只取 1 - 21 这一段,和7 取余以后+1就能得到完全均匀分布的1-7的随机数了。
分享到:
评论

相关推荐

    genH.rar_LDPC 构造 MATLAB_Ldpc construction_ldpc码构造_构造LDPC_随机构造LD

    MATLAB提供了丰富的随机数生成函数,如rand和randi,可以用于此目的。 在MATLAB中构造LDPC码,通常包括以下几个关键步骤: 1. **定义参数**:确定码率、码长、校验矩阵的大小等参数。 2. **生成随机矩阵**:利用...

    MATLAB 特殊矩阵构造

    若用于构造矩阵,例如`repmat(linspace(-1,1,5),[3,1])`将生成一个3×5的矩阵,列向量[-1,0,1,0,-1]在每一行上重复。 7. **随机矩阵(Random Matrix)** `rand(m,n)`生成[0,1]区间内的均匀分布随机矩阵,`randn(m,...

    Pktlib的报构造器以及使用说明

    (5) CArp类:提供ARP协议的头部结构以及ARP报文的构造。 (6) CIp类:提供IP协议的头部结构以及IP报文的构造。 (7) CIcmp类:提供ICMP协议的头部结构以及IP报文的构造。 (8) CUdp类:提供UDP协议的头部结构以及IP报文...

    php 随机记录mysql rand()造成CPU 100%的解决办法

    这段代码会在循环中生成20个随机ID(可以根据实际情况调整数量),然后构造一个`IN`查询条件,只选择ID在列表中的记录,最后通过`LIMIT`限制返回的结果数量为10条。这种方法避免了对整个表进行排序,极大地提高了...

    Mysql构造百万条测试数据

    这里创建了一个函数 `rand_string`,该函数用于生成随机字符串。该函数使用了 WHILE 循环和 CONCAT 函数来生成随机字符串。 知识点:在 MySQL 中,也可以使用 CREATE PROCEDURE 语句创建存储过程。这里创建了一个...

    测试数据的构造与对拍1

    `rand()`函数则用于生成[0, RAND_MAX]之间的随机整数,其中RAND_MAX通常为32767。 在构造负数和实数时,可以通过对生成的随机正数进行适当的转换。例如,若需要[-n, n]范围内的随机整数,可以生成[0, 2n]的随机数,...

    如何用matlab构造一个这样的三维数组?

    C = rand(3, 4, 5); ``` ### 2. 使用`repmat`和`reshape` `repmat`函数可以将二维数组复制并堆叠成三维数组,而`reshape`用于改变数组的形状: ```matlab % 创建一个2x2的二维数组 D = [1 2; 3 4]; % 沿着第三个...

    Java 构造器原理及用法解析

    private Random rand = new Random(); // 构造器 public DiceRoller(int sides) { dice = sides; } } ``` 在这个示例中,构造器接受一个整数参数 `sides`,该参数用于设置骰子的面数。 Java 构造器是 Java ...

    某些特殊概率分布之间的相互变换1

    在离散分布部分,文章介绍了如何从一个可以均匀生成[0, 10)之间整数的随机数生成器`rand_10()`,构建出只产生[0, 7)之间整数的`rand_7()`。通过过滤掉大于7的随机数,我们可以确保生成的数值在[0, 7)范围内。为了...

    IT面试笔试--腾讯/创新工场/淘宝公司笔试面试题目总结及答案

    要利用rand7()构造出rand10(),关键在于如何均匀分布49种可能的结果到10个数字上。通过连续两次调用rand7(),并将结果映射到1到10的范围内,可以实现这个转换。具体实现中,当结果小于40时,将其转换为1到10的随机数...

    改进版贪吃蛇

    ①用构造函数构造贪吃蛇 snake(int der ,int CountNode,int Speed,int FoodLife ,bool Snake_life,int choise); //snake类的构造函数 ... head-&gt;snake_x = rand()%30+5; head-&gt;snake_y = rand()%20 +5;

    Numpy数组array和矩阵matrix转换方法

    在Numpy中,要将一个ndarray对象转换为matrix对象,可以使用numpy库中的mat函数,或者直接将ndarray对象传递给numpy.matrix的构造器。下面给出一个示例: ```python import numpy as np # 创建一个4x4的ndarray...

    matlab一维数组赋值到三维数组

    matlab 三维 数组首先了解下三维数组的构造:行*列*页,行*列就是我们通常了解的二维矩阵。下面是一个创建NumRow*NumCol*NumPage的赋值例子; rand('state',20140603); % 设定随机数种子 NumRow=4; NumCol=3; ...

    BA无标度网络模型构造算法

    ### BA无标度网络模型构造算法 #### 一、引言 无标度网络是一种复杂的网络结构,在实际应用中广泛存在,例如互联网、社会网络、生物网络等。这些网络的一个共同特点是它们的节点度分布遵循幂律分布。BA模型是由...

    PyTorch张量与操作1

    2. `torch.rand()`:此函数构造一个随机初始化的张量,元素取值范围在[0, 1)之间。例如: ```python x = torch.rand(5, 3) ``` 3. `torch.zeros()`:这个函数创建一个全零张量,可以指定数据类型。例如,创建一个5...

    2011年九月腾讯,创新工场,淘宝等公司最新面试三十题

    通过rand7()构造rand10() **知识点概述:** 给定一个只能产生1到7随机数的函数rand7(),构造一个能产生1到10随机数的函数rand10()。 **详细解析:** 为了解决这个问题,我们可以通过调用rand7()两次来获取一个...

    java学习笔记

    #### 对象类型转换:`Object`转`Boolean` 在某些情况下,我们需要将`Object`类型的对象转换为`Boolean`类型。这通常发生在处理泛型或动态类型的情况下。以下示例展示了如何进行转换: ```java public boolean ...

    035-关于floor()报错注入,你真的懂了吗?.pdf

    通过精心构造SQL查询,并利用错误消息来泄露信息,攻击者可以对数据库结构进行更深入的了解,甚至获取数据。 这篇文章还提到了测试环境的配置,使用了MySQL 5.5.53版本,利用了sqli-labs数据库,这是一个常用于SQL...

    第3章MATLAB矩阵分析与处理PPT学习教案.pptx

    例如,`rand`函数可以生成[0,1)之间均匀分布的随机数,如`rand(5)`创建一个5×5的随机矩阵。若需指定范围,可以像`20+(50-20)*rand(5)`这样设定。而`randn`则用于生成均值为0,标准差为1的正态分布随机矩阵,例如`...

Global site tag (gtag.js) - Google Analytics