隨機碼演算法
『壹』 有哪些隨機數演算法呢
1、數值概率演算法:用於數值問題的求解。所得到的解幾乎都是近似解,近似解的精度
隨著計算時間的增加而不斷地提高。
2、拉斯維加斯演算法(LasVegas):要麼給出問題的正確答案,要麼得不到答案。反復求解多次,可
使失效的概率任意小。
3、蒙特卡羅演算法(MonteCarlo):總能得到問題的答案,偶然產生不正確的答案。重復運行,每一次
都進行隨機選擇,可使不正確答案的概率變得任意小。
4、舍伍德演算法(Sherwood):很多具有很好的平均運行時間的確定性演算法,在最壞的情況下性能很
壞。引入隨機性加以改造,可以消除或減少一般情況和最壞情況的差別。
『貳』 求隨機數常用演算法
一般隨機數都不是完全隨機的,你在一個程序里兩次調用系統的隨機函數,你會發現是一樣的!
給你個思路,用系統函數得到當前進程的開始時間,然後處理這個時間,演算法想怎麼寫就怎麼寫,因為每次程序運行時間的不一樣的,所以得到的隨機數就「隨機」了,很多隨機函數都是這么做的!
『叄』 如何快速生成隨機數 RSA演算法
可以採用32bit RSA演算法
設A從2~(N-1)
C=(A EXP D) mod N
滿足如下條件:
D是素數,N是兩個素數(P,Q)之積,
(D * E) mod ((P-1) * (Q-1))=1
因為:若
C=(A EXP D)mod N
有:
A=(C EXP E) mod N
所以,C與A 一一對應。
所以,對於A=2~(N-1),有不重復,無遺漏的偽隨機碼C。
凡是稍微扯上一點數學,尤其是高等數學的問題,我等泛泛之輩看起來就有點費勁,這里雖然文字不長,但是還得慢慢來看。
這裡面RSA演算法是密碼學三大演算法之一(RSA、MD5、DES),是一種不對稱密碼演算法。說如果滿足條件:D是素數,N是兩個素數(P,Q)之積,(D * E) mod ((P-1) * (Q-1))=1,那麼存在C與A(范圍從2到N-1)一一對應,且C=(A EXP D)mod N。A是一個有順序的數,C就是一個看似無規律的偽隨機數。Mod運算表示求模,例如7Mod3=1。意思是7除以3餘1。類似地8Mod3=2,9Mod3=0。EXP表示前面數的後面數次方,AEXPD表示A的D次方。這兩個運算清楚了,其它的也就沒什麼困難的了,*是乘法的意思,大多數理科生都清
『肆』 8位長度隨機密碼生產等演算法原理
請問您想問的是8位長度隨機密碼生產等演算法原理是什麼嗎?8位長度隨機密碼生產等演算法原理:生成的隨機數序列應是均勻的,即0和1出現的概率大致相等,序列中的任何子序列都不能由其他子序列推導出來,隨機數中的任何一部分都不能通過預測得出正確結果,即預測結果是無效的。
『伍』 隨機演算法原理
展開專欄
登錄
企鵝號小編
5.7K 篇文章
關注
詳解各種隨機演算法
2018-02-06閱讀 1.4K0
轉自:JarvisChu
之前將的演算法都是確定的,即對於相同的輸入總對應著相同的輸出。但實際中也常常用到不確定的演算法,比如隨機數生成演算法,演算法的結果是不確定的,我們稱這種演算法為(隨機)概率演算法,分為如下四類:
1、數值概率演算法
用於數值問題的求解,通常是近似解
2、蒙特卡洛演算法Monte Carlo
能得到問題的一個解,但不一定是正確解,正確的概率依賴於演算法運行的時間,演算法所用的時間越多,正確的概率也越高。求問題的准確解;
3、拉斯維加斯演算法 Las Vegas
不斷調用隨機演算法求解,直到求得正確解或調用次數達到某個閾值。所以,如果能得到解,一定是正確解。
4、舍伍德演算法 Sherwood
利用隨機演算法改造已有演算法,使得演算法的性能盡量與輸入數據無關,即平滑演算法的性能。它總能求得問題的一個解,且求得的解總是正確的。
隨機數
概述
計算機產生的隨機數都是偽隨機數,通過線性同餘法得到。
方法:產生隨機序列
d稱為種子;m取值越大越好;m,b互質,常取b為質數;
『陸』 隨機數演算法是什麼
在計算機中並沒有一個真正的隨機數發生器,但是可以做到使產生的數字重復率很低,這樣看起來好象是真正的隨機數,實現這一功能的程序叫偽隨機數發生器。有關如何產生隨機數的理論有許多如果要詳細地討論,需要厚厚的一本書的篇幅。不管用什麼方法實現隨機數發生器,都必須給它提供一個名為「種子」的初始值。而且這個值最好是隨機的,或者至少這個值是偽隨機的。「種子」的值通常是用快速計數寄存器或移位寄存器來生成的。下面講一講在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......餘下全文>>
『柒』 隨機演算法的基本概念
隨機演算法是演算法本身包含了隨機數生成器的演算法。根據《演算法導論(中文第二版)》描述,在進行演算法分析的時,有時可以在獲得了一定輸入分布信息之後對輸入的分布進行一定的假定,在此基礎上進行平均情況分析得到演算法的時間復雜度。然而有時候無法獲得輸入分布的信息,這時可以在演算法本身增加一定的隨機性,繼而實現對演算法進行平均情況分析。通過設計隨機演算法有效地避免較多的較壞情況輸入的出現,從而提高演算法的平均情況下的性能。
『捌』 隨機數演算法是什麼
在計算機中並沒有一個真正的隨機數發生器,但是可以做到使產生的數字重復率很低,這樣看起來好象是真正的隨機數,實現這一功能的程序叫偽隨機數發生器。有關如何產生隨機數的理論有許多如果要詳細地討論,需要厚厚的一本書的篇幅。不管用什麼方法實現隨機數發生器,都必須給它提供一個名為「種子」的初始值。而且這個值最好是隨機的,或者至少這個值是偽隨機的。「種子」的值通常是用快速計數寄存器或移位寄存器來生成的。下面講一講在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......餘下全文>>