複雜條件下的隨機數

隨即種子:隨機數生成器的初始狀態,根據這個種子和一定的隨機數算法,不停迭代產生隨機數(所以是僞隨機的)。

 erlang的算法用的是Richard A O'Keefe in the standard Prolog library


random模塊基本函數:

seed() -> 返回舊的隨機數生成器種子,並將默認的進程字典的隨機數種子設爲新的
seed0() -> 查看該默認值
seed({A1,A2,A3}) -> 設置隨機數種子,並返回其舊值
一般是用系統時間 {A1,A2,A3}=now() 來設置  ,複雜的方法參考http://blog.csdn.net/shallowgrave/article/details/8330830

uniform(N) 1-N隨機整數
uniform() 0-1隨機浮點數
uniform_s(State0)->-> {float(), State1}  返回0-1的隨機浮點數,和新的隨機狀態
uniform_s(N,State0)-> {float(), State1}  返回1-N的隨機整數,和新的隨機狀態



實例應用

參考 自http://blog.csdn.net/shallowgrave/article/details/8332663


%% 隨機函數,給定a-z的字母範圍,字母可以/不可以重複,生成Count個長度爲Length的字符串(字符串不能重複)
%% 思路:根據輸出字符範圍,字符長度,生成一個以字符範圍爲進制的數,如字符範圍"012345",字符長度爲5,則計算出這個6#44444的數,在這個範圍內隨機取幾個數,

%%再將其轉換爲6進制,即可得出隨機的字符串列表


-define(CharRange,["a","b","c","d"]).
rand_str(Count,Length)->
    Max=list_to_integer(lists:concat(lists:duplicate(Length,integer_to_list((length(?CharRange)-1)))),length(?CharRange)),  
    NL=get_random_list(Max),
    [lists:flatten(io_lib:format("~"++integer_to_list(Length)++"."++integer_to_list(length(?CharRange))++".0B", [N-1]))||N<-lists:sublist(NL,Count)].
get_random_list(Max)->
    T=[{random:uniform(),X}||X<-lists:seq(1,Max)],
    {_Sort,Res}=lists:unzip(lists:keysort(1,T)),
    Res.

結果

181> inter:rand_str(5,3).
["131","122","000","132","002"]


發佈了15 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章