erlang random sort
来源:互联网 发布:ppt转换视频软件 编辑:程序博客网 时间:2024/06/05 14:28
a.单进程10万次随机3个元素.
[{"192.168.17.102",27017}, {"192.168.17.102",27018}, {"192.168.17.102",27019}]
b.随机10个元素
[1,2,3,4,5,6,7,8,9,10]
c.随机100个元素
lists:seq(1, 100).
1.https://erlangcentral.org/wiki/index.php/RandomShuffle
We associate each element in the list with a random number. The list is then sorted based on the generated number.We repeat this process log(n) times to ensure a fair shuffle.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% shuffle(List1) -> List2%% Takes a list and randomly shuffles it. Relies on random:uniform%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% shuffle(List) ->%% Determine the log n portion then randomize the list. randomize(round(math:log(length(List)) + 0.5), List). randomize(1, List) -> randomize(List);randomize(T, List) -> lists:foldl(fun(_E, Acc) -> randomize(Acc) end, randomize(List), lists:seq(1, (T - 1))). randomize(List) -> D = lists:map(fun(A) -> {random:uniform(), A} end, List), {_, D1} = lists:unzip(lists:keysort(1, D)), D1.
a.350~370ms b.1600ms c.26800ms
2.
rotate_new(RotatedList, [L]) ->[L | RotatedList];rotate_new(RotatedList, List) ->R = random:uniform(length(List)),L = lists:nth(R, List),rotate_new([L | RotatedList], List--[L]).
a.90ms b.410ms c.13550ms
3. http://stackoverflow.com/questions/8817171/shuffling-elements-in-a-list-randomly-re-arrange-list-elements
1> L = lists:seq(1,10).[1,2,3,4,5,6,7,8,9,10]
Associate a random number R with each element X in L by making a list of tuples {R, X}. Sort this list and unpack the tuples to get a shuffled version of L.
1> [X||{_,X} <- lists:sort([ {random:uniform(), N} || N <- L])].[1,6,2,10,5,7,9,3,8,4]2>
a.120ms b.420ms c.5100ms
4. http://stackoverflow.com/questions/8817171/shuffling-elements-in-a-list-randomly-re-arrange-list-elements
list([]) -> [];list([Elem]) -> [Elem];list(List) -> list(List, length(List), []).list([], 0, Result) -> Result;list(List, Len, Result) -> {Elem, Rest} = nth_rest(random:uniform(Len), List), list(Rest, Len - 1, [Elem|Result]).nth_rest(N, List) -> nth_rest(N, List, []).nth_rest(1, [E|List], Prefix) -> {E, Prefix ++ List};nth_rest(N, [E|List], Prefix) -> nth_rest(N - 1, List, [E|Prefix]).
For example, one could probably do away with the ++
operation in nth_rest/3
. You don't need to seed the random algorithm in every call to random
. Seed it initially when you start your program, like so: random:seed(now())
. If you seed it for every call touniform/1
your results become skewed (try with [shuffle:list([1,2,3]) || _ <- lists:seq(1, 100)]
).
a.130ms b.410ms c.8500ms
5.
shuffle(L) -> shuffle(list_to_tuple(L), length(L)).shuffle(T, 0)-> tuple_to_list(T);shuffle(T, Len)->Rand = random:uniform(Len),A = element(Len, T),B = element(Rand, T),T1 = setelement(Len, T, B),T2 = setelement(Rand, T1, A),shuffle(T2, Len - 1).
a.130ms b.390ms c.5850
- erlang random sort
- Erlang的random:uniform()函数
- Erlang的random:uniform()函数
- Quick Sort and Random Quick Sort
- [erlang] 为什么叫random的随机数是伪随机数
- [组合 容斥] Project Euler 595 Incremental Random Sort
- random
- Random();
- random
- Random
- Random
- random
- Random
- Random
- Random
- Random
- Random
- Random
- Cocosd-x设计模式之六 :组合模式
- c++ string format
- DI依赖注入
- s3c2440的LED点灯裸机C程序
- 数据库质疑修复总结 For SQL Server 2000/2005/2008/2008R2
- erlang random sort
- LeetCode (U)
- oracle11G空表默认不导出怎么解决
- Android--WindowManager.LayoutParams(上)
- 计算机系统会议论文是如何评审的 -- 读后笔记
- Cocosd-x设计模式之七 :中介者模式
- SQL字段类型text执行replace
- sql server 2005本地修改密码
- .net运行 访问 IIS 元数据库失败。