随机生成(共9篇)
随机生成 篇1
摘要:课程改革的今天, 预设和生成之间的平衡与突破是一个永恒的主题, 已经成为每个老师非常关注的教学热点问题。老师们已经改变了观念, 理念上非常注重对课堂教学预设和课堂生成的处理, 但是当真正遇到课堂生成的问题时, 究竟该如何面对又都是一线教师的困惑, 那如何对待课堂预设中随机出现的生成, 让它成为课堂的精彩之处, 这是值得大家深思和探索的。精美的预设应更多地关注课堂上学生的精神生活, 更多地关注学生的“学”。预设与生成, 教师运筹帷幄, 会让语文课堂更显精彩。
关键词:课堂,预设,生成
课程改革进行到今天, 已经五个年头了。纵观现在改革初期的课堂教学, 教师轻车熟路地驾驭课堂, 轻松流畅地完成教学任务, 几近完美的教学, 也是自己幻想能拥有这样的课堂效果。但总觉得课堂上少了些什么。随着新课程标准的实施, 各种新的教学理念不断冲击着教育、教学和教师。预设、生成这些新名词也频频出现。
什么是预设呢?说简单点, 预设其实就是一个教师课前备课所需做的多方面的工作。它表现在课前、课堂、结果上。预设是必要的, 凡事预则立, 不预则废。课堂教学是一种有目的性、有意识的教育活动, 教学预设具有目标明确、结构严密、操作性强等特点。
何谓生成?动态生成是指教师在课堂教学实实在在的过程以学生为主体, 在教学的展开过程中由教师和学生根据不同的教学情境自主构建教学活动的过程。动态生成的特点为即时性、随机性, 生成性教学有利于学生学习方法的指导。
这一理念的产生使一线教师改变了教学观念, 我也是其中一位。我开始重新审视课堂教学:带着精美的预设走入课堂, 如愿地完成预设任务, 就如行云流水一样让人赏心悦目, 但总觉得课堂上如果能随机生成一些亮点, 学生的思维产生碰撞的火花, 那就是锦上添花的课堂。所以, 在预设过程中, 需要教学工作者尽可能地把问题考虑全面, 主观上竭尽所有可能, 才能在具体的教学过程中得到意想不到的教学效果, 才能很好地抓住生成给教学所带来的契机。认真分析教育的价值和意义, 弹性控制教学环节, 重组教学内容, 使学生真正“动”起来, 在“动”的过程中出新思想、新创意、新观念、新问题。因此, 教师把“精心预设”看做是课程实施的一个起点, 用心捕捉教学中的“即时生成”, 据此调节教学行为, 使课程实施由 “执行教案”走向“互动生成”, 使课堂成为孩子个性张扬的天空。
【案例描述】
《登上企鹅岛》一课是S版教材三年级下册第四单元的内容。 这篇课文写的是一个少年儿童跟随南极考察队来到南极大陆的所见所闻。主要介绍了在企鹅岛上看到的各种各样的企鹅, 写出了企鹅的有趣和可爱。我设计的课堂思路是:先让学生观看白雪皑皑的南极世界和憨态可掬的企鹅, 产生兴趣, 再抓住重点词句解读企鹅可爱的原因, 最后表达对企鹅的喜爱。
实际课堂教学中, 当我让学生自由选择自己喜欢的企鹅进行理解时, 很多孩子都是对企鹅性格特征的理解, 有的抓住词、句来理解, 有的看画面来理解, 有的用原文的语句来回答。如, 有的说我喜欢岛上最温顺的帽带儿企鹅、最漂亮的金企鹅、最凶猛的阿德雷企鹅……我又启发式地追问谁能发挥自己的想象:有礼貌的帽带儿企鹅会说些什么, 凶猛的阿德雷企鹅看见我们会说些什么…… 根据我的预设, 孩子们应该争先恐后地回答……但事实上只有一两个学生说, 而且语言重复。我的脑子一懵, 课前的预设、激发的一系列话语一下子不知从哪说起了。怎么办?就在这个时候我们班的 “小喜鹊” (平时她的问题总是很多, 而且课上就像只喜鹊一样很活跃, 同时也很惹人喜爱, 所以在这里我用了昵称) 突然举起小手说: “老师, 我想用表演的方法让大家了解凶猛的阿德雷企鹅。”此时, 我的头轰的一声, 甚至头上都要流下了汗水, 因为课堂设计中, 并没有这个环节。顿时我陷入了短暂的抉择中, 自己的思想在激烈地斗争, 让她表演没有十足的把握, 不让表演望着那恳切的目光, 又有些于心不忍, 而且这是公开课, 一旦表演出错后果不堪设想, 而且也未必能完成教学任务。看着那双清澈透明的眼睛, 在停顿几秒后, 我做了决定, 最终我选择了后者。我清了清嗓子, 稳稳情绪, 说: “好哇, 真没想到你还想用表演的方式, 表现阿德雷企鹅的性格。”
“小麻雀”欣然地走出座位, 叫上几个愿意和她合作的同学表演。望着她们笨拙的动作, 可爱的样子, 在表演结束的时候, 我率先给她们鼓掌, 同时也博得了后面听课老师的掌声。接下来的课堂是行云流水, 异常顺利, 语言竟不是自己备好的, 而是顺口而出, 这节课也收到了意想不到的效果。
【反思】
事实证明, 课堂教学中如果我们的学生完全走进预定教学目标或设计, 很容易身陷“山穷水尽”之境, 但我们不要急于求成, 而应善于接过学生抛来的“彩球”, 迅速地在预设和生成之间寻找、铺设一条连接的台阶, 沿着他们的思路, 给予他们一些更多的时间和空间, 也许, 他们就有可能有“柳暗花明又一村”的学习发现。苏霍姆林斯基说过:“教育的技巧并不在于能预见到课堂的所有细节, 而是在于根据当时的具体情况, 巧妙地在学生不知不觉中做出相应的变动。”比如, 当学生提出自己的要求, 而我错过机会, 只按照自己预设的教学流程进行, 我想那也许也是一节不错的课, 但课堂只觉平静得像一湖水。然而正是这出其不意的插曲, 使平静的湖面泛起涟漪, 同时我根据预设灵活地作一调整, 以此将计就计, 让听课者看到了课堂的另一面, 也正是这激发了我的思维, 使接下来的课堂显得更加顺利。精心准备的预设就成为精彩的生成, 使课堂更显生命的活力。
【感悟】
教学预设是为课堂教学的动态生成做准备, 精心预设的内容不一定能全部生成, 那是否意味着学生没有生成的预设就是没有价值?反之, “非预设生成”的内容是否就和你的预设毫无联系, 完全割裂了呢?答案当然是否定的。是预设的生成也好, 还是未生成的预设, 都体现了课堂教学的千变万化“难以预测”。一成不变的教学模式固然让教者少了些创新思维, 而意料之外的突发奇想也是情理之中的。教学的过程本来就是学生从不懂到懂、从错到对、从不会到会的过程。
我们一线的老师要在课前精心预设, 在课堂上“提倡生成” “期待生成”, 不要“回避生成”“惧怕生成”, 要恰当地抓住生成的时机和资源, 能够更大限度地提高教学的有效性。面对课堂出现的各类生成, 首先要做的应是把教材、学生钻研透彻, 这是应变生成的基础;其次要摆正心态, 定位好师生的角色地位, 把学生作为课堂学习的主人, 敢于展现一个真实自然的课堂;最后要善于经常总结经验、反思不足, 不断提高自己的教学基本功。从而在课堂上真正做到胸有成竹、游刃有余。课堂教学因预设而有序, 因生成而精彩。
总体而言, 教学过程的生成性对教学预设提出了更高的要求。 只有创造性地使用教材、全面地了解学生和有效地开发课堂资源, 预设才能富有成效。同时, 也只有在实施预设时不拘泥于预设并能智慧地处理好预设与生成的关系, 才能让自己的课堂在随机生成中绽放光彩, 让每节课都因随机生成而变得精彩。
随机生成 篇2
利用python代码生成一个随机的MAC地址,使用python网络编程时或可用上,如果使用scapy模块则可直接利用RandMAC()函数来生成MAC,
python
代码如下:
import random
Maclist = []
for i in range(1,7):
RANDSTR = “”.join(random.sample(“0123456789abcdef”,2))
Maclist.append(RANDSTR)
RANDMAC = “:”.join(Maclist)
print RANDMAC
--------------------------------运行结果-----------------------------------
e4:13:0e:1a:73:f5
下列的Fake_HW是用struct打包成二进制格式的mac地址
代码如下:
import random
import struct
mac_bin_list = []
mac_hex_list = []
for i in range(1,7):
i = random.randint(0x00,0xff)
mac_bin_list.append(i)
Fake_HW = struct.pack(“BBBBBB”,mac_bin_list[0], mac_bin_list[1], mac_bin_list[2], mac_bin_list[3], mac_bin_list[4], mac_bin_list[5])
for j in mac_bin_list:
mac_hex_list.append(hex(j))
Hardware = “:”.join(mac_hex_list).replace(“0x”,“”)
print Hardware
--------------------结果-----------------------------
24:c7:6f:92:2c:42
随机中文汉字验证码的生成及应用 篇3
关键词:随机;汉字验证码;噪音图片
中图法分类号: TP311文献标识码: A文章编号:1009-3044(2007)16-31096-02
Generation and Application of Random Code of Chinese Character for Verification
CHEN Zhan-fang,FENG Xin,ZHANG Wei
(Computer College, Changchun University of Science and Technology, Changchun 130022, China)
Abstract:In this paper the advantages and generation principle of random code are introduced. The coding and processing principle of Chinese character are analyzed.The generation and application of random code of Chinese character for verification in develop are detailed.
Key words:random;code of Chinese character for verification;noise picture
浏览器应用HTML标准与网站服务器动态联系,在HTML的表单中,基本上都是使用指定有Action的POST方法。如果不应用验证码方法,将很容易被一些别有用心的人利用机器人程序或者盗用Action的恶意程序,实现其个人勾当。应用验证码技术后,可以保护服务器,防止这一问题的发生。
应用验证码技术后,表单上将多出一个验证码文本框输入项目,并且表单上的某个位置还显示有一个图片,这个图片是由一些可由人工识读的数字和字符组成的。这是应用验证码技术后的前台特征。后台特征是,服务器在生成验证码图片的时候,以Session或者其它方式在服务器端保存验证码的明文字符串。
用户在输入表单内容的时候,还要求用户识读表单上的这个的验证码图片并将识读结果输入到验证码文本框内。当服务器收到这样的表单后,首先将用户提交的验证码与Session值进行比较,根据比较结果判断用户是否为合法使用网站功能。
1 汉字编码原理
到底怎么办到随机生成汉字的呢?汉字从哪里来的呢?是不是有个后台数据表,其中存放了所需要的所有汉字,使用程序随机取出几个汉字组合就行了呢?使用后台数据库先将所有汉字存起来使用时随机取出,这也是一种办法,但是中文汉字有这么多,怎么来制作呢?其实可以不使用任何后台数据库,使用程序就能做到这一切。要知道如何生成汉字,就得先了解中文汉字的编码原理。
1980年,为了使每一个汉字有一个全国统一的代码,我国颁布了第一个汉字编码的国家标准: GB2312-80《信息交换用汉字编码字符集》基本集,简称GB2312,这个字符集是我国中文信息处理技术的发展基础,也是国内所有汉字系统的统一标准。到了后来又公布了国家标准GB18030-2000《信息交换用汉字编码字符集基本集的扩充》,简称GB18030,编程时如果涉及到编码和本地化的人应该对GB18030很熟悉。这是我国继GB2312-1980和GB13000-1993之后最重要的汉字编码标准,同时也是未来我国计算机系统必须遵循的基础性标准之一。
目前在中文WINDOWS操作系统中,.NET编程中默认的的代码页就是GB18030简体中文。但是事实上如果生成中文汉字验证码只须要使用GB2312字符集就已经足够了。字符集中除了平时大家都认识的汉字外,也包含了很多人们不认识平时也很少见到的汉字。如果生成中文汉字验证码中有很多人们不认识的汉字也要求输入,对于使用拼音输入法的人来说将增加难度,五笔使用者还能勉强根据汉字的长相打出来,所以对于GB2312字符集中的汉字也不是全都要用。
中文汉字字符可以使用区位码来表示,详情可以查阅汉字区位码表和汉字区位码代码表。其实这两个表是同一回事,只不过一个使用十六进制分区表示,一个使用区位所在的数字位置表示。 例如“好”字的十六进制区位码是ba c3,前两位是区域,后两位代表位置,ba处在第26区,“好”处在此区汉字的第35位也就是c3位置,所以数字代码就是2635。这就是GB2312汉字区位原理。根据《汉字区位码表 》就可以发现第15区也就是AF区以前都没有汉字,只有少量符号,汉字都从第16区B0开始,这也是为什么GB2312字符集都是从16区开始的。
2 Net程序处理汉字编码原理分析
在.Net中可以使用System.Text来处理所有语言的编码。在System.Text命名空间中包含众多编码的类,可供进行操作及转换。其中的Encoding类就是重点处理汉字编码的类。通过在.NET文档中查询Encoding类的方法可以发现所有和文字编码有关的都是字节数组,其中有两个很好用的方法:
Encoding.GetBytes ()方法将指定的 String 或字符数组的全部或部分内容编码为字节数组 , Encoding.GetString ()方法将指定字节数组解码为字符串。
首先可以通过这两个方法将汉字字符编码为字节数组,同样知道了汉字GB2312的字节数组编码也就可以将字节数组解码为汉字字符。通过对“好”字进行编码为字节数组后
Encoding gb=System.Text.Encoding.GetEncoding("gb2312");
object[] bytes=gb.Encoding.GetBytes ("好");
发现得到了一个长度为2的字节数组bytes,使用 string lowCode = System.Convert.ToString(bytes[0], 16) 取出元素1编码内容(两位16进制)。而用string hightCode = System.Convert.ToString(bytes[1], 16)取出元素2编码内容(两位16进制)。之后发现字节数组bytes16进制变码后内容竟然是{ba,c3},刚好是“好”字的十六进制区位码(详情可查区位码表)。
因此就可以随机生成一个长度为2的十六进制字节数组,使用GetString ()方法对其进行解码就可以得到汉字字符了。不过对于生成中文汉字验证码来说,因为第15区也就是AF区以前都没有汉字,只有少量符号,汉字都从第16区B0开始,并且从区位D7开始以后的汉字都是和很难见到的繁杂汉字,所以这些都要排出掉。所以随机生成的汉字十六进制区位码第1位范围在B、C、D之间,如果第1位是D的话,第2位区位码就不能是7以后的十六进制数。在来看看区位码表发现每区的第一个位置和最后一个位置都是空的,没有汉字,因此随机生成的区位码第3位如果是A的话,第4位就不能是0;第3位如果是F的话,第4位就不能是F。这样就可以生成随机汉字了。
实现了随机生成汉字后,就可以使用.NET GDI来绘制自己需要的验证码图形了。
3 验证码图片的生成及应用
利用上面介绍的汉字编码原理,可以设置几个数组来存储由随机位置得到的随机汉字。生成的随机汉字字符串。需要几个汉字就设置多长的数组长度。这是一个生成六个汉字的字符串。
图1 汉字字符串
为了防止电脑OCR读图程序识别和破解验证码,一般需要在合理范围内适当增加对验证码图片的识别难度。处理手段主要是对色彩、形状、干扰元素、位置进行变异处理,使得生成的验证码图片不具有程序阅读的规律性。目前常用方法有:随机产生字符个数、随机扭曲翻转字符、随机增加背景噪点、随机添加干扰条纹、随机变化字符在图片上的位置、随机变化背景颜色和字符颜色、随机变化字符大小、随机变化字符间距,等等。在增加识别难度上需要掌握好度。如果用户太难识别验证码了,会影响用户对网站的使用积极性。
生成汉字验证码的噪音图片时,提供了2种噪音图像,一是随机生成的背景噪音线。二是随机生成的前景噪音点,作为图像中的粗糙部分。噪音点位置,颜色随机。数量根据图案的大小变化。噪音线位置长度随机,颜色设置为字体的颜色,这样验证码噪音图片效果会更好。图片中的字符,位置,大小,旋转角度都是随机的。这是生成的噪音图片。
图2 背景色和点线噪音
把前面生成的汉字字符串和验证码噪音图片结合在一起生成的可以应用的验证码图片。
图3 有噪音的验证码
这是应用到系统中的汉字验证码的实例。
图4验证码应用
4 结语
在实际应用中,还可以把汉字和字符验证码结合起来,组成更加复杂的验证码,这就是组合字符串的问题了。有一点要说明的是这种方法生成汉字验证码在中文版的Windows下才能运行,因为它带有GB的字符集,如果是其他语言的操作系统,就需要安装GB字符集了。
参考文献:
[1]http://dev.csdn.net/develop/article/67/67031.shtm.
[2]http://bbs.yibai.com.cn/re_bbs.aspx?BID=10878
随机生成 篇4
随着计算机网络应用与数据挖掘技术的发展,特别是社交网络平台的盛行,复杂网络的研究变得越来越重要。不论是对于社交平台用户关系网的数据分析[1],还是对于电子商务网站消费模式制定,抑或是电信营运商的资费方式调整,借助与复杂网络方法更能挖掘出关联用户的价值信息。比如腾讯公司根据用户的好友及所在群情况,建立了圈子好友,为用户推送更多具有间接联系的好友,这便是对复杂网络的一种应用。在利用复杂网络知识分析问题之前,首先必须对复杂网络进行可视化处理,这一步骤能够更好地反映整个网络的结构。文献[2]是运用复杂网络可视化对社会网的数据分析,文献[3,4]均是对网络社交平台的数据挖掘[2,3,4],可视化处理最大的优点是便于查看网络内部结构,从而挖掘网络中隐藏的有价值信息。这是数据处理比较关键的一步。本文正是基于此背景所做研究,目的在于找到一种性能更优的网络生成方法,为大型网络数据分析提供一定的帮助。
当前复杂网络的生成方式主要有三种[5]: 随机点生成方式、随机边的生成方式和基于节点的度的生成方式。三种方式各有优劣,本文提出了基于随机游走复杂网络生成方法,网络抽样更加均匀,通过实验比较,能够更好地保持原网络结构,连通性优良。
1 基于随机游走的层次网络生成
对于复杂网络来说,研究其层次结构显得非常重要。复杂网络节点数目较多,节点之间的上行总括关系、下行隶属关系及并列关系错综复杂,而节点之间的这种关系对分析网络相邻节点属性以及整个网络的结构研究具有重要意义。这便需要采用相应的策略对复杂网络结构进行层次分析,将整个复杂网络按照一定的方式划分成不同层次的小网络,将三维空间网络结构划分成多张二维空间的网络进行探究分析,以降低复杂网络的分析难度。本文将采用随机游走算法来实现网络的层次生成。
1. 1 常见层次网络生成方法
( 1) 随机选点方法
随机选点方法,顾名思义是随机选择原始网络中的节点,并参考原始网络中所选中节点的边关系对网络进行重新构建[6]。根据原始网络节点个数确定抽样比,选择一定量的随机节点,然后组建网络。一般而言,随机选点策略的精确性较差,因为网络中的节点都是随意抽取的,在样本量大的情况下,可能较好地恢复整个网络的原貌,但是在样本容量较小的情况下,误差较大,不适合复杂网络的结构生成。
( 2) 随机选边方法
随机选边策略是对网络中的边进行随机选择,然后与选中边相连的节点选中,将选中的边与这些节点进行网络重建。在已经选中的边的相邻边中进行随机选择,该方法和随机选点方法的缺点一样,在样本容量不够大的情况下,误差较大,所以使用具有一定的局限性。
( 3) 基于节点度方法
在随机点方法的基础上衍生了一种基于节点度的选点策略[7],节点的度在一定程度上反映了该节点与相邻节点的关联关系的强弱。该策略选择度较大的节点进行网络重建,因为度越大,与之相连的节点越多,表明该节点在整个网络中的重要性越高,选择这样的节点更能够保持原来网络的真实架构,该方法具有一定的应用范围,但是要计算出所有节点的度是比较耗时的,效率低下,特别是大型复杂网络,因此该方法不适合节点多的网络生成。
考虑到三种方法的适用范围及优缺点,提出了基于随机游走的网络生成方法,很好地弥补了这三种方法的不足。
1. 2 基于随机游走的层次网络生成方法
随机游走是一种基于扩散策略的网络生成方法,基本实现原理是在整个原始网络中放置一个活跃标签[8],活跃标签的游走过程即为随机游走过程。活跃标签经过的节点即为网络重建的节点,随机游走策略在选取行走路由的时候,不是简单地根据当前节点与之相连的节点中随机选取下一个节点,而是根据节点网络属性。
随机游走策略强调下一次抽取与前一次抽取的联系,选中某一节点之后,从与之节点相连的节点中随机选取下一个节点,依次迭代重建网络。
在给定区域的随机游走算法数学模型如下所示:
考虑到网络节点个数为有限个,是具有一定的边界条件的,因此只需考虑在边界条件下活跃标签移动的概率求解即可。定义在给定边界条件Γ下,随机游走活跃标签从非标记点出发第一次到达标记点的概率可参考下式:
其中u( i,j) 在边界区域内具有二阶连续偏导数且满足拉普拉斯方程,因此该函数是典型的调和函数,该函数的边界条件为:
根据二维空间偏微分的数学关系,概率的求解过程转变为u( i,j) 的最小值求解过程。在映射图中定义联合拉普拉斯矩阵为:
Lij的值由节点vi与vj共同决定,di为节点vi的度。顶点间的关联矩阵,即图G的m×n条边的定义:
由式( 4) 得,关联矩阵由边eij和节点vk共同决定,图中所有的eij可以是任意一个指定的方向。一般称A为联合梯度算子,AT为联合散度算子。
网络边的权值用对角阵C来定义:
由于正定阵L可以分解为L = ATA。这个构造矩阵C可以理解为在向量上一个加权内积大小的度量,从这个意义上来说,通过L = ATCA,即当C = I时,L = ATA。
给定区域Ω上的积分为:
在已经固定标记点的值的前提下,求解非标记点到达标记点的概率值。式( 6) 可以改写为:
根据线性代数相关知识,由式( 7) 可得,L是半正定矩阵,所以在唯一临界点处,D[x]可以取得最小值。将映射图G的所有顶点划分为种子节点集VM( 标记点集) 和未标记点集VU两个子集,且使它们满足VM∪VU= V,VM∩VU= 0,在不失一般性的前提下,我们假定L和x中的顶点按照优先排列种子点再排列非种子点的规则来完成,于是,式( 7) 可以分解为:
其中,xB和xU分别对应种子点和非种子点的电压值,此时,拉普拉斯矩阵也被分解为:
对D[xU]求关于xU的微分可求得临界点,可得:
这是一个含未知数| VU|的线性方程系统,只有整个图是连通的,或者每个连接区域都含有一个种子点,那么式( 10) 才是满秩的。
令xsi表示非种子点vi第一次到达类别s的种子点的概率值,并定义这样一个函数来表示所有标记点的集合: Q( vj) = s,vj∈VM,其中s∈Ζ,0 < s≤K,再为所有在vj∈VM的点定义一个| VM|×1大小的矩阵:
因此,通过求解式( 12) ,就能得到单个标记点s的联合狄利克雷问题的概率值大小。而对于所有的种子点的概率值大小,需通过求解式( 13) 得到[9]。
由K - 1个线性方程求解出非标记点到K个标记点的概率值大小,由xs可以得出X有K列,且由ms可以得出M的列数,由电路原理可知,每个节点的概率和为1:
在获得每个未标记点vi到标记点的K个概率后,逐个比较它们的大小,以最大转移概率maxs( xsi) 为准则来实现下一个节点的选择。
2 实例仿真
为了验证本文算法在复杂网络层次生成运算中的性能,采用某一社交网站服务器用户数据网络作为数据来源来进行实例仿真。社交网络平台需要发展,必须借助考虑用户之间的联系,以求为用户提供更优质便捷的推送服务,这就需要对用户之间的关联性进行深入研究,复杂网络方法则正好解决了该问题。
本文以某社交网站的用户数据进行提取,然后运用随机节点、随机边、基于节点的度方法和随机游走算法生成复杂网络,并对算法运行时间及层次网络属性进行分析,验证本文算法的优越性。
将每个注册的用户作为网络中的节点,用户发送消息对话作为网络中的边。首先抽取某一时间段的用户交互数据构建网络,网络节点共有10 000个,边633 241条。
由于要对节点度选点算法进行性能对比,有必要对网络中节点的度分布和聚类系数进行求解。其中聚类系数是对网络节点与之相邻节点紧密程度的衡量。
如图1所示为原始网络节点度分布结构图,其中横轴为节点的度,纵轴为网络中节点数量,从图中可见,网络中节点的度普遍集中在1 ~ 6,度为1的节点最多,约有3 200个。
如图2所示为原始网络节点聚类系数分布图,其中横轴为节点的度,纵轴为节点的平均聚类系数,从图中可见,度为20 ~40的节点的聚类系数最高,在0. 4左右,表明度为20 ~ 40的节点与之相邻节点的紧密程度更高。
在实验中,为了便于展示整个网络,在原始网络中按一定数量抽取节点,抽取节点占原始节点比例分别为: 80% ,60% ,40% ,20% ,分别查看可得原始网络的拓扑结构图。考虑到篇幅原因,本文仅列举了抽样比例为40% 时随机游走算法生成的网络结构图,如图3所示。
在实际运算过程中,抽样比并不是越高越好,抽样比过高,系统运算量大,而且节点数目过多,对整个网络结构分析的贡献表现并不突出,相反,抽样比适中,系统运算效率高,而且能够很好地反映整个网络的层次架构,本文选择的抽样比例为40% ,满足本文分析需求。
考虑到层次生成的目的是用尽可能少的节点和边展示出网络特性,下面将对点边比例、网络连通分量个数、最大连通分量比例做仿真,因为这些参数在一定程度上反映了层次生成策略算法是否展示出原始网络特性。
从表1和表2数据可得,从网络连通程度上来看,随机节点,随机边,基于度的点策略均会因为节点抽样比下降导致网络连通性下降,随机游走则受节点抽样比的降低对网络连通性影响较小。
下面将对不同策略的网络层次生成后的节点度分布和聚类系数与原图进行对比,比较网络生成的相似性与稳定性,考虑到篇幅原因,本文仅给出了随机游走策略生成的度分布和聚类系数图,如图4和图5所示。
4种层次生成策略在生成层次网络时,基本都能保持整个网络度分布的无标度特性,同时也能保证聚类系数的各层次之间也具有一定的相似关系,但是通过与图1和图2的原始网络度分布和聚类系数比较,策略算法性能有一定的差异。其中随机游走在度分布和聚类系数上更接近于原始网络。
从以上结果分析可得,随机游走策略运用于复杂网络层次生成,网络连通性好,度分布和聚类系数与原始网络更相似,是一种较好的复杂网络层次生成方法。
3 结 语
Go语言生成随机数的方法 篇5
golang生成随机数可以使用math/rand包
代码如下:
package main
import (
“fmt”
“math/rand”
)
func main {
for i:=0; i<10; i++ {
fmt.Println(rand.Intn(100))
}
}
发现这种情况,每次执行的结果一样,不满意
代码如下:
package main
import (
“fmt”
“time”
“math/rand”
)
func main() {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for i:=0; i<10; i++ {
fmt.Println(r.Intn(100))
}
}
这种方式就可以使用时间种子来获取不同的结果了
随机生成 篇6
JAVA传统随机数产生方法有两种:一种是利用java.lang.Math.random()静态方法,产生随机数范围是[0,1);另一种是创建java.util.Random对象,再利用nextInt()、nextFloat()等函数产生随机整数、浮点数等。两种方法的共性是每次调用一次都产生一个随机数,且仅是基本数据类型。但有的时候,需要产生定长序列元素随机排列。定长序列有三种形式:基本数据类型数组、对象数组、对象容器。例如若已知int a[]={1,2,3,4},则{2,4,3,1}、{2,1,4,3}等是数组a的随机排列;可知若简单地应用上述两种随机数生成方法是不行的。文中对这一类定长序列的随机数排列问题加以讨论。
1 定长序列元素随机化设计思想
1.1 总体设计思想
关键是设计好序列随机化生成算法。可以借鉴C++标准模板库中的random_shuffle算法,它有以下两种方式:
(1)内嵌算法,主要通过位运算产生均匀分布的随机排列,关键代码如下所示。
(2)自定义算法,产生希望的随机排列,关键代码如下所示(_R是所定义的函数,其中包含自定义随机算法)。
内嵌均匀随机分布算法及自定义算法调用框架都是专家级的,因此只要把它们移植到java中,就能实现专家级的定长序列元素的随机排列功能,这即是文中论述的随机化设计思想。
1.2 总体实现框图
C++标准模板库中random_shuffle是泛型函数,可适用基本数据类型及对象。但是java中泛型参数只支持类对象,不能是基本数据类型。因此在java中:对基本数据类型而言只能一对一编程;对类而言,可采用泛型参数。前者框图如图1所示,后者框图如图2所示。
2 关键代码分析
以图2中描述的类对象类型随机数为例加以说明,有以下两种情况:对象数组及对象容器的随机排列。
2.1 对象数组随机排列
分为两种情况:均匀分布及自定义算法的随机排列。
2.1.1 均匀分布随机排列
图2中类ObjRandImpl中对应函数如下。
可看出该函数移植了2.1部分中所描述的内嵌算法。
2.1.2 自定义算法随机排列
根据图2类图,涉及的功能类如下所示。
rand函数for循环过程与2.1部分中所描述的自定义算法是一致的。其第2个参数是多态性质,表明自定义算法实现类必须实现IRand接口。IRand接口中定义了函数getIndex,返回与当前数组下标n待交换元素的数组下标变量值,total表示数组总长度。例如:若想让前total/2个元素随机排列,后total/2个元素随机排列,定义类MyFunc如下所示。
2.2 对象容器随机排列
即对象存储在Vector、ArrayList、LinkedList等基本序列容器中,这些容器都有共同的父接口List。因此图2中泛型函数定义为rand(List
从图中可以看出:由于基本序列容器中都有toArray()函数,因此只须把对象容器转化为对象数组,执行已编制好的对象数组的随机化函数,再修改对象容器中每个元素的值即可。
3 灵活管理随机化功能模块
文中以图2中接口ObjRandIntr内容来论述的,仅有一个实现类ObjRandImpl。若ObjRandIntr接口有多个实现类,每个类中又需要许多自定义算法类,很明显需要工厂模式来管理这些类对象。其实采用spring框架就可以完成所需功能,避免了人为的低层次的工厂类的开发。
例如,某rand.xml配置文件如下所示。
通过此配置文件可加载功能类ObjRandImpl及自定义算法类MyFunc。例如:若Vector
可知:若配置文件中还有标识符“ObjRand2”对应功能模块,还有标识符“ObjFunc2”对应算法类,那么上述代码只需把getBean(“ObjRand1”)改为getBean (“ObjRand2”),getBean(“ObjFunc1”)改为getBean(“ObjFunc2”),其余不变,就可完成所需的另外一个随机排列功能。
因此借助Spring框架,可以编制非常灵活的选择随机化功能模块及其组合程序。
4 结束语
主要在JAVA中移植了C++标准模板库中random_shuffle随机算法,一方面体会到了其精妙之处,另一方面可以少走弯路,直接在JAVA中加以应用。
当然,最初的AryRandIntr、ObjRandIntr,特别是自定义算法接口IRand是否完善;spring配置文件rand.xml还应配置哪些内容等等。这些都是今后需要进一步研究的问题。
摘要:论述了定长序列元素的随机化。通过移植C++标准模板库的随机函数,可方便实现ja-va下给定基本数据类型数组、对象数组、基本序列容器元素的随机化。并可运用spring框架加以封装,形成更强大的随机化管理功能。
关键词:随机化,标准模板库,spring框架
参考文献
[1]谭阳,全惠云.一种生成动态随机数的并行算法[J].计算机工程,2010,37:2.
[2]宋勇,陈贤富,姚海东.随机数发生器探讨及一种真随机数发生器实现[J].计算机工程,2007,33:2.
[3]曾光,邓依群,韩文报,等.σ-AND随机数生成器[J].计算机科学,2009,36.
[4]彭绪富.基于窗口的随机数抽取算法研究[J].计算机工程与设计,2007,28:3.
随机生成 篇7
TDCS是一个低截获通信系统, 主要表现在它采用了伪随机序列来产生伪随机相位, 使发送信号与噪声类似已达到抗截获及隐身的要求。该系统要求基函数具有良好的随机性和相关性, 而基函数随机性和相关性的好坏与相位映射器的输入序列密切相关, 所以映射序列的选择非常重要[5]。为了提高基函数的随机性, 文献[6]中提出了使用双m序列映射产生伪随机相位的方法, 但仍存在着互相关性能较差以及数量少的问题;文献[7]与文献[8]中提出了使用了混沌序列映射产生伪随机相位, 并对其平衡性和相关性做了分析, 文献[9]在此基础上提出了采用双混沌序列生成基函数伪随机相位的方法, 这些采用混沌序列映射产生伪随机相位的方法均产生了大量互相关性能优良的基函数, 但其也存在着以下问题。
(1) 目前对于一维映射迭代产生的混沌序列容易用预测或反向迭代重构等技术识别, 产生的基函数的随机性不够;
(2) 在有限长度的情况下仍然存在着平衡性和自相关性较差的问题。
在分析组合混沌切换映射序列[10]基础上, 从混沌序列的平衡性和自相关特征对其序列进行优选, 采用优选的混沌序列映射产生伪随机相位, 对其生成的基函数进行详细的分析, 仿真表明:采用优选混沌切换映射序列生成的基函数具有更好的相关性能, 并改善了多用户情况下系统误码率。
1 TDCS原理
TDCS的原理框图如图1所示, 通过发送端对电磁环境谱估计, 设置门限将超过门限的频谱幅值置为0, 将未超过门限的频谱幅值置为1, 得到不包含干扰的环境谱幅值矢量Ak (ω) , 伪随机相位生成器产生相位谱ejφk (ω) , 并且与环境谱幅值相乘得到与干扰正交的基函数频域矢量, 通过幅度调整并且对其做IDFT变换, 得到时域基函数b (n) 波形, 发射端使用该基函数对数据进行调制并通过天线发射出去。假定收发电磁环境相同, 则所产生的基函数相同, 接收端使用产生的基函数进行相关解调, 恢复出发送数据。
2 组合混沌切换序列及其优选
2.1 组合混沌序列映射的数学模型
由于目前对一维映射迭代产生的混沌序列已有一定的侦测手段, 为了使生成的基函数随机性更高, 不易被识别, 本文采用组合混沌映射, 其数学模型为[10]
选择不同的ai和ki, 上式对应不同的混沌映射。当a1=1, a3=-2, a2=a4=0时, 为改进型Logistic映射;当a1=a3=a4=0, a3=1, k1=4时, 为Chebyshev映射;而当a2=a3=0, a1=1, a4=-2, k2=4时, 就变成了将4阶Chebyshev映射嵌入到改进型Logistic映射中所形成的一个复合混沌映射, 它同样具有混沌特征[11], 且其映射范围均为 (-1, 1) , Chebyshev映射和改进型Logistic映射的概率分布密度函数都是
2.2 混沌切换映射序列的优选
(1) 平衡性优选:平衡性是一个伪随机序列好坏的重要指标, 平衡性越好, 说明其随机性越强, 混沌序列的平衡性是指产生二值序列“1”和“0”码元数的比例, 定义为|M-N|/L。其中M、N分别是“1”和“0”的个数, L是序列的总长度, 通常从混沌序列到二值序列采用门限阈值T=0进行量化, 本文采用中值法对其进行二值量化, 当混沌序列长度为奇数时, 取其中值设为门限阈值进行判决:
当混沌序列长度为偶数时, 则选择最中间的两个数的均值设为门限进行判决:
采用中值作为门限可以保证序列拥有完美的平衡性, 表1给出了不同序列长度下两种T值平衡性的比较。从表中我们可以看出, 中值法始终保持着优异的平衡性。
(2) 自相关优选:自相关性能反应了序列的伪随机特性, 且关系到一个系统能否准确接收, 一个混沌切换映射序列进行自相关优选是如何在保留自相关峰值的同时去除旁瓣值较大的序列, 具体步骤如下。
Step1:利用梯度搜索法算法确定混沌切换映射序列自相关Ryy和自相关旁瓣δyy的值, 其中Ryymin和δyymax满足如下条件[12]。
Step2:Ryymin为自相关峰值的门限阈值, 保留自相关的部分序列。
Step3:δyymax是自相关旁瓣均方根阈值, 剔除自相关旁瓣均方根δyy>δyymax的部分序列, δyymax为相关旁瓣均方根阈值。
Step4:通过上面两步骤重新构造序列z (n) ={z1, z2, …, zi, …}且满足以下条件z (i) ∈{yn}。
序列长度L=2 000, Ryymin=0.5, δyymax=0.02进行自相关优选, 自相关优选后的仿真结果如图2所示。优选后的序列总数减少了18%。
通过对混沌切换映射产生的序列进行优选, 提高了序列的平衡性和自相关性, 具有很好的伪随机特性。
3 基于优选序列的伪随机相位生成
3.1 伪随机相位产生的基本原理
TDCS伪随机相位生成如图3所示, 我们选择等间隔的初值生成不同的混沌切换映射序列, 经过本文采用的优选方法产生出优选序列, 依次移位进入一个n级线性反馈移位寄存器 (linear feedback shift register, LFSR) , 选取其中的ri个抽头构成随机相位映射器。
这ri个抽头可以是任意组合, 为了便于分析与描述, 取连续的ri个数用来生成相位。输入的ri个数通过相位映射器被映射到2ri个可能相位中的一个如图4所示。例如:若ri等于4, 如果输入的是1001, 转换为10进制数则为9, 因此相位映射器计算得到相位2π×9/24=9π/8, 输出ejφ;LFSR偏移s个状态后, 采用同样方法再取ri个数, 并且经过相位映射器得到下一个随机相位;重复操作N次 (N为A' (ω) 的长度) , 即可得到一个长度为N的复伪随机相位向量:
3.2 产生基函数的特性分析
3.2.1 随机性分析
TDCS基函数随机性和不可预测性与伪随机相位密切相关[13], 而伪随机相位是由伪随机序列映射产生, 所以伪随机序列随机性和不可预测性直接关系到TDCS抗截获性能, 其中伪随机序列的生成依赖参数越多, 变换域系统抗截获能力就越强。当变换域通信系统采用m序列或者一维混沌序列进行相位映射时, 其所需的参数只有一个映射级数r, 且目前对m序列和一维混沌序列已有一定的侦测手段, 致使TDCS基函数较容易被推断出来。
提出了混沌切换序列映射生成伪随机相位的方法, 首先通过对组合混沌映射进行合理参数设置, 使其在不同的映射下进行切换得到混沌序列。
表2为不同映射下模型个数和可控参数个数, 组合映射产生的序列经过平衡性与自相关性优选后映射产生伪随机相位, 在可用频点数量较多时, 生成的基函数具有很强的抗截获能力, 这是因为:
(1) 组合映射是由4个不同的映射模型组合而成, 产生的序列要比单一映射产生的序列复杂的多, 很难知道生成基函数伪随机相位所采用的伪随机序列的模型。
(2) ki的取值范围很大, 可以取大于2的整数, 且ki的细微变化会引起整个序列的巨大改变, 很难通过序列分析找出其映射函数原形, 很难根据伪随机序列推断出生成的基函数。
(3) 即使已经知道采用的映射模型, 但由于切换参数可操作性太大, 通过实时的对参数进行切换产生伪随机序列, 想重构伪随机序列生成变换域通信系统的基函数几乎是不可能的。
3.2.2 相关性分析
变换域通信系统要求基函数同时具有良好的自相关性能和互相关性能。
m序列虽具有良好的自相关性能, 但其数量少, 且必须精心挑选互相关性能优异的m序列进行多址通信。
首先对自相关和平衡性进行了优选, 产生出了自相关性和平衡性优异的混沌序列, 再对其进行进一步优选后得出互相关性能优异的序列, 表3为不同长度的线性反馈移位寄存器下m序列与优选后混沌序列的数量及其最大互相关值。从表中可以看出, 经过优选后的混沌序列, 其数量依旧是远远多于m序列, 且其最大互相关值小于m序列。
3.3 仿真结果
对基于优选序列生成基函数伪随机相位方法进行仿真, 基函数采样点数N=512, 混沌序列由改进型Logistic映射、4阶Chebyshev映射、4阶Chebyshev映射嵌入到改进型Logistic映射切换产生, 预迭代次数100次, 初始值为0.1, 经过优选后依次移入9级线性反馈移位寄存器中, 产生基函数时域波形和自相关函数如图5和图6所示。
由图5可以看出基于优选混沌切换映射序列产生的基函数具有良好的类噪声性能, 利用此基函数去传输数据信息具有良好的低截获特性;基函数自相关函数如图6所示, 其自相关峰值尖锐, 旁瓣很小, 自相关性能良好, 满足TDCS基函数基本要求。
高斯白噪声信道下, 线性反馈移位寄存器长度n=9, 相位映射阶数r=3, 基函数长度N=512, m序列的特征多项式为[0 0 0 1 0 0 0 0 1], 移位寄存器的初始状态为[0 0 0 0 0 0 0 0 1], 信噪比为1~10d B, 双极性调制, 全部频谱可用情况下, 对本文方法和传统m序列方法多址性能进行仿真。
从图7中可以看出多用户情况下, 采用优选混沌序列TDCS误码性能优于m序列TDCS, 这是因为优选混沌序列生成的基函数随机性更强, 互相关性能更弱, 而随着用户数量的增多, TDCS的误码性能变差, 因为基函数并不是严格意义上正交的, 其互相关性能趋于0, 但并不等于0。通过仿真发现, 随着用户数的增加, 优选混沌切换序列TDCS误码性能改进更加明显, 那是因为随着用户数量的增加, 总互相关性能更好, 误码增益更加明显。
4 结论
随机生成 篇8
混沌理论在20世纪60年代得到快速发展,并最终在20世纪70年代基本确立。在随之而来的对混沌理论的研究当中,它几乎渗透到了各种不同的领域,包括数学、物理学、生物学、化学、气象学、经济学、信息与信号处理、天文学,甚至涉及到了音乐、艺术等方面的领域。
所谓的“蝴蝶效应”[1]是混沌最广为人知的特性,即对初始条件或控制参量的敏感性,它是由确定性系统产生的,但是具有长期不可预测的特性。此外,混沌系统还包含着许多其他的基本特性,如混合性、确定性、遍历性以及对于初值的敏感特性等,经过对比研究后,一些学者们发现密码学与混沌理论之间存在着一些紧密的联系,混沌系统的基本特性与密码学中的散布和混淆相类似,于是开始尝试用混沌系统的设计思路去开发设计新的密码系统。但是在相当长的一段时间内,混沌曾被广大的学者认为是难以驾驭的,未来的发展是令人担忧的[2],所以在很多设计系统中都尽量避免出现混沌现象。但是随着人们对混沌系统研究的深入,在此领域已经形成了大量的研究成果,在设计混沌密码系统和分析性能方面提供了很有价值的参考,逐渐形成了混沌密码系统,这一切都表明混沌在某些领域有着非常好的应用前景,也受到了学者们越来越多的关注和重视。
混沌应用的一个重要组成部分是混沌信息加密技术,它出现的很晚但是发展却非常的迅速,涌现出了许多新的方法和设计思想,同时也特别注重在实用性和安全性方面的分析和发展,在理论方面和实际领域的应用方面都取得了比较大的成果,在很大程度上推进了混沌信息加密技术走向实用阶段的进度。在对于混沌序列密码的研究当中,大部分是仍然处于理论研究和模拟仿真的阶段,但是随着大规模集成电路的迅速发展,由于实现了宽位的数据总线,这样就提高了数字化混沌运算的精度,在一定程度上克服了输出序列有限周期的现象,以此作为基础,再进一步深入的研究,就可以使混沌系统产生的伪随机序列在密码学中的应用得以具体实现,因此用数字混沌系统产生的伪随机序列成为当今混沌领域研究的一个新的方向。
2 混沌二值 0、1 序列的产生
混沌( chaos) 信号是由确定性的非线性方程产生的一个类似随机、不可逆的、动态的信号。它具有良好的伪随机序列的性质,以logistic模型为例进行阐述混沌二值序列硬件生成方法。
2. 1 混沌随机序列的生成
采用经典的混沌1-DLogistic模型:
其中μ是参数。Matlab所有计算都是通过双精度进行的,即内存中的数其精度都是双精度型的,其显示格式有很多种,在这次实验中不选择short,short e,short g,而选择最优化长格式long e的形式,因为它是显示小数点后15位小数,显示的精度高,而且对于加密来说加密程度更高,而其他的那三种只是显示的5位小数,所以初值选择15小数。如果把初值看作是密钥之一,那么这15位数就不易破译[3]。也可以用命令vpa( x,n) 设置特定符号对象指定的具体精度,同样也可用digits( n) 设定今后数值计算以n位相对精度。实验初值的精度是小数点后面2位,如果精确到更多位它对混沌的产生并无太大影响。利用MATLAB中的SIMULINK将非线性差分系统方程进行仿真如图1所示:
通过修改参数μ和初值使之产生混沌现象,通过修改采样时间,从而采样出100、1000、2000、……离散点。例如以采样1000点为例,设置SIMULINK参数窗口: 进入simulation parameters窗口,选择solver,将simulationtiome中的start time设置成0. 0,stop time设置成10,再双击延迟项1 / z,将sample time( - 1 for inherited) 设置成0. 01秒,采样时间间隔只能精确到小数点后5位,如果位数6位以上就不能再设置其他选项,保存并运行,在workspace窗口中就能看到所要的1000个点。各个离散点都在0 ~ 1之间[4]。
2. 2 混沌序列量化成二值序列
将各离散的点量化成0、1二值混沌序列。为此将引入量化函数如下[5]:
采用量化函数: 如果采样后的离散值落在量化函数的奇数区间则量化后的值为1,否则落在偶数区间则量化后的值为0。在本次量化是将0 ~ 1区间分为1024个区间。具体量化程序如下:
3 混沌二值序列性能测量与分析
3. 1 平衡特性的测量分析
平衡特性是指随机序列中0和1的个数接近相等。1-DLogistic模型是非线性离散映射系统,它满足遍历性,所以量化后的序列在理论上应该具有很好的统计特性,在取不同初值的、不同长度的序列进行实验分析后,其结果表明序列0、1的数目几乎趋近于平衡。它的计算公式为
其中Q0为实际测试序列中的0的个数,Q1为实际测试序列中的1的个数,N为实际测试序列的总体个数。检验该模型是否成立主要是根据按理论模型求得的次数与样本的实际测试次数之间的相符程度来判断。这次的实验是以统计量x2的分布来作为检验的依据,构造x2统计量的公式为
此式服从自由度为k - m的x2分布。其中m是理论模型的变量数目,k是观测数目。在1与0的序列中,k =2,m = 1,服从自由度为1的x2分布。各个项目的实际测试次数依次为Q1,Q2,……,QK,各项目的理论次数依次为E1,E2,……,EK,由于对实验的数据进行自由度是1的x2检验中,当显著性水平为5% 时,它对应的x2值为3. 841,所以如果该统计量x2的值小于3. 841就表明通过检验了。对100组10000个离散混沌序列数据进行检验,结果表明通过率为99% ,将部分统计数据列在表1中。
3. 2 游程特性的测量分析
游程特性是指在随机序列中,如果有连续出现0或1的子序列,则称该子序列为游程,连续的1或0的个数称为游程的长度。在随机序列中,长度是1的游程的个数大约占游程总数的1 /2,长度是2的游程个数大约占游程总数的1 /22,长度是3的游程个数大约占游程总数的1 /23,……依次下去,呈递减形式。对于任意长度1的游程个数和0的游程个数应该是相等的。混沌序列1和0出现的概率大致相同。其中最长的游程是n个连1码,次长的游程是n - 1个连0码,现将部分游程特性测试数据列在表2中,本次实验结果表明游程特性的理论部分和实际游程特性大体相同。
3. 3 相关性的测试与分析
相关特性是指随机序列的自相关函数具有类似于白噪声自相关函数的性质。在实际的运用当中,统计均值可以用时间均值来代替,这时候要求平稳随机序列满足各态历经性。在这种情况下计算统计均值时,只需要对一个样本的函数求其时间平均值就可以了,并不需要进行大量样本函数的集合,甚至有时候都不需要将计算时间取无限大的值,比较常用的一个方法是首先在一个有限的计算系统内,建立一个其自身能够承受的时间均值和时间自相关序列,然后用它们作为统计均值和统计自相关序列的估值。
将混沌序列转化为X = { x( n) | n = 0,1,2,……,x( n)∈{ - 1,1} } ,使序列概率密度由关于0. 5对称改为0对称。可得混沌序列的平均值、自相关和互相关函数公式为
均值估值公式为
自相关函数的估值公式
互相关函数的估值公式
当对混沌序列设定二个不同的初始值后,可以得到两个不同的混沌序列,可以分别观测这两个混沌序列的互相关特性。并且通过运用自相关公式和互相关公式对这两个混沌序列进行仿真后,能够分别得到它们的自相关特性图形和互相关特性图形,如图2所示。从自相关特性图形中可以看出该混沌序列在0值处的峰值很尖锐,而其他地方的值接近于0值,与函数相类似,具有很好的自相关特性; 从互相关特性图形中可以看出该混沌序列与均值为0的白噪声的特性相类似,因而具有较好的互相关特性。
4 结论
介绍了混沌随机序列的产生方法,以及如何进行量化成二值序列,并对该序列的性能进行了分析。包括平衡特性、游程特性和相关特性,将实验结果和理论分析进行了对比,结果表明,该混沌序列生成方法简单方便,这样在很大程度上就能够减少实现该序列的成本,因此,无论从实际运用的角度出发还是从序列的性能方面来说,该混沌序列都可以被称之为一种优良的伪随机序列。
摘要:介绍了混沌信息加密在密码学中的应用现状,并且对于混沌二值序列的产生过程和方法进行了详细叙述,同时也详细地分析了该序列的性能,包括平衡特性、游程特性和相关特性。
随机生成 篇9
随机数发生器 (RNG) 是一种系统设备, 产生不可预知的数字序列。目前随机数发生器广泛用于多种应用, 包括仿真、建模、计算机游戏和加密系统, 这些应用程序的许多伪随机数生成器 (PRNG) 不足以满足需求, 其中对于加密应用程序则需要很强的随机数字生成器。所以, 研究基于FPGA的随机数生成器是很有意思的。目前, 国内对FPGA随机数生成器的设计主要集中于振荡环路的电路结构, 是由多组反相器组成, 且振荡环路产生随机性的序列通过后期处理模块来提高。它是一种硬件设备, 是基于物理现象产生随机数的设备。本文设计研究一种用数字电器实现得到随机序列, 并在物理平台 (XC3S400) 上顺利通过NIST测试。
大部分得到的随机数的算法都是基于“转换”的设计思路, 也就是说通过均匀分布随机数通过转换其算法来获取随机数。获取高质量的均匀分布随机数的前提就是选择合适的算法。所以, 随机数生成器的设计过程当中要充分考虑均匀分布随机数的产生过程。本文设计的硬件结构是基于矩阵思想设计转换逻辑, Combined Tausworthe均匀分布随机数生成器得到了改进, 均匀分布随机数产生的速度得到了提高, 随机数的周期和输出位宽得到了调整, 以适应不同环境使用的要求。FRNG旨在产生随机数字, 所需的准确性给定应用程序, 是从样本统计上难以区分的随机变量理想的高斯分布。我们把FRNG划分为四个基本类别:反演、转型、拒绝和递归方法。
1、转换方法
1.1、Box-Muller
Box-Muller是最早的转换方法之一。它可从一对统一的随机数字产生一对高斯随机数。它利用了两个独立高斯随机数是径向对称这一事实。这果这两个随机数具有相同方差, 这可以很容易推出。Box-Muller可以被理解为在二维平面上的坐标上使用高斯数字表示的一种方法。相应向量获得转化的一个高斯随机数, 然后是随机数通过缩放第二次的均匀随机数2π。到坐标上进行运算然后执行高斯随机数。该算法将每次执行生成两个随机数时, 很常见的生成函数返回的焦虑值对用户和高速缓存上的下一个函数调用返回的其他值。
1.2、Monty Python
Monty Python依赖于使用前高斯分布变换的行为。Monty Python中心思想是要进行分区到高斯PDF四个不连续的区域, 显示为A、B、C和D。这四个领域的设计以便他们可以将确切地打包到一个矩形, 使用一个变换, 叶大领域A和B不变, 将映射到的矩形中的C区C区在高斯的PDF中通过afhne的变换, 并使用一种更复杂进程打包高斯进区D.发电机使用的巨蟒方法的示例包括尾区D一致地生成一个随机点的矩形内, 找出其中的地区点是在并应用适当的拆包变换的那赛格-发了。方法的优点是, 在最常见的情况下, A区和B, 统一随机点可以返回作为高斯样本未变形。
Monty Python算法如下所示:
1、s ←2 (2U1) -1
2、x ← bU2
3、if x< a then
4、return sx
5、end if
6、y ← U3/ (2b)
7、if y<φ (x) then
8、return sx
9、endif
10、 (x, y) ← f C (x, y)
11、if y<φ (x) then
12、returnsx
13、else
14、return Return x from the tails with |x|>b
15、endif
2、转换逻辑
通常情况下, 线性反馈移位寄存器实现常态下的递归关系。每个有效的数据信息Xn, m都通过时钟周期产生, 需T位新的数据信息才能产生一个S位的随机数Um, n。换而言之, 一个随机数Um, n要消耗T个时钟周期。所以, 需要使线性反馈移位寄存器逻辑得以改变, 才能够在一个时钟周期内产生, 用矩阵形式表示递推关系, 表达式如下:
其中, 当前时刻的S位状态信息用Xn, m表示, Xn, m+1表示下一个时刻的S位状态信息。也就是说, 转换当前时刻的输出Um, n的状态中使用转换矩阵可以直接获取到下一个时刻的输出数据信息。在研究中, 我们保留了23位的精度转换之后, 允许作出的23位选择一位在单精度高斯表示。没有详细的分析最大数目可以保留的位数, 但我们注意到, 显示证据这不超过最大值的测试系统可以保留的位数。此外, 提到的高斯值1附近有至少25位可以使用。然而, 这是位数上限和高斯分布的非精确转变也许可以进一步降低可以安全使用的位数。
3、配置周期
CombinedTausworthe随机数生成器由n个Tausworthe随机数生成器构成, 其新产生的随机数的周期表达式如下:
从上面公式可见, 周期T随着kn和n值的增加而增加。因此, 可根据实际情况去调整kn和n值, 从而达到配置最终产生的分布随机数的周期。
随机数周期应该遵循的配置原则:在实际情况中, 根据需求分析对随机数周期的要求不同。在蒙特卡罗计算应用中, 当要保证结果的准确性, 就是要保证随机数周期是随机数数量的2次方或3次方以上。过长过短的周期都不合适, 过短容易导致计算结果的错误, 过长意味消耗硬件的资源。因此, 在保证计算结果准确性的基础上, 依据实际情况改变kn和n去设计随机数生成器, 来减少硬件资源的浪费。
摘要:在网络通信的应用中, 有必要设计出能重构, 吞吐量高的随机数生成器。本文提出一种改进Combined Tausworthe算法, 基于FPGA的随机数生成器。该生成器开发周期短、组成单元简单、移植速度快。文中还阐述了检测产生出来的随机数质量的结果。
关键词:随机数发生器,均匀分布随机数,可重构计算,配置周期
参考文献
[1]谷晓忱;张民选一种基于FPGA的高斯随机数生成器的设计与实现《计算机学报》2011-01
[2]王福来基于复合符号混沌的伪随机数生成器及加密技术《物理学报》2011-11
[3]谷晓忱;张民选多输出LFSR结构均匀分布伪随机数生成器的硬件设计优化《武汉大学学报 (信息科学版) 》2010-05
[4]谷晓忱;张民选多输出外部反馈型LFSR均匀分布随机数生成器的分析与设计《计算机工程与科学》2009-10