算法导论5.1-1
参考博客
http://blog.csdn.net/effenberg11/article/details/5976838
http://qianggezhishen.bokee.com/viewdiary.43964492.html
博客中算法
1、把要生成的数标记为 a, a+1, a+2,..., b-a+1,…,b-1,b
2、取最小的 m,使得 2^m >= n
3、通过随机生成 0,1 的函数生成一个 m 比特整数(随机生成每一位),这样能随机生成 [a, 2^m) 内的整数。
4、随机生成一个 [a,2^m) 中的整数,如果这个数大小在 [a, b] 内,则取这个数为结果。如果这个数在 [a, b] 外,则丢弃它,重新生成一个。
看着有点绕。重写一下。。
1、通过Random(0,1)生成Random(a,b),实际上我们生成random(0,b-a)+a 就可以了,然后问题就转换为了Random(0,1)生成Random(0,n), 这里n=b-a
2、由于n可能不是2的整数幂,要找到最小的m使 2^m >n
int getM(int n)
{
m =0;
while(n>=2)
{
n=n/2;
m++;
}
if(pow(2,m)<n)
m++;
return m;
}
然后生成随机数0~2^m,可以分治法递归也可以二进制按位计算(推荐),如果随机数result落在0~n之间,则随机数生成成功,如果随机数落在n+1~2^m,则重新生成随机数。一次成功生成随即书的概率为n/2^m。令p=n/2^m所以时间复杂度o=p+p(1-p)*2+p(1-p)^2*3+....+np(1-p)^(n-1)=1/(1-p) (等比数列相关问题,高中数学加一点极限问题,不解释)
上述可能计算有误,思想应该是没问题的~~
分享到:
相关推荐
`random.uniform(a, b)`函数返回一个在[a, b]或[b, a]区间内的随机浮点数。具体来说,如果a < b,则结果范围为[a, b];如果a > b,则范围为[b, a]。这意味着无论a和b的大小顺序如何,函数都将返回两个参数之间的随机...
Python中的random模块...random.random()用于生成一个0到1的随机符点数: 0 <= n < 1> b,则生成的随机数n: a <= n <= b。如果 a <b, 则 b <= n <= a。 print random.uniform(10, 20) print rando
`numpy.random.randn(a, b)`函数生成一个a行b列的二维数组,数组中的每个元素都服从标准正态分布(均值为0,标准差为1)。例如: ```python data = np.random.randn(5, 4) ``` 这将创建一个5行4列的标准正态分布的...
使用randint(a, b)方法可以生成指定范围内的随机整数,包括b。例如,使用random.randint(0, 100)可以生成一个在0到100之间的随机整数。 2. 生成随机数 使用randrange(start, stop=None, step=1)方法可以生成一个...
random是用于生成随机数的,我们可以...= n < 1 u7528于生成一个指定范围内的随机浮点数,生成的随机整数a于生成一个指定范围内的整数,a为下限,b为上限,生成的随机整数a<=n b;若a=b,则n>b,报错 •random.randran
1. `random.randint(a, b)`:生成a和b之间(包括a和b)的一个随机整数。 2. `random.random()`:返回0到1之间(不包括1)的随机浮点数。 3. `random.uniform(a, b)`:返回a和b之间(包括a和b)的随机浮点数。 4. `...
该方法用于生成0到1之间(不包括1)的随机浮点数。这个方法是许多其他随机数生成方法的基础。 **示例代码:** ```python import random print("random:", random.random()) ``` **输出结果:** ``` random: 0....
1. `random.randint(a, b)`:这个函数会返回a和b之间(包括a和b)的一个随机整数。a和b可以是任意整数,它们定义了随机数的范围。 2. `random.random()`:这个函数返回一个0到1之间的浮点数,其中0包括在内,但1不...
- **功能**: 生成0到1之间的随机浮点数(左闭右开区间),即结果包括0但不包括1。 - **示例代码**: ```python import random print("random:", random.random()) # 输出可能为: random: 0.5714025946899135 `...
`random.random()`函数则是生成一个0到1之间的浮点数,其中0包括在内,但1不包括。这个浮点数是基于当前系统时钟的随机性生成的,因此每次调用都可能不同。 对于需要在某个区间内生成浮点数的情况,`random.uniform...
一个典型的例子是线性同余生成器(Linear Congruential Generator),它通过以下公式迭代产生随机数序列:x(n+1) = (a * x(n) + b) mod m,其中参数a、b和m必须精心挑选以获得最长的序列。 在安全性和加密的应用中...
1. **导入模块**:首先导入 `random` 和 `time` 模块,其中 `random` 用于生成随机数,`time` 用于计算程序运行时间。 2. **定义常量**:`DARTS` 定义为抛撒点的数量,这里设为 1,000,000。 3. **初始化计数器**:...
例如,`random.randint(a, b)`函数可以生成a和b之间(包括a和b)的一个随机整数。如果需要生成浮点数,可以使用`random.uniform(a, b)`,它会返回a和b之间的一个随机浮点数。 2. **交互式编程**:这个项目涉及到与...
- **单参形式**:`Random.Next(maxValue)`返回0到maxValue-1之间的随机整数。 - **双参形式**:`Random.Next(minValue, maxValue)`返回minValue到maxValue-1之间的随机整数。 示例代码: ```csharp Random random =...
4. `random.uniform(a, b)`:返回a和b之间(包含a和b)的浮点数,比`random.random()`更灵活,因为它可以指定区间的上下限。 5. `random.choice(seq)`:从序列`seq`中随机选取并返回一个元素。这在需要从列表、元组...
除了`Random`类提供的基本方法,C#还提供了`Math`类中的`Random`方法,它返回的是0到1之间(不包括1)的浮点数,具有14位精度。这个浮点数可以用于生成更精确的随机浮点数。例如: ```csharp double randomDouble =...
这通常通过调用编程语言提供的随机数生成函数实现,例如在Python中可以使用`random.randint(a, b)`来生成[a, b]范围内的随机整数。 2. **素数判断算法**: - **暴力枚举法**:最简单的判断方法是对每个随机整数i,...
这个函数用于生成一个0到1之间的随机浮点数,包括0但不包括1.0。例如: ```python import random a = random.random() print(a) ``` 输出的将是0到1之间的一个随机浮点数。 2. **random.uniform(a, b)** 这...
char0='\u4eac\u6d25\u6caa\u6e1d\u5180\u8c6b\u4e91\u8fbd\u9ed1\u6e58\u7696\u9c81\u65b0\u82cf\u6d59\u8d63\u9102\u6842\u7518\u664b\u8499\u9655\u5409\u95fd\u8d63\u7ca4\u9752\u85cf\u5ddd\u5b81\u743c' ...