隨機數的生成及獲取方法和裝置與流程
2023-09-21 10:34:20 2
本申請涉及計算機技術領域,尤其涉及一種隨機數的生成及獲取方法和裝置。
背景技術:
隨著隨機數在計算機領域應用越來越廣,對產生的隨機數有越來越高的要求。目前,常用隨機數產生的方法有兩種,一種是軟體方式,用系統時間作為隨機數產生的種子,再根據系統函數產生隨機數。另一種是硬體方式,設計產生隨機數的硬體設備,根據隨機信號產生隨機數。
但是,軟體使用系統默認的隨機數生成方法存在以下缺點:如果在同一時間點(同一秒,或者同一毫秒)下,產生的隨機數重複概率很高,從而導致隨機數分布不均衡,即產生偽隨機數。因為,在計算機應用系統中,使用時間做為隨機數產生的種子,在較短時間內,例如在相同毫秒或秒數的時間段內生產的隨機數,因時間種子數相等。因此生成的隨機數會存在重複率高,且分布不均衡的缺點。
技術實現要素:
本申請的目的旨在至少在一定程度上解決上述的技術問題之一。
為此,本申請的第一個目的在於提出一種隨機數的生成方法,該方法通過生成包括n個存儲單元存儲隨機數的隨機數存儲數組,接著對隨機數存儲數組中的存儲單元進行隨機混排,當接收隨機數獲取指令時,從隨機數存儲數組中對應的存儲單元讀取隨機數,通過該申請實施例,可以在較短的單位時間內多次獲取的隨機數重複率低,且分布均衡,因此本申請的隨機數生成方法具有較好的隨機性。
本申請的第二個目的在於提出了一種隨機數的生成裝置。
本申請的第三個目的在於提出了一種隨機數的獲取方法。
本申請的第四個目的在於提出了一種隨機數的獲取裝置。
為達上述目的,根據本申請第一方面實施例提出的一種隨機數的生成方法,包括以下步驟:生成隨機數存儲數組,其中,所述隨機數存儲數組包括n個存儲單元,每個所述存儲單元存儲一個隨機數,其中,n為正整數;對所述隨機數存儲數組中的存儲單元進行隨機混排;以及接收隨機數獲取指令,並根據所述隨機數獲取指令從所述隨機數存儲數組中 對應的存儲單元中讀取所述存儲單元存儲的隨機數。
通過本申請實施例的隨機數生成方法,首先生成包括n個存儲單元且每個存儲單元存儲一個隨機數的隨機數存儲數組,接著對隨機數存儲數組中的存儲單元進行隨機混排,從而可以在接收到隨機數獲取指令時,從隨機數存儲數組中對應的存儲單元中讀取存儲單元存儲的隨機數。由於在隨機數存儲數組中對存儲單元進行了隨機混排,從而實現了在較短的單位時間內多次獲取的隨機數重複率低,且分布均衡。因此本申請的隨機數生成方法具有較好的隨機性。
在本申請的一個實施例中,所述n個存儲單元中存儲的隨機數均不相同。
在本申請的一個實施例中,所述的隨機數的生成方法,每個所述存儲單元具有標識值,其中,所述對所述隨機數存儲數組中的存儲單元進行混排具體包括:根據隨機函數生成隨機值,並根據所述隨機值生成待調換存儲單元的標識值;以及根據所述標識值和預設調換規則將所述待調換存儲單元與目標存儲單元中的隨機數進行調換。
在本申請的一個實施例中,所述根據隨機函數生成隨機值具體包括:當i大於1且小於n時,根據當前時間和第i-1次隨機值生成第i次隨機值,其中,i為調換次數;當i等於1時,根據當前時間生成所述第i次隨機值。
在本申請的一個實施例中,所述預設調換規則為:當進行第i次調換時,將第i次隨機值對應的存儲單元與第(n+1-i)存儲單元中的隨機數進行調換。
在本申請的一個實施例中,所述根據所述隨機數獲取指令從所述隨機數存儲數組中對應的存儲單元中讀取所述存儲單元存儲的隨機數具體包括:根據所述隨機數獲取指令獲取當前已被讀取的存儲單元的標識值;根據所述當前已被讀取的存儲單元的標識值讀取下一個存儲單元存儲的隨機數。
為達上述目的,根據本申請的第二方面實施例提出的一種隨機數的生成裝置,包括:生成模塊,用於生成隨機數存儲數組,其中,所述隨機數存儲數組包括n個存儲單元,每個所述存儲單元存儲一個隨機數,其中,n為正整數;隨機混排模塊,用於對所述隨機數存儲數組中的存儲單元進行隨機混排;以及讀取模塊,用於接收隨機數獲取指令,並根據所述隨機數獲取指令從所述隨機數存儲數組中對應的存儲單元中讀取所述存儲單元存儲的隨機數。
本申請實施例的隨機數生成裝置,首先生成模塊生成包括n個存儲單元且每個存儲單元存儲一個隨機數的隨機數存儲數組,接著隨機混排模塊對隨機數存儲數組中的存儲單元進行隨機混排,從而讀取模塊可以在在接收到隨機數獲取指令時,從隨機數存儲數組中對應的存儲單元中讀取存儲單元存儲的隨機數。由於隨機混排模塊對隨機數存儲數組中的存儲單元進行了隨機混排,從而實現了在較短的單位時間內多次獲取的隨機數重複率低,且 分布均衡。因此本申請的隨機數生成裝置具有較好的隨機性。
在本申請的一個實施例中,所述n個存儲單元中存儲的隨機數均不相同。
在本申請的一個實施例中,所述的隨機數的生成裝置,每個所述存儲單元具有標識值,其中,所述隨機混排模塊包括:標識值生成子模塊,用於根據隨機函數生成隨機值,並根據所述隨機值生成待調換存儲單元的標識值;以及調換子模塊,用於根據所述標識值和預設調換規則將所述待調換存儲單元與目標存儲單元中的隨機數進行調換。
在本申請的一個實施例中,所述的隨機數的生成裝置,當i大於1且小於n時,所述標識值生成子模塊根據當前時間和第i-1次隨機值生成第i次隨機值,其中,i為調換次數;當i等於1時,所述標識值生成子模塊根據當前時間生成所述第i次隨機值。
在本申請的一個實施例中,所述預設調換規則為:當進行第i次調換時,將第i次隨機值對應的存儲單元與第(n+1-i)存儲單元中的隨機數進行調換。
在本申請的一個實施例中,所述讀取模塊具體包括:獲取子模塊,用於根據所述隨機數獲取指令獲取當前已被讀取的存儲單元的標識值;讀取子模塊,用於根據所述當前已被讀取的存儲單元的標識值讀取下一個存儲單元存儲的隨機數。
為達上述目的,根據本申請的第三方面實施例提出的一種隨機數的獲取方法,包括以下步驟:接收隨機數獲取指令,並獲取隨機數存儲數組,其中,所述隨機數存儲數組包括n個存儲單元,每個所述存儲單元存儲一個隨機數,且所述隨機數存儲數組中的n個存儲單元的位置通過隨機混排確定,其中,n為正整數;根據所述隨機數獲取指令從所述隨機數存儲數組中對應的存儲單元中獲取所述存儲單元存儲的隨機數。
通過本申請實施例的隨機數獲取方法,首先接收到隨機數獲取指令,接著獲取隨機數存儲數組並通過隨機混排確定隨機數存儲數組中的n個存儲單元的位置,從而根據接收到隨機數獲取指令從隨機數存儲數組中對應的存儲單元中讀取存儲單元存儲的隨機數。由於在隨機數存儲數組中對存儲單元進行了隨機混排,從而實現了在較短的單位時間內多次獲取的隨機數重複率低,且分布均衡。因此本申請的隨機數獲取方法具有較好的隨機性。
在本申請的一個實施例中,所述n個存儲單元中存儲的隨機數均不相同。
在本申請的一個實施例中,所述的隨機數的獲取方法,每個所述存儲單元具有標識值,其中,通過以下步驟對所述隨機數存儲數組中的n個存儲單元的位置通過隨機混排:根據隨機函數生成隨機值,並根據所述隨機值生成待調換存儲單元的標識值;以及根據所述標識值和預設調換規則將所述待調換存儲單元與目標存儲單元中的隨機數進行調換。
在本申請的一個實施例中,所述根據所述隨機數獲取指令從所述隨機數存儲數組中對應的存儲單元中獲取所述存儲單元存儲的隨機數具體包括:根據所述隨機數獲取指令獲取當前已被讀取的存儲單元的標識值;根據所述當前已被讀取的存儲單元的標識值獲取下一 個存儲單元存儲的隨機數。
為達上述目的,根據本申請的第四方面實施例提出的一種隨機數的獲取裝置,包括:接收模塊,用於接收隨機數獲取指令;隨機數存儲數組獲取模塊,用於獲取隨機數存儲數組,其中,所述隨機數存儲數組包括n個存儲單元,每個所述存儲單元存儲一個隨機數,且所述隨機數存儲數組中的n個存儲單元的位置通過隨機混排確定,其中,n為正整數;隨機數獲取模塊,用於根據所述隨機數獲取指令從所述隨機數存儲數組中對應的存儲單元中獲取所述存儲單元存儲的隨機數。
通過本申請實施例的隨機數獲取裝置,首先接收模塊接收到隨機數獲取指令,接著隨機數存儲數組獲取模塊獲取隨機數存儲數組並通過隨機混排確定隨機數存儲數組中的n個存儲單元的位置,從而隨機數獲取模塊根據接收到隨機數獲取指令從隨機數存儲數組中對應的存儲單元中讀取存儲單元存儲的隨機數。由於在隨機數存儲數組中對存儲單元進行了隨機混排,從而實現了在較短的單位時間內多次獲取的隨機數重複率低,且分布均衡。因此本申請的隨機數獲取裝置具有較好的隨機性。
在本申請的一個實施例中,所述n個存儲單元中存儲的隨機數均不相同。
在本申請的一個實施例中,所述隨機數獲取模塊具體包括:第一獲取子模塊,用於根據所述隨機數獲取指令獲取當前已被讀取的存儲單元的標識值;第二獲取子模塊,用於根據所述當前已被讀取的存儲單元的標識值獲取下一個存儲單元存儲的隨機數。
本申請附加的方面和優點將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本申請的實踐了解到。
附圖說明
本申請的上述和/或附加的方面和優點從結合下面附圖對實施例的描述中將變得明顯和容易理解,其中:
圖1是根據本申請一個實施例的隨機數的生成方法的流程圖;
圖2是根據本申請一個實施例的獲取隨機數的流程圖;
圖3是根據本申請一個實施例對隨機數存儲數組中的存儲單元進行隨機混排的方法流程圖;
圖4是本申請一個實施例的隨機數的生成裝置的結構示意圖;
圖5是根據本申請另一個實施例的隨機數的生成裝置的結構示意圖;以及
圖6是根據本申請又一個實施例的隨機數的生成裝置的結構示意圖;
圖7是根據本申請一個實施例的隨機數的獲取方法的流程圖;
圖8根據本申請一個實施例的隨機數的獲取裝置的結構示意圖;
圖9是根據本申請另一個實施例的隨機數的獲取裝置的結構示意圖。
具體實施方式
下面詳細描述本申請的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,旨在用於解釋本申請,而不能理解為對本申請的限制。
本申請通過隨機混排的方式對隨機數存儲數組裡的存儲單元進行隨機混排,使得隨機數存儲數組中的隨機數順序完全隨機,從而解決了傳統隨機函數較大概率出現重複導致分布不平衡的問題。在需要獲取隨機數時,可以從該隨機數存儲數組中獲取對應的隨機數。
圖1是根據本申請一個實施例的隨機數的生成方法的流程圖。
如圖1所示,本申請實施例的隨機數的生成方法包括以下步驟:
s110,生成隨機數存儲數組,其中,隨機數存儲數組包括n個存儲單元,每個存儲單元存儲一個隨機數,其中,n為正整數。
在本申請的實施例中,n個存儲單元中存儲的隨機數均不相同。
可以理解的是,在本申請的實施例中,生成的隨機數存儲數組中對應的存儲單元存儲的隨機數是不重複的,例如,一個存儲單元存儲的一個隨機數是2,那麼其它存儲單元存儲的隨機數都不是2。
在本申請的實施例中,n個存儲單元可以分別存儲1至n個整數,從而每個存儲單元存儲的隨機數與其他的均不同。
在本申請的另一個實施例中,隨機數存儲數組的長度是可以配置的,根據需要對隨機數存儲數組的長度提前進行設置。
s120,對隨機數存儲數組中的存儲單元進行隨機混排。
需要說明的是,本申請實施例所述的隨機混排是指對隨機數存儲數組中n個存儲單元存儲的隨機數進行隨機調換,從而使得存儲單元中存儲的隨機數的順序完全隨機,從而解決現有技術中隨機函數較大概率出現重複導致分布不平衡的問題。在本申請的實施例中,可以採用多種方式對n個存儲單元存儲的隨機數進行隨機調換,在後續的實施例中將對這些方式進行詳細介紹。對於本領域技術人員而言,可採用多種方式對隨機數存儲數組中存儲的隨機數進行隨機混排,從而達到隨機數的順序完全隨機的目的,因此並不限於本申請以下實施例所提到的隨機調換的算法,任何能夠達到上述目的的算法均應包含在本申請的保護範圍之內。
s130,接收隨機數獲取指令,並根據隨機數獲取指令從隨機數存儲數組中對應的存儲單元中讀取存儲單元存儲的隨機數。
具體而言,在本申請的實施例中,接收隨機數獲取指令之後,可以順序地從隨機數存儲數組中依次讀取對應的隨機數,也可以隨機地從隨機數存儲數組中依次讀取對應的隨機數。當然在本申請的實施例中,還可以採用其他的方式從隨機數存儲數組中讀取對應的隨機數。
具體地,在本申請的一個具體實施例中,在接收到隨機數獲取指令之後,根據隨機數獲取指令獲取當前已被讀取的存儲單元的標識值(即上一次被讀取的存儲單元的標識值),根據當前已被讀取的存儲單元的標識值讀取下一個存儲單元存儲的隨機數。
需要說明的是,在每一次接收到隨機數獲取指令之後,進一步判斷已被讀取的存儲單元是否為隨機數存儲數組中的最後一個存儲單元。如果不是隨機數存儲數組中的最後一個存儲單元,則繼續讀取下一個存儲單元存儲的隨機數。如果是隨機數存儲數組中的最後一個存儲單元,則需要重新生成新的隨機數存儲數組,即執行步驟s110。
本申請實施例的隨機數的生成方法,首先生成包括n個存儲單元且每個存儲單元存儲一個隨機數的隨機數存儲數組,接著對隨機數存儲數組中的存儲單元進行隨機混排,從而可以在接收到隨機數獲取指令時,從隨機數存儲數組中對應的存儲單元中讀取存儲單元存儲的隨機數。由於在隨機數存儲數組中對存儲單元進行了隨機混排,從而實現了在較短的單位時間內多次獲取的隨機數重複率低,且分布均衡,因此本申請的隨機數生成方法具有較好的隨機性。
為了使得本領域的技術人員能夠更加清楚地了解本申請的獲取隨機數流程,下面結合圖2具體說明。如圖2所示:
s210,接收隨機數獲取指令。
s220,判斷當前已被讀取的存儲單元是否為隨機數存儲數組的最後一個。
具體而言,在每一次接收到隨機數獲取指令之後,進一步判斷當前已被讀取的存儲單元是否為隨機數存儲數組中的最後一個存儲單元。如果不是隨機數存儲數組中的最後一個存儲單元,則繼續讀取下一個存儲單元存儲的隨機數。
s230,如果判斷當前已被讀取的存儲單元是隨機數存儲數組的最後一個,初始化隨機數存儲數組,需要重新生成新的隨機數存儲數組。
具體而言,確定當前已被讀取的存儲單元是隨機數存儲數組的最後一個,即隨機數存儲數組中的所有存儲單元存儲的隨機數都已經被讀取過,則需要對隨機數存儲數組進行初始化,從而重新生成新的隨機數存儲數組。
在本申請的實施例中,如果確定當前的存儲單元不是隨機數存儲數組的最後一個,則直接根據隨機數獲取指令從隨機數存儲數組中對應的存儲單元中讀取存儲單元存儲的隨機數。
s240,對隨機數存儲數組中的存儲單元進行隨機混排,即循環打亂隨機數存儲數組中的每個存儲單元的位置。
在本申請的實施例中,循環打亂隨機數存儲數組中的每個存儲單元的位置,從而可以使得存儲單元中存儲的隨機數的順序完全隨機,進而解決現有技術中隨機函數較大概率出現重複導致分布不平衡的問題。在本申請的實施例中,可以採用多種方式對n個存儲單元存儲的隨機數進行隨機調換,從而達到隨機數的順序完全隨機的目的,因此並不限於本申請實施例。
s250,根據上次獲取的存儲單元的標識值,選擇隨機數存儲數組中下一個存儲單元存儲的數據作為當前要獲取隨機數。
具體地,根據隨機數獲取指令獲取當前已被讀取的存儲單元的標識值(即上一次被讀取的存儲單元的標識值),根據當前已被讀取的存儲單元的標識值讀取下一個存儲單元存儲的隨機數,例如可以順序地讀取。
需要說明的是,還可以採用其他的方式從隨機數存儲數組中讀取對應的隨機數,不限於本申請實施例的順序地從隨機數存儲數組中依次讀取對應的隨機數。
為了使得本申請中對隨機數的生成方法的描述更加的具體化,可以結合java語言的程序秒數進行說明,具體如下:
首先初始化一個隨機數存儲數組,定義存儲單元獲取標識值和隨機數存儲數組長度。接收隨機數指令後,判斷當前的存儲單元是否隨機數存儲數組的最後一個,判斷當前的存儲單元不是隨機數存儲數組的最後一個時,需要重新生成隨機數存儲數組,進而循環將隨機數存儲數組中的存儲單元順序打亂,最後根據上次獲取的存儲單元的標識值,選擇隨機數存儲數組中下一個存儲單元存儲的數據作為當前要獲取隨機數。
需要說明的是,本申請的隨機數的生成方法不限於基於java語言實現,可以使用其他計算機語言實現。
本申請實施例的隨機數的生成方法,首先生成包括n個存儲單元且每個存儲單元存儲一個隨機數的隨機數存儲數組,接著對隨機數存儲數組中的存儲單元進行隨機混排,從而可以在接收到隨機數獲取指令時,從隨機數存儲數組中對應的存儲單元中讀取存儲單元存儲的隨機數。由於在隨機數存儲數組中對存儲單元進行了隨機混排,從而實現了在較短的單位時間內多次獲取的隨機數重複率低,且分布均衡,因此本申請的隨機數生成方法具有較好的隨機性。
為了使得本領域的技術人員能夠更加清楚地了解本申請中對隨機數存儲數組中的存儲單元進行隨機混排的方法,下面結合圖3進行具體說明。如圖3所示:
s310,根據當前時間和隨機函數生成隨機值,其中,每個存儲單元具有標識值。該標 識值是用於區分存儲單元的標識,在本申請的實施例中,在初始狀態(即隨機混排之前)存儲單元的標識值可以與存儲單元中存儲的隨機數可以相等。
需要說明的是,在該步驟s310中生成的隨機值與存儲單元中存儲的隨機數的概念並不相同,該步驟生成的隨機值用於確定待調換存儲單元的標識值。
具體而言,當i大於1且小於n時,根據當前時間和第i-1次隨機值生成第i次隨機值;而當i等於1時,根據當前時間生成第i次隨機值,其中,i為調換次數。也就是說,當第一次生成隨機值時,根據當前時間生成隨機值,當不是第一次生成隨機值時,根據當前時間和第i-1次隨機值生成第i次隨機值。
在本申請的實施例中,生成隨機數存儲數組後,每個存儲單元具有標識值,根據隨機函數生成隨機值,並根據隨機值生成待調換存儲單元的標識值,從而確定需要調換的存儲單元。
s320,根據標識值和預設調換規則將待調換存儲單元與目標存儲單元中的隨機數進行調換。
當進行第i次調換時,將第i次隨機值對應的存儲單元與第(n+1-i)存儲單元中的隨機數進行調換。
舉例而言,生成隨機數存儲數組後,每個存儲單元具有標識值,標識值能夠區別不同的存儲單元。當i為1時,根據當前時間生成第1次隨機值,並根據第1次隨機值生成待調換存儲單元的標識值,根據預設調換規則,把第1次隨機值對應的存儲單元和第n存儲單元中的隨機數進行調換,即將第1次隨機值對應的存儲單元中的隨機數存儲於第n存儲單元中,並將第n存儲單元中的隨機數存儲於第1次隨機值對應的存儲單元中。當i為2時,根據當前時間和第1次隨機值生成第2次隨機值,並根據第2次隨機值生成待調換存儲單元的標識值,根據預設調換規則,把第2次隨機值對應的存儲單元和第n-1存儲單元中的隨機數進行調換,即將第2次隨機值對應的存儲單元中的隨機數存儲於第n-1存儲單元中,並將第n-1存儲單元中的隨機數存儲於第2次隨機值對應的存儲單元中。以此循環,直到所有隨機數存儲數組中的存儲單元存儲的隨機數完成調換。在上述實施例中,將第1次調換計算的標識值的存儲單元與第n存儲單元先進行調換。在本申請的其他實施例中,也可以從第一存儲單元先開始進行調換。
舉例而言,初始化一個隨機數存儲數組randarry[]。對隨機數存儲數組中的每個存儲單元用自然數賦值。例如,randarry[0]=1,randarry[1]=2…randarry[n-1]=n。循環打亂隨機數存儲數組中的每個存儲單元的位置。例如,可以採用每次隨機數存儲數組中的每個存儲單元存儲的值與倒數第i個存儲單元存儲的值交換,i從n-1遞減,例如randarry[1]=2與randarry[n-1]=n替換。
需要說明的是,本申請實施例的將存儲單元中的隨機數進行調換的方法只是預設調換規則的一種,即可以根據實際需要對預設調換規則進行設置,通過不同的調換方法對存儲單元中的隨機數進行調換。
s330,判斷隨機數存儲數組中的存儲單元是否全部被調換過。
s340,如果隨機數存儲數組中的存儲單元全部被調換過,則確定存儲單元中存儲的隨機數的順序完全隨機,因此,該隨機數存儲數組可供使用。
具體而言,確定隨機數存儲數組中n個存儲單元中存儲的隨機數已經全部進行調換,根據隨機數獲取指令獲取當前已被讀取的存儲單元的標識值;根據當前已被讀取的存儲單元的標識值讀取下一個存儲單元存儲的隨機數。
需要說明的是,可以採用其他的方式從隨機數存儲數組中讀取對應的隨機數,不限於本申請實施例的順序地從隨機數存儲數組中依次讀取對應的隨機數。
本申請實施例的隨機數的生成方法,首先生成包括n個存儲單元且每個存儲單元存儲一個隨機數的隨機數存儲數組,接著對隨機數存儲數組中的存儲單元進行隨機混排,從而可以在接收到隨機數獲取指令時,從隨機數存儲數組中對應的存儲單元中讀取存儲單元存儲的隨機數。由於在隨機數存儲數組中對存儲單元進行了隨機混排,從而實現了在較短的單位時間內多次獲取的隨機數重複率低,且分布均衡,因此本申請的隨機數生成方法具有較好的隨機性。
與上述實施例提供的隨機數生成方法相對應,本發明的一種實施例還提供一種隨機數生成裝置,由於本發明實施例提供的隨機數生成裝置與上述幾種實施例提供的隨機數生成方法具有相同或相似的技術特徵,因此在前述隨機數生成方法的實施方式也適用於本實施例提供的隨機數生成裝置,在本實施例中不再詳細描述。如圖4所示,該隨機數的生成裝置可包括:生成模塊110、隨機混排模塊120、讀取模塊130。
其中,生成模塊110用於生成隨機數存儲數組,其中,隨機數存儲數組包括n個存儲單元,每個存儲單元存儲一個隨機數,其中,n為正整數。
在本申請的一個實施例中,n個存儲單元中存儲的隨機數均不相同。
隨機混排模塊120用於對隨機數存儲數組中的存儲單元進行隨機混排。
讀取模塊130用於接收隨機數獲取指令,並根據隨機數獲取指令從隨機數存儲數組中對應的存儲單元中讀取存儲單元存儲的隨機數。
在本申請的一個實施例中,圖5是根據本申請另一個實施例的隨機數的生成裝置的結構示意圖,即在如圖4所示的基礎上,如圖5所示,隨機混排模塊120具體包括標識值生成子模塊1201和調換子模塊1202。具體地,在本申請的一個實施例中,標識值生成子模塊1201用於根據隨機函數生成隨機值,並根據隨機值生成待調換存儲單元的標識值。調換 子模塊1202用於根據標識值和預設調換規則將待調換存儲單元與目標存儲單元中的隨機數進行調換。
在本申請的一個實施例中,當i大於1且小於n時,標識值生成子模塊1201根據當前時間和第i-1次隨機值生成第i次隨機值,其中,i為調換次數。當i等於1時,標識值生成子模塊1201根據當前時間生成第i次隨機值。
在本申請的一個實施例中,預設調換規則為:當進行第i次調換時,將第i次隨機值對應的存儲單元與第(n+1-i)存儲單元中的隨機數進行調換。
在本申請的一個實施例中,接收隨機數獲取指令後,判斷當前的存儲單元是否為隨機數存儲數組的最後一個,如果不是隨機數存儲數組中的最後一個存儲單元,則繼續讀取下一個存儲單元存儲的隨機數。如果是隨機數存儲數組中的最後一個存儲單元,則需要重新生成新的隨機數存儲數組。
在本申請的一個實施例中,圖6是根據本申請又一個實施例的隨機數的生成裝置的結構示意圖,在如圖4所示的基礎上,讀取模塊130具體包括:獲取子模塊1301和讀取子模塊1302。
具體地,獲取子模塊1301用於根據隨機數獲取指令獲取當前已被讀取的存儲單元的標識值。讀取子模塊1302用於根據當前已被讀取的存儲單元的標識值讀取下一個存儲單元存儲的隨機數。
本申請實施例的隨機數生成裝置,首先生成模塊生成包括n個存儲單元且每個存儲單元存儲一個隨機數的隨機數存儲數組,接著隨機混排模塊對隨機數存儲數組中的存儲單元進行隨機混排,從而讀取模塊可以在在接收到隨機數獲取指令時,從隨機數存儲數組中對應的存儲單元中讀取存儲單元存儲的隨機數。由於隨機混排模塊對隨機數存儲數組中的存儲單元進行了隨機混排,從而實現了在較短的單位時間內多次獲取的隨機數重複率低,且分布均衡。因此本申請的隨機數生成裝置具有較好的隨機性。
圖7是根據本申請一個實施例的隨機數的獲取方法的流程圖,本申請實施例示出的隨機數的獲取方法從獲取方面進行描述。如圖7所示,該隨機數的獲取方法包括以下步驟。
s710,接收隨機數獲取指令,並獲取隨機數存儲數組,其中,隨機數存儲數組包括n個存儲單元,每個存儲單元存儲一個隨機數,且隨機數存儲數組中的n個存儲單元的位置通過隨機混排確定,其中,n為正整數。
在本申請的實施例中,n個存儲單元中存儲的隨機數均不相同。
在本申請的實施例中,n個存儲單元可以分別存儲1至n個整數,從而每個存儲單元存儲的隨機數與其他的均不同。
在本申請的另一個實施例中,隨機數存儲數組的長度是可以配置的,根據需要對隨機 數存儲數組的長度提前進行設置。
在本申請的實施例中,生成隨機數存儲數組後,每個存儲單元具有標識值,根據隨機函數生成隨機值,並根據隨機值生成待調換存儲單元的標識值,從而確定需要調換的存儲單元。
在本申請的實施例中,根據標識值和預設調換規則將待調換存儲單元與目標存儲單元中的隨機數進行調換。
需要說明的是,本申請實施例的將存儲單元中的隨機數進行調換的方法只是預設調換規則的一種,即可以根據實際需要對預設調換規則進行設置,通過不同的調換方法對存儲單元中的隨機數進行調換。
s720,根據隨機數獲取指令從隨機數存儲數組中對應的存儲單元中獲取存儲單元存儲的隨機數。
具體地,在本申請的一個具體實施例中,在接收到隨機數獲取指令之後,根據隨機數獲取指令獲取當前已被讀取的存儲單元的標識值(即上一次被讀取的存儲單元的標識值),根據當前已被讀取的存儲單元的標識值讀取下一個存儲單元存儲的隨機數。
本申請實施例的隨機數獲取方法,首先接收到隨機數獲取指令,接著獲取隨機數存儲數組並通過隨機混排確定隨機數存儲數組中的n個存儲單元的位置,從而根據接收到隨機數獲取指令從隨機數存儲數組中對應的存儲單元中讀取存儲單元存儲的隨機數。由於在隨機數存儲數組中對存儲單元進行了隨機混排,從而實現了在較短的單位時間內多次獲取的隨機數重複率低,且分布均衡。因此本申請的隨機數獲取方法具有較好的隨機性。
與上述實施例提供的隨機數獲取方法相對應,本發明的一種實施例還提供一種隨機數獲取裝置,由於本發明實施例提供的隨機數獲取裝置與上述幾種實施例提供的隨機數獲取方法具有相同或相似的技術特徵,因此在前述隨機數獲取方法的實施方式也適用於本實施例提供的隨機數獲取裝置,在本實施例中不再詳細描述。如圖8所示,該隨機數的獲取裝置可包括:接收模塊210、隨機數存儲數組獲取模塊220、隨機數獲取模塊230。
其中,接收模塊210用於接收隨機數獲取指令。
隨機數存儲數組獲取模塊220用於獲取隨機數存儲數組,其中,隨機數存儲數組包括n個存儲單元,每個存儲單元存儲一個隨機數,且隨機數存儲數組中的n個存儲單元的位置通過隨機混排確定,其中,n為正整數。
在本申請的一個實施例中,n個存儲單元中存儲的隨機數均不相同。
隨機數獲取模塊230用於根據隨機數獲取指令從隨機數存儲數組中對應的存儲單元中獲取存儲單元存儲的隨機數。
在本申請的一個實施例中,圖9是根據本申請另一個實施例的隨機數的獲取裝置的結 構示意圖,即在如圖8所示的基礎上,如圖9所示,隨機數獲取模塊230具體包括第一獲取子模塊2301用於根據隨機數獲取指令獲取當前已被讀取的存儲單元的標識值。第二獲取子模塊2302用於根據當前已被讀取的存儲單元的標識值獲取下一個存儲單元存儲的隨機數。
本申請實施例的隨機數獲取裝置,首先接收模塊接收到隨機數獲取指令,接著隨機數存儲數組獲取模塊獲取隨機數存儲數組並通過隨機混排確定隨機數存儲數組中的n個存儲單元的位置,從而隨機數獲取模塊根據接收到隨機數獲取指令從隨機數存儲數組中對應的存儲單元中讀取存儲單元存儲的隨機數。由於在隨機數存儲數組中對存儲單元進行了隨機混排,從而實現了在較短的單位時間內多次獲取的隨機數重複率低,且分布均衡。因此本申請的隨機數獲取裝置具有較好的隨機性。
在本申請的描述中,需要理解的是,術語「第一」、「第二」僅用於描述目的,而不能理解為指示或暗示相對重要性或者隱含指明所指示的技術特徵的數量。由此,限定有「第一」、「第二」的特徵可以明示或者隱含地包括至少一個該特徵。在本申請的描述中,「多個」的含義是至少兩個,例如兩個,三個等,除非另有明確具體的限定。
在本說明書的描述中,參考術語「一個實施例」、「一些實施例」、「示例」、「具體示例」、或「一些示例」等的描述意指結合該實施例或示例描述的具體特徵、結構、材料或者特點包含於本申請的至少一個實施例或示例中。在本說明書中,對上述術語的示意性表述不必須針對的是相同的實施例或示例。而且,描述的具體特徵、結構、材料或者特點可以在任一個或多個實施例或示例中以合適的方式結合。此外,在不相互矛盾的情況下,本領域的技術人員可以將本說明書中描述的不同實施例或示例以及不同實施例或示例的特徵進行結合和組合。
流程圖中或在此以其他方式描述的任何過程或方法描述可以被理解為,表示包括一個或更多個用於實現特定邏輯功能或過程的步驟的可執行指令的代碼的模塊、片段或部分,並且本申請的優選實施方式的範圍包括另外的實現,其中可以不按所示出或討論的順序,包括根據所涉及的功能按基本同時的方式或按相反的順序,來執行功能,這應被本申請的實施例所屬技術領域的技術人員所理解。
應當理解,本申請的各部分可以用硬體、軟體、固件或它們的組合來實現。在上述實施方式中,多個步驟或方法可以用存儲在存儲器中且由合適的指令執行系統執行的軟體或固件來實現。例如,如果用硬體來實現,和在另一實施方式中一樣,可用本領域公知的下列技術中的任一項或他們的組合來實現:具有用於對數據信號實現邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(pga),現場可編程門陣列(fpga)等。
本技術領域的普通技術人員可以理解實現上述實施例方法攜帶的全部或部分步驟是可以通過程序來指令相關的硬體完成,所述的程序可以存儲於一種計算機可讀存儲介質中,該程序在執行時,包括方法實施例的步驟之一或其組合。
此外,在本申請各個實施例中的各功能單元可以集成在一個處理模塊中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個模塊中。上述集成的模塊既可以採用硬體的形式實現,也可以採用軟體功能模塊的形式實現。所述集成的模塊如果以軟體功能模塊的形式實現並作為獨立的產品銷售或使用時,也可以存儲在一個計算機可讀取存儲介質中。
上述提到的存儲介質可以是只讀存儲器,磁碟或光碟等。儘管上面已經示出和描述了本申請的實施例,可以理解的是,上述實施例是示例性的,不能理解為對本申請的限制,本領域的普通技術人員在本申請的範圍內可以對上述實施例進行變化、修改、替換和變型。