一种快速可预制的随机数组产生办法[VC/C++编程]
本文“一种快速可预制的随机数组产生办法[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
本文介绍了一种简单、快速、实用的随机数组产生办法,经调试通过.附件为全部程序代码请审视.
在工程软件的计划和安全系统计划中,成立模子、产生密码常常需求利用到随机数组.但是计算机不会产生绝对随机的随机数,计算机只能产生“伪随机数”.其实绝对随机的随机数只是一种抱负的随机数,即便计算机怎样发展,它也不会产生一串绝对随机的随机数.计算机只能生成相对的随机数,即伪随机数.
伪随机数并非假随机数,而是指有规律的数,事实上都是由计算机经过一定的算法计算得到的.大家常用的办法是按照一个给定的数作为种子,如采取改变的时间作为种子,调用srand((unsigned)time(NULL))后履行rand()从而得到一个随机数.很明显,相同或相近的种子得到的随机数将会是完好一样或彼此接近.
因此要产生真正意义的随机数,那么种子首先必须是随机的.随机的种子可以通过外接的硬件随机发生器产生,据说最新的intel处理器即采取了读取cpu上热噪声的办法来获得随机数.当无法操纵硬件的随机发生器时,我们常采取的办法是,在两次调用srand((unsigned)time(NULL))之间加入一按时间的延时.但当需求产生一个很大的随机数组时,这种延时是冗长而不可忍耐的.并且事实上由于延时具有规律性,产生的随机数也不那么随机.
一种简单想到的产生随机数组的办法是计划出复杂的算法,从而减小数组后果的规律性.这种办法需求很高的本领,也不太合适普通程序的调用.
此外,在很多情形下,我们不但要求产生随机的数组,同时还对产生的数组有统计规律上的要求.如必须固守正态分布,均匀分布等.简单的调用srand和rand函数无法满意需求.
Matlab是一种功效强盛的工程数学软件,操纵其随机数组产生模块,我们能很简单的得到固守各种分布情势的大数组,其随机数产生的原理便是基于复杂的算法的.因此我们自然想到操纵matlab产生的随机数表来作为随机数池,从中得到我们所需求的随机数组.
本随机数组产生办法由三部份构成:其一是txt文件的随机数池,这里我操纵matlab产生1000个固守正态分布的随机数,10个一排,每两个数字之间隔断3个空格,行首3个空格存为文本文档,第一个数序号为0,然后按先行后列序号顺次布列到999;其二和三辨别是从随机数池中捞取随机数的函数类的.h文件和.cpp文件.
在捞取随机函数的函数类中,定义CStdioFile的file1,翻开作为随机数池的txt文档.首先以时间作为种子,产生一个0-999的随机数,读取随机数池中从以这个值为序号的开始的数,直到读够所需的随机数组.序号假如超越数池的范围则跳到数池的开始,持续读取.
调用本函数类,需求输入int m_Collect_Times,double *a_Random,int m_Txt_Line,int m_Txt_Row,int m_Txt_Spacing辨别代表取点个数、获得的随机数组的存储位置、随机数池行数、列数、数池中两数间空格个数.并将"C:\Yg\Debug\ramdom1000txt"改成你的随机数池文件的位置," "中的空格数改成你所利用的空格数.
以上是“一种快速可预制的随机数组产生办法[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |