伪随机数 如何能寻找到规律

发布网友 发布时间:2022-04-20 01:52

我来回答

9个回答

懂视网 时间:2022-04-20 06:13

找到伪随机数规律的方法有:

  1、直接法(Direct Method),根据分布函数的物理意义生成。缺点是仅适用于某些具有特殊分布的随机数,如二项式分布、泊松分布。

  2、逆转法(Inversion Method),假设U服从[0,1]区间上的均匀分布,令X=F-1(U),则X的累计分布函数(CDF)为F。该方法原理简单、编程方便、适用性广。

  3、接受拒绝法(Acceptance-Rejection Method):假设希望生成的随机数的概率密度函数(PDF)为f,则首先找到一个PDF为g的随机数发生器与常数c,使得f(x)≤cg(x),然后根据接收拒绝算法求解。由于算法平均运算c次才能得到一个希望生成的随机数,因此c的取值必须尽可能小。显然,该算法的缺点是较难确定g与c。

  因此,伪随机数生成器(PRNG)一般采用逆转法,其基础是均匀分布,均匀分布PRNG的优劣决定了整个随机数体系的优劣。下文研究均匀分布的PRNG。

热心网友 时间:2022-04-20 03:21

你要干什么?只要知道种子用相同算法就能复制整个序列

--

利用函数。类似把随机数的结果平方再除以100就可以增加比较小的数的出现概率。

--

#include <math.h>
#include <stdlib.h>
#include <stdio.h>

float wrapped_rand(float exp, float max)
{
return pow(rand() / (float)RAND_MAX, exp) * max;
}

void main()
{
for (int i = 0; i < 100; i++)
{
printf("%.12f\n", wrapped_rand(100, 100));
}
}

当然这只是个例子,缺点是在0附近集中速度太快。

热心网友 时间:2022-04-20 04:39

可以啊,小意思。用极坐标系就OK了。
一般的随机是垂直坐标系上的x,y的均布,把x,y换成极坐标系里面的角度和半径,得到点的x,y值就是非均布的了。
算法思路是这样的,怎么实现10以下80%我就懒得细想了。

热心网友 时间:2022-04-20 06:14

假设随机数在 1-10000之间(若不是, 可乘或除以一个系数), 你可以判断它的值: 若小于8000, 则将其除以800. 否则分配给11-100之间.

int myrand()
{
int randvalue=rand();
radnvalue/=...; //使其在1-10000之间.
if(randvalue < 8000)
return randvalue/800;
else
..
}

热心网友 时间:2022-04-20 08:05

无论如何,都应该知道种子,然后用这个种子得到一个伪随机序列,下一次,只要种子相同,就会得到相同的序列。不然,只能不停的让序列前进,直到得到希望的数字为止。

热心网友 时间:2022-04-20 10:13

听说伪随机数是用公式计算出来的.故若取相同种子,得到的数是一样的.

热心网友 时间:2022-04-20 12:38

这个百分比可以自己用程序来控制的吧!

热心网友 时间:2022-04-20 15:19

很难.除非你在过滤一下.

热心网友 时间:2022-04-20 18:17

感觉不能。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com