序列数交换法

        “序列数交换法”是一种产生随机序列的方法。它将有序的序列数(数组)通过交换改造为无序的序列数(数组)。为叙述简单以例说明,这里只讨论 8位整数为元素的随机数组的生成,其它位数可以由此组合。
        8位整数的数值 0到 255。例如做一个有2560个元素的随机数列:
                   1)先做一个数值由零到255的循环数列,长度为2560(这是个周期为256的数组)
                   2)随机抽取两个序号使它们的数值交换
                   3)使 2 进行足够多次并检测其结果,直到符合统计概率。
         完成2)可以利用现有的随机数发生函数来捡选序列号以便交换。最好使用几个不同的随机函数来完成这个工作,以便消除函数固有的特点和增加初始值的设置。在实际操作中,一般是对数组从头到尾,处理一遍涉及所有元素的交换,称为一次交换。除了随机交换外还可以加一些人为交换例如“倒序”、“块交换”、“局部倒序”之类的操作以加快均匀进程。生成的数组达到一定的混乱程度后,可以不用随机函数而用生成的数组来替代随机函数,形象的说就是“自激励”。通过程序检测交换是否到家,也就是数组是否符合统计规律,方法多种多样例如元素顺序出现的概率达到或接近1/256,应使用多种方式检测,均匀度到一定程度后,再多操作就没有意义了,测量值将在标准值左右摆动。
        为什么此种方法可以产生随机数?这里基于一个原理(熵增加原理):如果我们随机的去变化一个数组的排列,它只能是越来越无序化。就象在一个盘子里放着大小一样但颜色不同的几小堆沙子,我们去搅和这些沙子只能使它们融合的越来越好,而不可能相反。
        如果用到的随机函数种子用计算机运行时间作参数,或者交换程序里用到了运行时间参数,将能产生“真随机数组”,由于时间和计算机状态都不能复现,所以也无法再现数组,并且数组符合随机数统计规律。
        这样产生的随机数组可能重复吗?答案是可能。但概率很小几乎为零。例如一个有256个元素的8位整数的数列,其可能的排列数是 256!大约是10的510次方,重复的概率是10的510次方的倒数,所以尽可以放心使用。象上面的例子数组的状态数是2560!,一旦形成了随机数组,它每一次循环处理将生成全新的数组,因为计算简单速度是惊人的。
        “真随机数组”虽然有许多用途。但用于序列数加密并不方便,因为你不能重新再产生它们,所以需要管理这些数值,使得加密效率低下。从上面的方法可以看到,从“序列数交换法”可以产生受控的序列数,你可以由随机函数的种子和有关参数来控制它们。用于信息加密时,你可以用密码来生成种子或有关参数,这样只是在你这里是伪随机数组,在其他任何人那里它将是“真随机数组”。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值