首页 > 代码库 > 新型随机函数——乱排函数的制作

新型随机函数——乱排函数的制作

新型随机函数和以往的随机函数一样的地方是:使用时需要首先设置种子,每次调用得到一个数据,输出的是一些乱码。
  不同之处是这种随机函数输出的数据之间是没有关联的,你不能用连续几个输出值推算其计算公式,这是因为它生成方式所致,它没有公式你也推导不出来。
  以往的随机函数是由算式生成的,所以它的数据是由算法关联起来的,可能是线性关联甚至高维度的关联。
  新函数是采用构造法生成随机数的,现在基本数据是字节,别的结构可以用字节来组合,所以就单说以字节为单位的随机函数,它的元素是 0至 255共256个,构造法是这样运作的,例如要建造256×N长度的随机数组,所要材料是256×N个元素,一般需要元素分布均匀,所以每种元素取N个,将这些元素组成一个数组,初始状态如何都没关系,然后对这个数组进行随机排序,随机排序就是让数组内的元素位置随机的交换,一般可以用循环来完成,例如256×N的长度,用一个循环变量i,从头到尾的循环,另外随机的在256×N中选择一个位置,用这个位置的元素和第i个元素进行交换,这样循环一次每个元素都被交换了,交换完成后新的顺序建立了,生成了新的数组。从256×N中选择位置的操作可以用其它随机函数来完成,也可以拼凑一些随机性较强的变数来完成。一遍随机排序不理想可以进行多遍,一般借助于优秀的随机函数一遍就够了。这样子一下子就生成了一个长度为256×N的数组。如果借助于其它随机函数那么其需要的种子也就是此种生成方式的种子了,否则其中生成随机位置的参数等将作为种子。所有其它随机函数必须专用的,否则将影响到结果的一致性而失控。
  新型随机函数数据的生成机制上面已经说了,为了照顾到应用习惯,模拟老式随机函数的使用方式。方法是你可以生成一定数量随机数据,函数每调用一次输出一个数据,用完后继续生成新的,这样函数就形成了。具体细节是每次生成的量不可过小,要大于元素总和数的数倍,为了均匀一般是整数倍,为什么呢?可以这样看,例如这个量是由256个不同元素组成,那将出现一个问题,我们的输出可能是每次不相同的元素,可能连续256次都有此特点,这显然是让数组有了某些规律性,所以生成量要更大些才能消除这个规律。
  新型随机函数的随机性比老式的要更好些,它是数据混合均匀后的输出,什么数据都是等概率的,也可能输出的是零值,一般随机函数没有此特性。
  现在的输出数据是无符号字节数组,很容易变成其它形式,例如做32位无符号整形数组,只要每次取四个无符号字节就可以组合。
  基本的新函数已经做出性能还是不错的,并且生成速度可达到每秒几十兆字节。
  新函数还没有名称随便征求一下。由于还没有见到类似的随机数生成方式,所以暂时可称其为“构造随机函数”或“乱排随机函数”。
  此种方法的理论基础是热力学第二定律——熵增加原理,当我们以多种方式影响数组的序列时,数组将向着更加混乱的方向发展而不可能相反。

新型随机函数——乱排函数的制作