洗牌算法浅试
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]
后面再琢磨能不能降低一下时间复杂度。
以上是关于洗牌算法浅试的主要内容,如果未能解决你的问题,请参考以下文章