导航:首页 > 源码编译 > 随机数算法原理

随机数算法原理

发布时间:2022-11-03 13:51:04

㈠ 随机数算法是什么

在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器。有关如何产生随机数的理论有许多如果要详细地讨论,需要厚厚的一本书的篇幅。不管用什么方法实现随机数发生器,都必须给它提供一个名为“种子”的初始值。而且这个值最好是随机的,或者至少这个值是伪随机的。“种子”的值通常是用快速计数寄存器或移位寄存器来生成的。下面讲一讲在C语言里所提供的随机数发生器的用法。现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:”)首先给srand()提供一个种子,它是一个unsignedint类型,其取值范围从0~65535;2)然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)3)根据需要多次调用rand(),从而不间断地得到新的随机数;4)无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。这个过程看起来很简单,问题是如果你每次调用srand()时都提供相同的种子值,那么,你将会得到相同的随机数序列,这时看到的现象是没有随机数,而每一次的数都是一样的了。例如,在以17为种子值调用srand()之后,在首次调用rand()时,得到随机数94。在第二次和第三次调用rand()时将分别得到26602和30017,这些数看上去是很随机的(尽管这只是一个很小的数据点集合),但是,在你再次以17为种子值调用srand()后,在对于rand()的前三次调用中,所得的返回值仍然是在对94,26602,30017,并且此后得到的返回值仍然是在对rand()的第一批调用中所得到的其余的返回值。因此只有再次给srand()提供一个随机的种子值,才能再次得到一个随机数。下面的例子用一种简单而有效的方法来产生一个相当随机的“种子”值----当天的时间值:g#椋睿悖欤酰洌澹Γ欤簦唬螅簦洌椋铮瑁Γ纾簦弧。#椋睿悖欤酰洌澹Γ欤簦唬螅簦洌欤椋猓瑁Γ纾簦弧。#椋睿悖欤酰洌澹Γ欤簦唬螅螅Γ#矗罚唬簦穑澹螅瑁Γ纾簦弧。#椋睿悖欤酰洌澹Γ欤簦唬螅螅Γ#矗罚唬簦椋恚澹猓瑁Γ纾簦弧。觯铮椋洹。恚幔椋睿ǎ觯铮椋洌。。椋睿簟。椋弧。酰睿螅椋纾睿澹洹。椋睿簟。螅澹澹洌郑幔欤弧。螅簦颍酰悖簟。簦椋恚澹狻。簦椋恚澹拢酰妫弧。妫簦椋恚澹ǎΓ幔恚穑唬簦椋恚澹拢酰妫弧。螅澹澹洌郑幔欤剑ǎǎǎǎ酰睿螅椋纾睿澹洹。椋睿簦簦椋恚澹拢酰妫簦椋恚澹Γ幔恚穑唬埃疲疲疲疲。ǎ酰睿螅椋纾睿澹洹。椋睿簦簦椋恚澹拢酰妫恚椋欤欤椋簦恚蕖。ǎ酰睿螅椋纾睿澹洹。椋睿簦簦椋恚澹拢酰妫恚椋欤欤椋簦恚弧。螅颍幔睿洌ǎǎ酰睿螅椋纾睿澹洹。椋睿簦螅澹澹洌郑幔欤弧。妫铮颍ǎ椋剑埃唬椋Γ欤簦唬保埃唬椋。穑颍椋睿簦妫ǎΓ瘢酰铮簦唬ィ叮洌Γ#梗玻唬睿Γ瘢酰铮簦籦egjrand());}上面的程序先是调用_ftime()来检查当前时间yc并把它的值存入结构成员timeBuf.time中wae当前时间的值从1970年1月1日开始以秒计算aeh在调用了_ftime()之后在结构timeBuf的成员millitm中还存入了当前那一秒已经度过的毫秒数,但在DOS中这个数字实际上是以百分之一秒来计算的。然后,把毫秒数和秒数相加,再和毫秒数进行异或运算。当然也可以对这两个结构成员进行更多的计算,以控制se......余下全文>>

㈡ 计算机语言中,随机函数原理是什么

计算机不会产生绝对随机的随机数,计算机只能产生“伪随机数”。其实绝对随机的随机数只是一种理想的随机数,即使计算机怎样发展,它也不会产生一串绝对随机的随机数。计算机只能生成相对的随机数,即伪随机数。 伪随机数并不是假随机数,这里的“伪”是有规律的意思,就是计算机产生的伪随机数既是随机的又是有规律的。怎样理解呢?产生的伪随机数有时遵守一定的规律,有时不遵守任何规律;伪随机数有一部分遵守一定的规律;另一部分不遵守任何规律。比如“世上没有两片形状完全相同的树叶”,这正是点到了事物的特性,即随机性,但是每种树的叶子都有近似的形状,这正是事物的共性,即规律性。从这个角度讲,你大概就会接受这样的事实了:计算机只能产生伪随机数而不能产生绝对随机的随机数。
随机函数有如下两种:
rand()函数返回0到RAND_MAX之间的伪随机数(pseudorandom)。RAND_MAX常量被定义在stdlib.h头文件中。其值等于32767,或者更大。

srand()函数使用自变量n作为种子,用来初始化随机数产生器。只要把相同的种子传入srand(),然后调用rand()时,就会产生相同的随机数序列。因此,我们可以把时间作为srand()函数的种子,就可以避免重复的发生。如果,调用rand()之前没有先调用srand(),就和事先调用srand(1)所产生的结果一样。

㈢ 电脑取随机数是什么原理,是真正的随机数吗

电脑取随机数原理实质是伪随机数。

  1. 大部分程序和语言中的随机数(比如 C 中的,MATLAB 中的),确实都只是伪随机。是由可确定的函数(常用线性同余),通过一个种子(常用计算机内部的时钟),产生的伪随机数。

  2. 真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。而计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可见的。我们可以这样认为这个可预见的结果其出现的概率是100%。所以用计算机随机函数所产生的“随机数”并不随机,是伪随机数。

㈣ 一到六的随机数是什么

一到六的随机数是每次产生的随机数不同,需要用time作为随机数种子,来产生随机数。这是函数产生的随机数。int R,R=rand();此时R在1到327687即两个字节16位所能表示的最大值之间均匀分布。

随机数的原理

随机变量的抽样序列称为随机数列。若随机变量是均匀分布的,则的抽样序列称为均匀随机数列;如果是正态分布的随机变量,则称其抽样序列为正态随机数列。

用数学方法产生随机数,就是利用计算机能直接进行算术运算或逻辑运算的特点,产生具有均匀总体、简单子样统计性质的随机数。计算机利用数学方法产生随机数速度快,占用内存少,对模拟的问题可以进行复算检查,通常还具有较好的统计性质。

另外,计算机上用数学方法产生随机数,是根据确定的算法推算出来的,因此严格说来,用数学方法在计算机上产生的随机数不能说是真正的随机数,故一般称之为伪随机数。

㈤ 关于计算机取随机数的工作原理

你是要问计算机还是计算器

计算机一般只用伪随机数函数来取伪随机数(就是说这一系列数都是算出来的,其实不是随机的,只不过这个算法尽量让结果看起来比较散)。 当然也有利用输入来取随机数的做法(比如SecureCRT), 但是用的非常少, 因为这时候需要你猛晃鼠标什么的, 对用户来说太别扭。
其实一两个随机数从输入取还是可行的, 只不过很多时候是需要一系列的随机数, 这时候指望输入就没戏了,还是伪随机数方法来的通用些

至于计算器, 不知道, 估计也就是伪随机数函数

㈥ 随机数 是什么

对于随机数网络的解释是这样的:随机数是专门的随机试验的结果。在统计学的不同技术中需要使用随机数,比如在从统计总体中抽取有代表性的样本的时候,或者在将实验动物分配到不同的试验组的过程中,或者在进行蒙特卡罗模拟法计算的时候等等。
1.电脑中的随机数
电脑中有随机数发生器,但是生成的并不是绝对的随机数而是伪随机数,因为电脑随机数的生成是由算法支持的,所以生成的数字只是算法运算的结果。
2.随机数的应用
在密码学中人么会利用随机数对需要加密的明文进行加密,这样避免了人工密匙的高重复性,以及易破解性。
3.生活中的随机数
真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等,这样的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高。
综上所述:随机数可以通俗的理解为产生的不规律的,我们无法预测的数字。但是绝对的随机数在自然中是不存在的。

㈦ 电脑取随机数是什么原理,是真正的随机数吗

首先,“真随机”也有不同的含义,若想要“真正的真随机”目测只能靠量子力学了。一般的所谓真随机不是指这个,而是指统计意义上的随机,也就是具备不确定性,可以被安全的用于金融等领域,下面说的也是这种。

答案是,计算机系统可以产生统计意义上的真随机数。

大部分程序和语言中的随机数(比如 C 中的,MATLAB 中的),确实都只是伪随机。是由可确定的函数(常用线性同余),通过一个种子(常用时钟),产生的伪随机数。这意味着:如果知道了种子,或者已经产生的随机数,都可能获得接下来随机数序列的信息(可预测性)。

直观来想,计算机是一种可确定,可预测的的设备,想通过一行一行的确定的代码自身产生真随机,显然不可能。但是,我们或许可以迂回一下……

实现方法简单说就是软硬结合,或者说,引入系统外的变量(把软件,代码,算法想象成一个封闭的系统)。

一个典型的例子就是 UNIX 内核中的随机数发生器(/dev/random),它在理论上能产生真随机。即这个随机数的生成,独立于生成函数,这时我们说这个产生器是非确定的。

具体来讲,UNIX 维护了一个熵池,不断收集非确定性的设备事件,即机器运行环境中产生的硬件噪音来作为种子。

比如说:时钟,IO 请求的响应时间,特定硬件中断的时间间隔,键盘敲击速度,鼠标位置变化,甚至周围的电磁波等等……直观地说,你每按一次键盘,动一下鼠标,邻居家 wifi 信号强度变化,磁盘写入速度,等等信号,都可能被用来生成随机数。

更具体的,内核提供了向熵池填充数据的接口:

比如鼠标的就是
void add_mouse_randomness(__u32 mouse_data)

内核子系统和驱动调用这个函数,把鼠标的位置和中断间隔时间作为噪音源填充进熵池。

所以,结论是,程序和算法本身不能产生真随机,但是计算机系统作为整体可以迂回产生统计意义上的真随机。

参考:

内核源码在/drivers/char/random.c

Windows 中也有相对的随机数生成器,基本的思想是一致的

如果要求更高的话,也有专用的设备,可收集附近的电磁场等环境噪音来产生随机数

㈧ 随机数算法是什么

在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器。有关如何产生随机数的理论有许多如果要详细地讨论,需要厚厚的一本书的篇幅。不管用什么方法实现随机数发生器,都必须给它提供一个名为“种子”的初始值。而且这个值最好是随机的,或者至少这个值是伪随机的。“种子”的值通常是用快速计数寄存器或移位寄存器来生成的。下面讲一讲在C语言里所提供的随机数发生器的用法。现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:”)首先给srand()提供一个种子,它是一个unsignedint类型,其取值范围从0~65535;2)然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)3)根据需要多次调用rand(),从而不间断地得到新的随机数;4)无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。这个过程看起来很简单,问题是如果你每次调用srand()时都提供相同的种子值,那么,你将会得到相同的随机数序列,这时看到的现象是没有随机数,而每一次的数都是一样的了。例如,在以17为种子值调用srand()之后,在首次调用rand()时,得到随机数94。在第二次和第三次调用rand()时将分别得到26602和30017,这些数看上去是很随机的(尽管这只是一个很小的数据点集合),但是,在你再次以17为种子值调用srand()后,在对于rand()的前三次调用中,所得的返回值仍然是在对94,26602,30017,并且此后得到的返回值仍然是在对rand()的第一批调用中所得到的其余的返回值。因此只有再次给srand()提供一个随机的种子值,才能再次得到一个随机数。下面的例子用一种简单而有效的方法来产生一个相当随机的“种子”值----当天的时间值:g#椋睿悖欤酰洌澹Γ欤簦唬螅簦洌椋铮瑁Γ纾簦弧。#椋睿悖欤酰洌澹Γ欤簦唬螅簦洌欤椋猓瑁Γ纾簦弧。#椋睿悖欤酰洌澹Γ欤簦唬螅螅Γ#矗罚唬簦穑澹螅瑁Γ纾簦弧。#椋睿悖欤酰洌澹Γ欤簦唬螅螅Γ#矗罚唬簦椋恚澹猓瑁Γ纾簦弧。觯铮椋洹。恚幔椋睿ǎ觯铮椋洌。。椋睿簟。椋弧。酰睿螅椋纾睿澹洹。椋睿簟。螅澹澹洌郑幔欤弧。螅簦颍酰悖簟。簦椋恚澹狻。簦椋恚澹拢酰妫弧。妫簦椋恚澹ǎΓ幔恚穑唬簦椋恚澹拢酰妫弧。螅澹澹洌郑幔欤剑ǎǎǎǎ酰睿螅椋纾睿澹洹。椋睿簦簦椋恚澹拢酰妫簦椋恚澹Γ幔恚穑唬埃疲疲疲疲。ǎ酰睿螅椋纾睿澹洹。椋睿簦簦椋恚澹拢酰妫恚椋欤欤椋簦恚蕖。ǎ酰睿螅椋纾睿澹洹。椋睿簦簦椋恚澹拢酰妫恚椋欤欤椋簦恚弧。螅颍幔睿洌ǎǎ酰睿螅椋纾睿澹洹。椋睿簦螅澹澹洌郑幔欤弧。妫铮颍ǎ椋剑埃唬椋Γ欤簦唬保埃唬椋。穑颍椋睿簦妫ǎΓ瘢酰铮簦唬ィ叮洌Γ#梗玻唬睿Γ瘢酰铮簦籦egjrand());}上面的程序先是调用_ftime()来检查当前时间yc并把它的值存入结构成员timeBuf.time中wae当前时间的值从1970年1月1日开始以秒计算aeh在调用了_ftime()之后在结构timeBuf的成员millitm中还存入了当前那一秒已经度过的毫秒数,但在DOS中这个数字实际上是以百分之一秒来计算的。然后,把毫秒数和秒数相加,再和毫秒数进行异或运算。当然也可以对这两个结构成员进行更多的计算,以控制se......余下全文>>

㈨ 计算机编程中的取随机数函数是怎么实现的说一下大致原理就行

用时间为种子生成的伪随机数,但并不是真正的随机,因为时间是确定的,我以前就试验过,㝍了个程序取成千上万的随机数,然后把这些随机数以图象形式呈现出来,能发现明显的规律。更随机的方法其实也有,比如用很精确的传感器,去测量主机里的温度,风扇的转速,电路里的电压等,由于这些值会受到无数来自内外部变量的影响,难以确定值的大小,并且总是在不断变化,因此只要传感器够灵敏,用这些值做种子得到的随机数会更随机

阅读全文

与随机数算法原理相关的资料

热点内容
ln命令源码 浏览:789
用粘液做解压手套 浏览:327
icloud收信服务器地址 浏览:498
编程思考者 浏览:451
压缩机型号用什么氟利昂 浏览:553
农机空气压缩机 浏览:664
程序员下载歌曲 浏览:894
编译未检测到仿真器 浏览:807
压缩机每次启动12分钟就停 浏览:730
creo复制曲面命令 浏览:959
程序员恋上女硕士 浏览:669
ansys的get命令 浏览:988
国外dns苹果服务器地址 浏览:430
国家职业技术资格证书程序员 浏览:652
奇瑞租车app是什么 浏览:99
系统源码安装说明 浏览:420
命令行加壳 浏览:96
解压时显示防失效视频已加密 浏览:295
苹果短信加密发送 浏览:446
天翼私有云服务器租用 浏览:733