打印

无重复随机数产生算法

[复制链接]
4233|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aolin|  楼主 | 2009-5-4 11:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
huangqi412| | 2009-5-4 11:41 | 只看该作者

定时器值做种子。。。

使用特权

评论回复
板凳
aolin|  楼主 | 2009-5-4 11:56 | 只看该作者

种子是一定要的

但结果不重复才是算法中最关键的部分

使用特权

评论回复
地板
ljm810010| | 2009-5-4 12:52 | 只看该作者

什么叫无重复?产生256次,必然至少有一个重复。

使用特权

评论回复
5
HWM| | 2009-5-4 12:58 | 只看该作者

伪随机数只有“统计”意义,即,它的各统计参数符合其分

使用特权

评论回复
6
linqing171| | 2009-5-4 13:12 | 只看该作者

如果只依赖算法,似乎早晚会循环回来的。

如果只依赖算法,似乎早晚会循环回来的。
贴个MFC里面的随机数发生器,多少循环不知道,如果种子选的好的话,应该远超64k没有问题的。

unsigned long holdrand=1     ;
void SRand(int seed)
{
  holdrand=seed;
}
char rand()
{
  holdrand=holdrand   *   214013 +   2531011;
  return (holdrand >>16 ) & 0x7f;
}

使用特权

评论回复
7
awey| | 2009-5-4 13:32 | 只看该作者

用稳压二极管产生白噪声,放大后,经8位AD转换

出来的就是个无规律的随机数。

使用特权

评论回复
8
badbird1234| | 2009-5-4 13:32 | 只看该作者

LS能否为我这种菜鸟分析一下

LS和各位达人能否为我这种菜鸟分析一下
  holdrand=holdrand   *   214013 +   2531011;
为什么用这个算式和参数呀
谢谢了

使用特权

评论回复
9
aolin|  楼主 | 2009-5-4 13:50 | 只看该作者

关于“无重复”的解释

“无重复”的解释:
0-255共256个数,要求产生256个0-255中的随机数,这256个数中不能有重复的现象。

最笨的方法:先取一个0-255中随机数,再取第二个,若在前面已经出现,继续取,直到取到一个前面没取到过的,做为第二个随机数,第3到第256个也以相同的方法去处理,这样就能得到256个不重复的随机数了,但这个方法估计在实际应用中特别是单片机中没有人会使用!

使用特权

评论回复
10
HWM| | 2009-5-4 13:55 | 只看该作者

若做统计分析(实为验证),伪随机数足已。

而且只有伪随机数才是“理论”上完全符合理想分布(如0~1均匀分布)的随机数。另外只有此分布才能产生其他的各种理想分布(如正态分布等)。

采用物理方法产生的随机数虽然可谓“真”随机数,但其统计意义不大。为何?那是因为无法知晓其“真正”的分布,拿它来做“随机数源”进行统计理论分析严格上还不如伪随机数。

使用特权

评论回复
11
因特网用户| | 2009-5-4 14:28 | 只看该作者

可以百度一下 伪随机多频广谱信号

使用特权

评论回复
12
mugenwon| | 2009-5-4 16:21 | 只看该作者

...

无重复看来是0~255,取256次,所有数都取1次的意思吧?
9楼的方法,有人用,而且很好用。但随机数我个人还是喜欢用有可能重复的,这才算真的随机。

使用特权

评论回复
13
aolin|  楼主 | 2009-5-5 08:25 | 只看该作者

正是LS理解的这个意思

正是LS理解的这个意思。
这个与其称作为随机数,不如叫随机取一个打乱过的次序。
这个过程的目的就是要随机取一个数据排列次序

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

396

帖子

2

粉丝