复杂条件下的随机数

来源:互联网 发布:淘宝上建店铺 编辑:程序博客网 时间:2024/06/05 02:51

随即种子:随机数生成器的初始状态,根据这个种子和一定的随机数算法,不停迭代产生随机数(所以是伪随机的)。

 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"]


0 0