洗牌算法(Knuth-Durstenfeld Shuffle)
1 原理
洗牌算法的思想很简单。给你一个数组[1,2,3,4,5,6,7][1,2,3,4,5,6,7][1,2,3,4,5,6,7]让你洗一洗,思路就是交换,从第一个元素开始,与包括它以及在它之后的所有元素进行交换。然后在交换第二个数,以此类推。
2 实现
def shuffle(arr):n = len(arr)for i in range(n):# 生成随机数j = random.randint(i, n - 1)# 交换元素arr[i], arr[j] = arr[j], arr[i]
3 python random.shuffle
python的random库中的shuffle函数就是将所有元素随机排序。该函数没有返回值。
import randomarr = [1, 2, 3, 4]
random.shuffle(arr)
print(arr)
输出:
[3, 1, 4, 2]
4 练习
一个练习:Leetcode 384.打乱数组
洗牌算法(Knuth-Durstenfeld Shuffle)相关推荐
- leetcode 519. Random Flip Matrix | 519. 随机翻转矩阵(洗牌算法Fisher–Yates shuffle)
题目 https://leetcode.com/problems/random-flip-matrix/ 题解 看了答案: 洗牌算法 Fisher–Yates shuffle Fisher–Yates ...
- 随机洗牌算法之Knuth-Durstenfeld Shuffle
问题 设计一个公平的洗牌算法 问题分解 首先,必然明确这是一个随机算法 其次,要考虑公平 问题剖析 关于随机 看到随机我们大多数时候想起来的是,把所有的数都放到一个数组里,每次取两个数进行交换,随机 ...
- 从洗牌算法谈起--Python的random.shuffle函数实现原理
此文首发于我的个人博客:从洗牌算法谈起–random.shuffle实现原理 - zhang0peter的个人博客 昨天看知乎的时候看到了洗牌算法(Knuth shuffle, 最初版本叫Fisher ...
- 高纳德( Knuth)随机置乱算法,洗牌算法,等概率打乱顺序
先看道题: 从1-100里面随机选出10个的数,你可能会先将100个数存在数组中,用到Math.random函数得到随机下标,从而选出数. 那么如果让你选出10个不同的数呢,你可能会将选出的数先存起来 ...
- python实现洗牌算法_洗牌算法及 random 中 shuffle 方法和 sample 方法浅析
对于算法书买了一本又一本却没一本读完超过 10%,Leetcode 刷题从来没坚持超过 3 天的我来说,算法能力真的是渣渣.但是,今天决定写一篇跟算法有关的文章.起因是读了吴师兄的文章 <扫雷与 ...
- 随机洗牌算法+matlab,洗牌算法及 random 中 shuffle 方法和 sample 方法浅析
对于算法书买了一本又一本却没一本读完超过 10%,Leetcode 刷题从来没坚持超过 3 天的我来说,算法能力真的是渣渣.但是,今天决定写一篇跟算法有关的文章.起因是读了吴师兄的文章<扫雷与算 ...
- 扫雷与算法:如何随机化的布雷(二)之洗牌算法
前言:扫雷与算法:如何随机化的布雷(一) 先来思考一个问题:有一个大小为 100 的数组,里面的元素是从 1 到 100 按顺序排列,怎样随机的从里面选择 1 个数? 最简单的方法是利用系统的方法 M ...
- 卡牌大师:玩转“洗牌算法”,幸运女神在微笑 (*^_^*)
关注并将「趣谈前端」设为星标 每日定时推送技术干货/优秀开源/技术思维 我们目前的世界仍是基于 P ≠ NP,所以有理由相信:只要我们把牌洗的足够乱,幸运女神或许就会降临.(生活就像英雄联盟,运气游戏 ...
- Unity | 三种洗牌算法
拓展资料:C#Shuffle算法(洗牌算法.抽样算法) - 简书 代码: using System.Collections.Generic; using UnityEngine;/** * Write ...
最新文章
- 利用计算机技术执行去自动化,计算机技术和自动化的关系.doc
- 以后所有内容均以摘要方式发布
- 玩转智能路由器-WRTnode开发板[接上网线]
- java mvc 导入_Java SpringMVC文件导入和导出
- P2371 [国家集训队]墨墨的等式 同余最短路
- OC 中NSString与NSString 的比较
- keepalived VS zookeeper
- AD的命名规则 AD常用产品型号命名规则
- github入门到上传本地项目(转)
- ios 融云 重写对话列表_iOS集成融云SDK即时通讯
- php++仿网页版微信,【原创】html5高仿微信网页版|h5仿微信聊天实战
- 计算机属性中没有端口,电脑设备管理器里没有显示COM2端口是什么原因
- Tolua使用笔记(上)
- Git 之 多人协同开发工作流
- PySide6 : Qt for Python 教程
- java中解耦合_简单分析程序中耦合和解耦合
- GBase 8a集群运行报错BLK_TEMP: return NULL in alloc
- rust怎么上邮轮_实拍沉入海底的泰坦尼克号:被海水腐蚀严重,船体将于10年后消失...
- Asciinema - 终端日志记录神器,机器学习开发者的福音
- 【文件上传】——文件上传后需要重启服务器方可访问到异常