Questions tagged «pseudo-random-generators»

关于确定性地生成具有随机序列随机属性的数字序列的算法的问题。

6
为什么我们不合并随机数生成器?
在许多应用中使用伪随机数生成器。因此人们实施了他们认为很棒的方法,后来才发现它有缺陷。最近,JavaScript随机数生成器发生了这种情况。RandU也早得多。还存在诸如Twister之类的不当初始播种的问题。 我找不到任何人将两个或多个生成器族与通常的xor运算符结合在一起的示例。如果有足够的计算机功能来运行java.SecureRandom或Twister实现之类的东西,为什么人们不将它们结合起来?ISAAC xor XORShift xor RandU应该是一个很好的例子,在这里您可以看到单个发电机的弱点正在被其他发电机减轻。由于内在算法完全不同,因此还应有助于将数字分配到更高的维度。是否有一些不应该将它们结合在一起的基本原则? 如果您要构建一个真正的随机数生成器,人们可能会建议您结合使用两个或多个熵源。我的例子不同吗? 我排除了几个线性反馈移位寄存器来自同一家族的共同示例。

3
为什么Mersenne Twister被认为是很好的?
Mersenne Twister被广泛认为是很好的。哎呀,CPython消息人士说,它“是现有的经过最广泛测试的生成器之一”。但是,这是什么意思?当被要求列出该生成器的属性时,我所能提供的大多数内容都是不好的: 它是庞大而僵化的(例如,无搜索或多个流), 尽管状态规模庞大,但它未能通过标准的统计测试, 它在0左右有严重问题,表明它对自己的随机性很差, 不太快 等等。与诸如XorShift *的简单RNG相比,它也无可避免地变得复杂。 因此,我寻找一些信息,以了解为什么有人认为这很好。原始论文对“超天文学”时期和623维均匀分布发表了很多评论,他说 在许多已知的测量方法中,基于较高尺寸均匀性的测试(如下面所述的光谱测试(参见Knuth [1981])和k分布测试)被认为是最强的。 但是,对于此属性,发电机会被足够长的计数器打败!这没有评论本地分布,这是您实际上在生成器中关心的(尽管“本地”可能意味着各种事情)。甚至CSPRNG都不在意这么长时间,因为这并不重要。 论文中有很多数学,但据我所知,这实际上与随机性无关。几乎所有对此的提及都会迅速跳回这些原始的,基本上无用的主张。 似乎人们以牺牲较旧,更可靠的技术为代价而跳上了潮流。例如,如果您将LCG中的单词数增加到3(比Mersenne Twister的“仅624”少得多)并在每次通过时输出最高单词,则它会通过BigCrush(TestU01测试套件的更难部分)),尽管Twister失败了(PCG纸,图2)。鉴于此,以及证据不足,我能够在支持梅森倍捻机的发现,是什么做的原因关注过其他的选择青睐呢? 这也不是纯粹的历史。有人告诉我,Mersenne Twister在实践中至少比PCG random更为有效。但是用例是否如此清晰,以至于它们可以比我们的测试组合做得更好?一些谷歌搜索暗示他们可能不是。 简而言之,我想知道Mersenne Twister在其历史背景或其他方面如何获得广泛的正面声誉。一方面,我显然对它的质量表示怀疑,但另一方面,很难想象它是完全随机发生的。

7
PRNG可以用来魔术压缩东西吗?
这个想法是我小时候学习编程的想法,并且是第一次接触PRNG。我仍然不知道它有多现实,但是现在有了堆栈交换。 这是14岁的人使用的一种出色的压缩算法方案: 取一个PRNG并用种子s进行种子处理,以获得长序列的伪随机字节。要将序列发送给另一方,您只需要传达PRNG的说明,适当的种子和消息的长度。对于足够长的序列,该描述将比序列本身短得多。 现在,假设我可以反转该过程。如果有足够的时间和计算资源,我可以进行蛮力搜索,找到可以产生所需序列的种子(和PRNG,或者换句话说:一个程序)(比方说,一张有趣的猫调皮的照片)。 在生成足够多的比特之后,PRNG会重复,但是与“典型”周期相比,我的消息非常短,因此这似乎不是一个很大的问题。 Voila,一种有效的压缩数据方式(如果是rube-Goldbergian)。 因此,假设: 我希望压缩的序列是有限的,并且事先知道。 我的现金或时间并不短缺(只要两者都需要有限的金额) 我想知道: 该计划背后的推理是否存在根本缺陷? 分析这类思想实验的标准方法是什么? 摘要 通常,好的答案不仅可以弄清楚答案,而且可以弄清楚我真正要问的是什么。感谢大家的耐心配合和详细的答案。 这是我对答案的第n次尝试: PRNG /种子角度没有任何作用,只不过是生成所需序列作为输出的程序。 信鸽原理:长度大于k的消息比长度小于等于k的(消息生成)程序多。因此,某些序列根本不能成为比消息短的程序输出。 值得一提的是,程序(消息)的解释程序必须事先确定。它的设计确定了接收到长度为k的消息时可以生成的(小)消息子集。 至此,原始的PRNG想法已经死了,但是至少还有一个最后的问题需要解决: 问:我能幸运地发现我的长(但有限)消息恰好是长度小于k位的程序的输出吗? 严格来说,这不是偶然的问题,因为必须事先知道所有可能的消息(程序)的含义。要么是 <k位的一些信息的含义或它不是。 如果我随机选择一个随机消息,该消息>> k位(为什么?),无论如何我都将拥有使用少于k位发送消息的可能性,并且几乎可以肯定无法发送它完全使用不到k位。 OTOH,如果我从少于k位的程序输出中选择大于等于k位的特定消息(假设有这样的消息),那么实际上我是在利用已经传输到接收方(解释程序的设计),它被视为已传输消息的一部分。 最后: 问:熵 / kolmogorov复杂度业务到底是什么? 最终,两者都告诉我们与(简单的)信鸽原理告诉我们的一样,我们可以压缩的程度:也许一点也没有,也许有些,但是肯定不如我们想象的那么多(除非我们作弊)。

2
用少于N个随机位来模拟2 ^ N中的1的概率
说我需要模拟以下离散分布: P(X=k)={12N,1−12N,if k=1if k=0P(X=k)={12N,if k=11−12N,if k=0 P(X = k) = \begin{cases} \frac{1}{2^N}, & \text{if $k = 1$} \\ 1 - \frac{1}{2^N}, & \text{if $k = 0$} \end{cases} 最明显的方法是绘制NNN随机位,并检查它们是否均等于000(或111)。但是,信息论说 S=−∑iPilogPi=−12Nlog12N−(1−12N)log(1−12N)=12Nlog2N+(1−12N)log2N2N−1→0S=−∑iPilog⁡Pi=−12Nlog⁡12N−(1−12N)log⁡(1−12N)=12Nlog⁡2N+(1−12N)log⁡2N2N−1→0 \begin{align} S & = - \sum_{i} P_i \log{P_i} \\ & = - \frac{1}{2^N} \log{\frac{1}{2^N}} - \left(1 - \frac{1}{2^N}\right) \log{\left(1 - \frac{1}{2^N}\right)} …


1
为线性反馈移位寄存器选择抽头
我对如何为线性反馈移位寄存器选择抽头感到困惑。 我有一个图,它示出了具有连接多项式的LFSR 。五个阶段​​标记为:R 4 ,R 3 ,R 2 ,R 1和R 0,抽头从R 0和R 3出来。C(X)= X5+ X2+ 1C(X)=X5+X2+1C(X) = X^5 + X^2 + 1R 4 ,R 3 ,R 2 ,R 1R4,R3,R2,R1R4, R3, R2, R1[R 0R0R0[R 0R0R0R 3R3R3 如何确定这些水龙头?当我得到一个连接多项式但没有图时,我如何知道应该对哪些值进行异或?

1
证明Nisan-Wigderson伪随机数生成器的安全性
让是部分(米,ķ ) -设计和˚F :{ 0 ,1 } 米 → { 0 ,1 }是布尔函数。该尼散-Wigderson发生器ģ ˚F:{ 0 ,1 } 升 → { 0 ,1 } Ñ定义如下:S={Si}1≤i≤nS={Si}1≤i≤n\cal{S}=\{S_i\}_{1\leq i\leq n}(m,k)(m,k)(m,k)f:{0,1}m→{0,1}f:{0,1}m→{0,1}f: \{0,1\}^m \to \{0,1\}Gf:{0,1}l→{0,1}nGf:{0,1}l→{0,1}nG_f: \{0,1\}^l \to \{0,1\}^n Gf(x)=(f(x|S1),…,f(x|Sn))Gf(x)=(f(x|S1),…,f(x|Sn))G_f(x) = (f(x|_{S_1}) , \ldots, f(x|_{S_n}) ) 为了计算G f的第个比特,我们将x的比特与S i中的索引相乘,然后将f应用于它们。iiiGfGfG_fxxxSiSiS_ifff 假设为1fff对于大小为nc的电路,其中c为常数。我们如何证明Gf为(nc1nc1nc\frac{1}{n^c}ncncn^ccccGfGfG_f伪随机数生成器?(nc2,2nc)(nc2,2nc)(\frac{n^c}{2}, \frac{2}{n^c}) 定义: 的部分 -设计是子集的集合小号1,... ,小号Ñ ⊆ [ …

4
PRNG用于精确生成n个设置位的数字
我目前正在编写一些代码来生成二进制数据。我特别需要生成具有给定数量的设置位的64位数字;更准确地说,该过程应取并返回一个伪随机的64位数字,其中恰好位设置为,其余设置为0。0&lt;n&lt;640&lt;n&lt;640 < n < 64nnn111 我当前的方法涉及以下内容: 生成一个伪随机数64。kkk 计算的位数,并将结果存储在。kkkbbb 如果,输出 ; 否则转到1。b=nb=nb = nkkk 这行得通,但看起来并不优雅。是否有某种PRNG算法可以比这更优雅地生成带有设置位的数字?nnn

4
生成随机DFA的好的算法是什么?
我正在生成随机DFA,以在其上测试DFA减少算法。 我现在使用的算法如下:对于每个状态,对于字母中的每个符号,将到某个随机状态。每个状态具有成为最终状态的相同概率。Ç δ (q ,C ^ )qqqCccδ(q,c )δ(q,c)\delta (q, c) 这是生成无偏DFA的好方法吗?另外,此算法不会生成调整DFA(没有过时状态的DFA),因此我想知道是否有更好的方法来生成随机DFA,以某种方式确保它是调整过的?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.