作者reader (读者)
看板W-Philosophy
标题Re: [问题] 关於乱数....
时间Tue Feb 6 01:54:39 2007
※ 引述《reader (读者)》之铭言:
: → ericpony:可能要晚一点才有时间完整回文, 但在这之前还是先指出一 02/05 20:06
: → ericpony:个最明显的问题: 您文中所定义的"重复性"性质, 对於真正 02/05 20:07
: → ericpony:的随机数列而言,既不是充分条件也不是必要条件.(对於pi产 02/05 20:11
: → ericpony:生的数列我就不清楚了,要再查查)如果S是无限长的随机数列 02/05 20:12
: → ericpony:那麽对於任意有限N, 此数列的 0~(N-1) 区段和 N~(2N-1) 02/05 20:14
: → ericpony:相同的机率恒不为零, 也就是说, 你永远不知道一个随机数 02/05 20:18
: → ericpony:列自下一步起是不是会开始重覆它自己(虽然机率极小)... 02/05 20:19
你说的没错,但传统方法最大的问题就是状态数有限,在一定的数列之後,
必然产生完全重覆的数列。这算是我表达不精确的问题。
: → ericpony:另一方面, 01001000100001000001...这个正规数列并不随机 02/05 20:20
: → ericpony:但是它循环的周期为无限大(即不重覆,依您文中的定义) 02/05 20:22
对,所以并不是每一个无理数都可以用来做成随机数列。现在普遍都还是使用
圆周率或是自然对数的底数有相关性的方法。
: 推 ericpony:另外,数论里多的是规则有限但结果无法预测的数列, 就您CS 02/05 20:28
: → ericpony:的训练应该也知道, "判断一个程式所产生的序列是否循环" 02/05 20:31
: → ericpony:是等价於停机问题(即使您有完整的程式码!) 这个事实和该 02/05 20:31
: → ericpony:碎碎念了一堆,简单说就是: 我觉得, 就您文中所提出的论证 02/05 20:36
: → ericpony:并不足以证明以pi数列为种子的乱数产生法比传统方法优越 02/05 20:37
: → ericpony:程式使用的是"传统乱数方法"还是"新方法"无关~ (补漏句 02/05 20:42
现在的问题是,传统的方法,例如 standard C library 的 rand() 主要几种
实作方法,都是在 2^n (一般 n 为 32) 个数之後「必定」重覆。若是在 open
design 的状况下,破解的可能性就会大得许多。
因此在使用一定次数之後,就得重设种子,而重设种子往往也只是打乱部分的
序列,如同将桥牌分成两堆,後堆改成前堆,然後继续发牌,其中的有序性仍
清晰可见。
无论是网路安全或人工智能研究,都不会觉得一个容易被分析破解、状态数并
不多的乱数产生程式会是较好的选择。
当然在工程上,由於系统限制,两种方法有可能是等价的,例如现在最常用的
arc4random(), 理论虽是用新的方法,实作上则是一个约有 2^1700 个状态,
较为强力的乱数产生程式,而不是一个状态数可极大化的系统,於是我们确实
可用传统方法制作出等价的系统。
--
※ 编辑: reader 来自: 59.125.136.160 (02/06 02:16)