【发布时间】:2014-10-22 08:03:44
【问题描述】:
这是给我的一项特殊任务,我无法理解并且感到困惑。 我有以下随机数生成器类。
rng.py
#!/usr/bin/env python
class rngA():
def __init__(self, seed=0): self.state = seed
def setSeed(self, seed): self.state = seed
def rand(self): return 1.0*self.next()/(1<<32)
def current(self): return self.state
def next(self):
self.state = (69069 * self.state + 12345) & 0xFFFFFFFF
return self.state
class rngB():
def __init__(self, seed=1): self.state = seed
def setSeed(self, seed): self.state = seed
def rand(self): return 1.0*self.next()/(1<<31)
def current(self): return self.state
def next(self):
self.state = (65539 * self.state + 4294967296) & 0x7FFFFFFF
return self.state
class rngC():
def __init__(self, seed=1): self.state = seed
def setSeed(self, seed): self.state = seed
def rand(self): return 1.0*self.next()/(1<<12)
def current(self): return self.state
def next(self):
self.state = ((((16339 * self.state>>4 + 1) & 0xFF) + 4294967296) & 0x7FFFFFFF)<<4
return self.state
class rngD():
def __init__(self, seed=1):
self.state = self.store = seed
def setSeed(self, seed): self.state = seed
def rand(self): return 1.0*self.next()/(1<<32)
def current(self): return self.state
def next(self):
self.store = self.state
self.state = (69069 * self.state + 12345) & 0xFFFFFFFF
self.state = int(.8*self.state+0.2*self.store)
return self.state
class rngE():
def __init__(self, seed=12345): self.state = seed
def setSeed(self, seed): self.state = seed
def rand(self): return 1.0*self.next()/(1<<31)
def current(self): return self.state
def next(self):
self.state = (397204094 * self.state ) & 0x7FFFFFFF
return self.state
如何测试 RNG 的随机性。
那里有一些测试,比如
1.Frequency test
2.Runs test
3.Autocorrelation test
4.Gap test
5.Poker test
但我无法理解如何使用 python 来做到这一点。请帮我一条出路,我可以完成我的任务。
谢谢
【问题讨论】:
-
你能先解释一下随机性吗?
-
随机性是指是否生成随机数,没有重复的数字。像那样@m170897017
-
@ShantanuBanerjee 你的问题是不是太宽泛了?我将从第一部分开始,频率测试,使用我的教科书和课堂笔记。如果我不是太生疏,那就是对大量结果进行分箱并计算一些样本统计数据,以便与理论上随机分布的样本的统计规定进行比较,但这是一项任务,你不应该比你更了解这些东西吗?我?一旦你知道要做什么,就回来提出一个关于编码的新的、具体的问题,你会找到你需要的所有帮助。冲洗,重复其他测试。谢谢。
-
@ShantanuBanerjee 如果我的回答对您有帮助,请接受。 :)