-module(t).
-export([rand/1,rand2/1]).
rand2(List)->
rand2(List,[],[]).
rand2([H|T],Result,Surplus)->
case rand:uniform() > 0.5 of
true -> rand2(T,[H|Result],Surplus);
_ -> rand2(T,Result,[H|Surplus])
end;
rand2(_,Result,Surplus)->
Result++Surplus.
rand(List) ->
Len = length(List),
rand_list(List,Len-1,Len,[]).
rand_list(_,0,_,Result) ->
Result;
rand_list([H|T],SelectNum,Len,Result) ->
case rand:uniform() =< SelectNum / Len of
true ->
rand_list(T,SelectNum-1,Len-1,[H|Result]);
_ ->
rand_list(T,SelectNum,Len-1,Result)
end.
一个时间复杂度为O(n)的取列表随机N元素算法