• Python洗牌算法重写


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

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

     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]

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

    比如洗4副牌,可以开4个线程同时洗,通过并行提高性能。

    也可以一个线程洗,每次以4张或者更大数目切牌,也能达到较好的效果。

  • 相关阅读:
    centos7.3部署memcached服务
    tomcat一闪而过,无法开启
    Windows系统因“CredSSP加密Oracle修正”无法远程连接
    猴子和打字机
    特修斯之船
    爱因斯坦的光线
    10个著名的思想实验(2)
    10个著名的思想实验1
    快速排序
    快速排序的c++实现
  • 原文地址:https://www.cnblogs.com/danxi/p/6397085.html
Copyright © 2020-2023  润新知