洗牌算法浅试

Posted 丹西

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洗牌算法浅试相关的知识,希望对你有一定的参考价值。

Python有自带的洗牌算法函数shuffle().

 

自己也通过学习也琢磨了一下它的实现,然后给出一个时间复杂度O(n),空间复杂度O(1)的例子:

 1 import random
 2 
 3 def shuffle1(lst) :
 4     l = len(lst)
 5     if l <= 1 : return lst
 6     
 7     i = 0
 8     while l > 1 :
 9         j = int(random.random() * l)
10         t = lst[i]
11         lst[i] = lst[i+j]
12         lst[i+j] = t
13         i = i + 1
14         l = l - 1
15         
16     return lst

执行结果:

 1 b = [0,1,2,3,4,5,6,7,8,9]
 2 print shuffle1(b)
 3 
 4 [9, 5, 7, 1, 8, 2, 3, 6, 0, 4]
 5 [2, 4, 7, 3, 8, 5, 6, 9, 0, 1]
 6 [3, 0, 8, 7, 1, 6, 5, 4, 9, 2]
 7 [5, 8, 2, 9, 7, 1, 4, 0, 3, 6]
 8 [7, 8, 0, 3, 9, 6, 1, 2, 4, 5]
 9 [2, 4, 8, 7, 3, 6, 1, 0, 9, 5]
10 [2, 5, 9, 8, 4, 3, 0, 6, 1, 7]
11 [6, 0, 1, 9, 2, 3, 4, 7, 5, 8]
12 [5, 4, 0, 8, 6, 7, 9, 2, 3, 1]
13 [3, 9, 2, 8, 5, 7, 6, 1, 0, 4]

后面再琢磨能不能降低一下时间复杂度。

以上是关于洗牌算法浅试的主要内容,如果未能解决你的问题,请参考以下文章

游戏常用算法-洗牌算法

洗牌算法

洗牌算法

VB洗牌算法产生随机数组

扑克牌的完美洗牌算法

随机洗牌算法Knuth Shuffle和错排公式