作者H45 (!H45)
看板ask-why
标题Re: [请益] 乱数表有没有规律??
时间Tue May 19 03:47:12 2009
※ 引述《StaticVortex ()》之铭言:
: ※ 引述《semop (semop)》之铭言:
: : 电脑可以产生合乎各种乱数检测方法、基本上无法逆推的 "真实乱数" (当然
: : 有人不同意这是 "真实" 乱数,但这是定义问题) 。
: : 只是一般来说,产生这种乱数的运算成本甚高。
: : 一个简单的例子是拿 pi 或 e 值或更不常见的无理数作为基准来制作乱数,
: : 它们没有常用的乱数方法的循环问题,永远不会重复产生资料。
: : 但除非是使用硬体方法,无法产生 "自然乱数" 。
: : 现在已经有 http://random.org 这类网站出现,免费公开地提供硬体产生的
: : 自然乱数,以後电脑程式使用的乱数资料应该会逐渐改以自然乱数为主了。
: : 所以大家以後就别说电脑所使用的乱数都一定是假乱数了。这观念要改一改。
: 对不起我是个门外汉,
: 如果避免了重复使用同一个乱数种子,
: 以及同一个乱数种子产生的乱数不要多过周期,
: 为什麽还需要这种自然乱数呢?
: 譬如以使用者的 input 时间间隔来取种子等等方式, 会遇到什麽限制吗?
: 使用伪乱数还会遇到什麽样的问题与困扰呢?
此问题应回归於:为何需要乱数?
因实际需求,有些乱数要求无法预测以提升系统安全
有些乱数要求分布足够均匀以提升搜寻效果
而有些乱数要求模拟真实环境以测试系统容错能力
基於以上需求,有些情况并非虚拟乱数可以满足
无法预测的特性乃自然乱数优於虚拟乱数的原因之一
在一般的情况下
虚拟乱数 (如 Java 内建 Random 类别所含演算法) 已经足以应付大部分的需求
好比说:随机从题库抓练习题、随机阅读网路的一篇文章
并不需要多麽难以预测的乱数源,只要虚拟乱数即可。
然而,需要绝对无法被猜到的情况下,自然乱数比虚拟乱数更加可靠
好比说:随机产生加密金钥、随机产生杂讯
自然乱数保证任何人都无法准确地猜到未来的乱数是多少
毕竟人类还没有能力预言这个世界的所有细节。
回到原发问者的问题:以使用者的 input 时间间隔来取种子的方式会遇到什麽限制?
假设使用者 input 时间间隔足够称为自然乱数 (不是由机器精准地以固定时间输入)
那麽,此种子即为自然乱数,後面的种种运算都是基於自然乱数的结果
此时间间隔不能说是伪乱数。
然而,如果将自然乱数再做一次虚拟乱数演算法所得到的数值,并不能称之为自然乱数
因为每一次运算所得到数值都与自然乱数相关
连续做多次虚拟乱数演算法所得到一连串数字彼此之间有关联
这些数字只能代表同一个自然乱数的衍生物
只要知道第一个数字是多少,後面的数字全部都可以推算出来
相对地,一连串真正的自然乱数是知道第一个数字,仍然无法推算出其他乱数是多少。
举例而言,你有办法知道另一个使用者 (人) input 的时间间隔吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.247.13
1F:→ HuangJC:乱数的乱度也很重要,以前拿到一个 0x00~0xFF 的乱数时,都 05/19 12:48
2F:→ HuangJC:自己任意扩展到 0x0000~0xFFFF 使用,老实说没数学底子,心 05/19 12:48
3F:→ HuangJC:里很虚,不知有没有造成某一区特别偏重的问题 05/19 12:48
4F:→ HuangJC:人输入的时间间隔也会受 clock 取样影响,出现数位化的边界 05/19 12:49
5F:→ HuangJC:当然如果能以量子级的取样,那我绝不担心 :P 05/19 12:50