[讨论]一般伪随机数和逼真伪随机数和真随机数

问题描述

背景:做一个抽奖程序,当时的随机算法没考虑太深,直接调用了newRandom().nextInt(totalNum);然后在测试的时候发现总共1000人左右,摇出的号很多集中在600-800之间,被人说黑幕,汗一个,查找资料,重新改随机数算法,总结如下,仅代表个人意见,欢饮大家讨论-------------------------------------java的Random类产生的随机数,不论是有种子还是无种子,不论是next()还是nextInt()还是...都是伪随机数,一般伪随机数,符合一定的正态分布,在某一个数字段内出现的概率会明显大于另一字段内的概率,我就很悲剧的遇上了,1000人抽选40人,600-800间的人大部分(抽了挺多次,都这样)后来改程序,自认为实现了逼真伪随机数,就是每次都以触发时的时间毫秒数为种子,产生一个newRandom(seed),再调用nextInt(totalNum),测试发现1000人抽选40的分布比较均匀了,基本每隔100的人数都差不多。逼真是因为多了一个不确定的时间毫秒数,从而使伪随即数也有了不确定性。至于真随机数,查找资料说是一般的计算机根本无法实现,因为一般计算机都用某种方法来创造一个随机数,这个方法肯定是确定的,所以肯定有个方法来推测出下一个随机数。(特殊计算机据说能实现)真正的随机数要实现,只能靠人脑,比如猜猜我现在想的1000内的数是多少,我在想的这个数才是真随机数。--------------------------------------欢饮各抒己见

解决方案

解决方案二:
有道理,计算机也是一个程序,是程序就一定会遵循某种规则,及时是产生随机数这样的东西也肯定是依靠了某种算法,只要知道了这个算法那么随机数可以推出来了
解决方案三:
该回复于2011-01-14 17:25:38被版主删除
解决方案四:
一般抽奖系统都应该有自己的抽奖算法,也就是逼真伪随机数,所以,免不了有幕后操作的
解决方案五:
你看一下Random的子类SecureRandom是否能满足你的要求?

时间: 2024-07-28 21:36:38

[讨论]一般伪随机数和逼真伪随机数和真随机数的相关文章

PHP的伪随机数与真随机数详解

  这篇文章主要介绍了PHP的伪随机数与真随机数详解,本文首先讲解了真随机数和伪随机数的相关概念,并给出了比用mt_rand()函数产生更好的伪随机数的一段例子代码,需要的朋友可以参考下 首先需要声明的是,计算机不会产生绝对随机的随机数,计算机只能产生"伪随机数".其实绝对随机的随机数只是一种理想的随机数,即使计算机怎样发展,它也不会产生一串绝对随机的随机数.计算机只能生成相对的随机数,即伪随机数. 伪随机数并不是假随机数,这里的"伪"是有规律的意思,就是计算机产生

PHP的伪随机数与真随机数详解_php技巧

首先需要声明的是,计算机不会产生绝对随机的随机数,计算机只能产生"伪随机数".其实绝对随机的随机数只是一种理想的随机数,即使计算机怎样发展,它也不会产生一串绝对随机的随机数.计算机只能生成相对的随机数,即伪随机数. 伪随机数并不是假随机数,这里的"伪"是有规律的意思,就是计算机产生的伪随机数既是随机的又是有规律的.怎样理解呢?产生的伪随机数有时遵守一定的规律,有时不遵守任何规律:伪随机数有一部分遵守一定的规律:另一部分不遵守任何规律.比如"世上没有两片形状

从Linux内核中获取真随机数【转】

转自:http://blog.csdn.net/adamska0104/article/details/45743087  内核随机数产生器 Linux内核实现了一个随机数产生器,从理论上说这个随机数产生器产生的是真随机数.与标准C库中的rand(),srand()产生的伪随机数不同,尽管伪随机数带有一定的随机特征,但这些数字序列并非统计意义上的随机数.也就是说它们是可重现的--只要每次使用相同的seed值,就能得到相同的伪随机数列.通常通过使用time()的返回值来改变seed,以此得到不同的

如何安装 pandom : 一个针对 Linux 的真随机数生成器

本教程只针对 amd64/x86_64 架构 Linux 内核版本大于等于 2.6.9 的系统.本文将解释如何安装 pandom,这是一个由 ncomputers.org 维护的定时抖动真随机数生成器. 简介 在现在的计算机状况下,比如说配置了固态硬盘(SSD)的个人电脑和虚拟专用服务器(VPS)的环境中,Linux 内核内置的真随机数发生器提供的吞吐量很低. 而出于各种不同的加密目的使得对真随机数的需求持续增长,从而使得这个低吞吐量问题在 Linux 实现中变得越来越严重. 在与上述相同的物理

如何安装pandom : 一个针对Linux的真随机数生成器

本教程只针对 amd64/x86_64 架构 Linux 内核版本大于等于 2.6.9 的系统.本文将解释如何安装 pandom,这是一个由 ncomputers.org 维护的定时抖动真随机数生成器. 简介 在现在的计算机状况下,比如说配置了固态硬盘(SSD)的个人电脑和虚拟专用服务器(VPS)的环境中,Linux 内核内置的真随机数发生器提供的吞吐量很低. 而出于各种不同的加密目的使得对真随机数的需求持续增长,从而使得这个低吞吐量问题在 Linux 实现中变得越来越严重. 在与上述相同的物理

真随机数要产生了 作为安全人员你知道这意味着什么吗?

真随机数很难生成.原因很简单:如果能够被生成一次,就也能够被重新生成:如果能够重新生成一个随机数,它就算不上随机的. 随机数是信息安全的核心要素,它是信息安全最强力的武器--加密的关键,算法使用随机数生成密钥.有一个困扰人们很久的问题:如果攻击者能够重现数字生成的随机算法,他就能重新生成密钥,更方便地破解加密.因此,人们在过去许多年中花费巨额资金,开发"真随机"技术. 位于奥斯汀的德克萨斯州立大学宣称有了突破.计算机科学教授大卫·查克曼 (David Zuckerman) 和研究生Es

matlab中的伪随机数原理

要说matlab的随机函数,就得先说说伪随机数.不过我也只能从matlab 应用的角度,从使用时的概念角度讲讲,梳理一下自己粗浅的理解.至于数理方面的,就没认真看过.真正的随机数是得通过现实世界中随机发生的物理事件来产生的,如放射性物质随机数发生器是通过某种放射性物质放射出的粒子数来获得随机数,还有通过电路产生高频噪声来获得随机数等.不过这种硬件随机数发生器价格都比较贵,如使用比较广泛的ComScire的随机数发生器价格在895美元,约合人民币6000元以上.但是很多软件,PC机都需要使用随机数

gjrand 3.4.2发布 C语言的伪随机数生成器

gjrand 是一个C语言的伪随机数生成器.伪随机数的意思是在这个随机数并不保证是真正的随机,只适合一些对随机要求不是很高的场合,例如游戏和类似用途,而不适合 一些对随机性要求非常高的应用,例如彩票和高安全性的随机码生成? gjrand 3.4.2有几个库函数的性能小调整.正常分布的测试程序有一些重大的更新. 下载地址:http://sourceforge.net/projects/gjrand/files/gjrand/gjrand.3.4.2/gjrand-3.4.2.tar.bz2/dow

gjrand v3.4.0发布 C语言伪随机数生成器

gjrand 是一个C语言的伪随机数生成器.伪随机数的意思是在这个随机数并不保证是真正的随机,只适合一些对随机要求不是很高的场合,例如游戏和类似用途,而不适合一些对随机性要求非常高的应用,例如彩票和高安全性的随机码生成. gjrand 3.4.0发行说明: gjrand is a programmer's library for pseudo-random numbers. gjrand library includes random number generator testing code