在项目中需要对list进行随机shuffle,但是在erlang的stdlib中没有这个函数。
因此需要自己实现一把。
参考google两种实现:
版本1(速度快,随机化不好):
shuffle_v1(L) ->
List1 = [{random:uniform(), X} || X <- L],
List2 = lists:keysort(1, List1),
[E || {_, E} <- List2].
很简单为每个元素添加一个random的次序,随后通过sort进行排序,最后获取最终结果。
版本2(速度慢,随机化好):
采用:Fisher-Yates shuffle
参考:http://www.itl.nist.gov/div897/sqg/dads/HTML/fisherYatesShuffle.html
shuffle_v2([]) ->
[];
shuffle_v2(L = [_]) ->
L;
shuffle_v2(L) ->
shuffle1(1, L, length(L)).
shuffle1(Len, L, Len) ->
L;
shuffle1(Cur, L, Len) ->
S = Cur + round((Len - Cur) * random:uniform()),
L2 = swap_element(L, Cur, S),
shuffle1(Cur + 1, L2, Len).
swap_element(L, N, N) ->
L;
swap_element(L, N1, N2) ->
Z = lists:zip(lists:seq(1, length(L)), L),
{value, E1} = lists:keysearch(N1, 1, Z),
{value, E2} = lists:keysearch(N2, 1, Z),
Z2 = lists:keyreplace(N1, 1,
lists:keyreplace(N2, 1, Z, E1),
E2),
{_, Result} = lists:unzip(Z2),
Result.
一句话描述算法:
Randomly permute N elements by exchanging each element ei with a random element from i to N. It consumes Θ(N log N) bits and runs in linear time.
分享到:
相关推荐
这时就需要以相同的顺序打乱两个list,那么在python中如何实现呢?可以通过设置相同的随机种子,再shuffle的方式来实现。 代码如下: import random randnum = random.randint(0,100) random.seed(randnum)
今天小编就为大家分享一篇Python使用random.shuffle()打乱列表顺序的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
random.shuffle(dessert) print(dessert) 运行结果如下: 注:列表打印出来是洗牌后的结果,顺序完全不一样。如果写一个牌类游戏,可以用这个功能来对一个代表一副牌的列表洗牌。 以上这篇在Python中实现
代码 复制代码 代码如下: #!/usr/bin/env python #coding=utf-8 import random #生成[0, 1)直接随机浮点数 ...random.shuffle(list) print list 输出 复制代码 代码如下: 0.787074152336 95 1 [4, 5, 2, 3, 1]
perl_list_helpers_xs姓名List::Helpers::XS - Perl extension to provide some usefull functions with arrays概要 use List::Helpers::XS qw/ :shuffle :slice / ; my @slice = random_slice(\ @list , $size ); ...
在机器学习或者深度学习中,我们常常碰到一个问题是数据集的切分。比如在一个比赛中,举办方给我们的只是一个带标注的训练集和不带标注的测试集。其中训练集是用于训练,而测试...def split(full_list,shuffle=False,r
有的时候需要将两组数据,比如特征和标签放在一起随机打乱, 但是又想记录...random.Random(100).shuffle(c) print(c) a, b = zip(*c) print(a) print(b) 输出: [('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5),
今天踩过的两个小坑: 一.用random的shuffle打乱数据集中的数据-标签对 ...去掉index=random.shuffle(index)等号前面的值,这样利用shuffle函数就可以直接将index的内容打乱,并且不返回任何值。 因此以
public static System.Collections.ArrayList shuffle(System.Collections.ArrayList list)//洗牌 { System.Random r = new Random(); for (int i = 0; i ; i++) { int rightOrRight = r.Next(1, 3); Poker[]...
function shuffle_assoc($list) { if (!is_array($list)) return $list; $keys = array_keys($list); shuffle($keys); $random = array(); foreach ($keys as $key) $random[$key] = $list[$key]; return $...
>>> random.shuffle(x) #打乱顺序 >>> x [2, 4, 5, 9, 3, 7, 8, 0, 6, 1] >>> max(x) #返回最大值 9 >>> min(x) #返回最小值 0 >>> sum(x) #所有元素之和 45 >>> len(x) #所有元素个数 10 >>> list(zip(x,[1]*10)) #...
返回一个位于 sequence 中的元素,其中,sequence 为一个有序序列,如 list、string 或者 tuple 等类型; randrange([start], stop[, step]) 等效于 choice(range([start], stop[, step])); shuffle(sequ
本文实例讲述了python实现获取序列中最小的几个元素。分享给大家供大家参考。 具体方法如下: ...random.shuffle(alist) print 'the origin list is',alist print 'the min in the list is' for x
每次抽取后都重新洗牌。计算10000次随机抽取可得到同花的几率。我做的比较复杂,分别累计了四种花色分别出现了几次 import random list=["2","3","4",'5','6','7','8','9','10',"J","Q",... random.shuffle(list3) l
训练 ...--drop_list 是否丢弃多余的图 --shuffle 是否打乱图片 --save_csv 是否保存到csv文件 --random_seed 是否随机种子 --seed 指定种子的值 --learn_rate_decay 是否使用学习率衰减 --decay_rate
The random.shuffle() Function x Tips for Inventing Your Own Games x Chapter 11 - AI Simulation x "Computer vs. Computer" Games x Percentages x Integer Division x The round() Function x Learning ...
8. random_shuffle 32 9. partition / stable_partition 33 10. sort / stable_sort 33 11. partial_sort 34 12. nth_element 34 13. lower_bound / upper_bound //要求区间有序 34 14. binary_search //要求有序...
6.7.7 random_shuffle 383 6.7.8 partial_sort / partial_sort_copy 386 6.7.9 sort 389 6.7.10 equal_range(应用于有序区间) 400 6.7.11 inplace_merge(应用于有序区间) 403 6.7.12 nth_element 409 6.7....
6.7.7 random_shuffle 383 6.7.8 partial_sort / partial_sort_copy 386 6.7.9 sort 389 6.7.10 equal_range(应用于有序区间) 400 6.7.11 inplace_merge(应用于有序区间) 403 6.7.12 nth_element 409 6.7....
07.16 随机数函数 random() 函数.png 07.17 随机数函数 seed() 函数.png 07.18 随机数函数 shuffle() 函数.png 07.19 随机数函数 uniform() 函数.png 07.20 三角函数 acos() 函数.png 07.21 三角函数 asin() ...