关于洗牌算法的一点总结

2023-11-10

之前写斗地主的时候简单写了一个洗牌函数,基本思路是先产生一个顺序数组,遍历数组,每次产生一个(1~n)随机数,把这个随机数作为下标取出数组里的数与当前位置的数交换。
当时也没多想,反正能打乱数组顺序就行,后来跟师兄吃饭的时候聊起来,说到面试里也出现过洗牌算法,问我怎么保证这个算法得到的数组是完全随机的(即等概),我一时竟不知怎么证明。
回来后上网找了一下,才发现原来这个算法竟然不是完全随机的。
下面是一些思考和总结:(假设牌数为n)
  1. 首先最容易想到的一种等概的算法就是每次从数组里随机不放回地取出一个数,循环n次,刚好把数取完。
这个算法难点在于如何实现不放回。常规做法有两种:a.删掉。但如果是采用数组方式存储需要移动后面的所有数,而如果采用链表每次遍历也会影响效率,所以这种方式不可取。b. 标记。如果取到的数已标记,则重新产生随机数。这种方式在于越到后面,标记的位置越多,产生新的随机数越难,也不可取。
然后我就看到了这篇:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于洗牌算法的一点总结 的相关文章

随机推荐

  • linux下SD卡mount的问题

    最近发现嵌入式开发板上 有的SD卡 8G SDHC 可以mount 有的则失败 2G SD 仔细看log信息 发现有如下区别 mount成功时 mmc0 host does not support reading read only swi
  • 【JavaScript】利用JS实现柱形统计图

    CSS代码部分
  • 嵌入式(信号机制)

    信号机制 概念 信号是在软件层次上对中断机制的一种模拟 是一种异步通信方式 所有信号的产生及处理全部都是由内核完成的 信号的产生 1 按键产生 2 系统调用函数产生 比如raise kill 3 硬件异常 4 命令行产生 kill 5 软件
  • 拟合工具箱的几个误差参数说明

    使用过Matlab的拟合 优化和统计等工具箱的网友 会经常遇到下面几个名词 SSE 和方差 误差平方和 The sum of squares due to errorMSE 均方差 方差 Mean squared errorRMSE 均方根
  • IDEA打开启动Vue项目和Vue文件

    一般前端Vue都是用VsCode专门用来编辑 今天突发奇想想用IDEA去编辑 首先把项目从git下拉下来在IDEA中打开 在IDEA打开终端运行相关命令 打开终端 也可以通过alt F12快捷键 终端如下 自行根据需要输入命令即可 相关代码
  • SMB、FTP、DNS、等六个服务总结

    一 SMB服务 1 SMB服务功能 不同系统主机之间实现文件 打印机等资源共享 2 SMB服务主配置文件路径 etc samba smb conf 3 SMB服务启动 重启 停止 方法 service smb start restart s
  • 如何使用docker和docker-compose在本地Testnet上开发EOS区块链

    EOS区块链的开发并不是立竿见影的 因为需要一些非显而易见的组件 需要对它们进行配置和协同工作 nodeos 块生成器守护程序 keosd 钱包守护进程 存储私钥 eosio cpp 智能合约编译器 eosio token 平台的参考标记
  • chapter1 静态分析技术-08PE文件分析 PEview

    1 下载PEview peview exe下载 peview exe绿色版 peview exev0 9 8 0绿色中文版 华军软件园https www onlinedown net soft 977166 htm 2 解压后打开PEvie
  • OTL、OCL、BTL电路及其判断方法(转)

    OTL OCL BTL电路及其判断方法 OTL Output Transformer Less 电路 称为无输出变压器功放电路 是一种输出级与扬声器之间采用电容耦合而无输出变压器的功放电路 它是高保真功率放大器的基本电路之一 但输出端的耦合
  • 鱼和熊掌不可兼得:Spring boot3,Swagger3(使用Mybatis-Plus搭建框架)

    文章写于2023年7月1日 目前使用的配置尽量用最新的 如果晚于这个日期很久 请参考新的配置 使用MyBatis plus搭建框架后使用swagger或者采用的Spring 3后使用swagger 3 启动项目出现如下错误 Type jav
  • 计算机视觉(二):图像检索以及基于图像描述符的搜索

    1 引言 在图像识别中 我们通常将图片的特征提取出来 并使用这些主要特征来进行识别 在OpenCV中提供了许多特征检测算法 下面让我们来学习一下怎么使用这些算法 2 特征定义 粗略的讲 特征就是有意义的图像区域 该区域具有独特性或易于识别性
  • C++14 新特性

    一 新的语言特性 1 泛型的 Lambda 函数 在 C 11 中 lambda 函数的形式参数需要被声明为具体的类型 C 14 放宽了这一要求 允许 lambda 函数的形式参数声明中使用类型说明符 auto auto lambda au
  • Alist V3版本 API使用文档 -个人整理

    Alist V3 API 整理 Alist V3是一个支持多种存储 支持网页浏览和 WebDAV 的文件列表程序 由 gin 和 Solidjs 驱动 Alist的官方文档提供了V2版本的API说明 但对于最新的V3版本并没有 这里个人整理
  • 主析取范式与主合取范式原理探究

    主析取范式 对任意一个命题公式来说 主析取范式与主合取范式都是唯一的 命题变元指原子化的 P Q命题 极小项的定义 包含全部N个命题变元的合取式 称其为极小项 且N个命题变元中 每个变元与它的否定不能同时存在 但两者中必有一个出现且仅出现一
  • 怎样加入马云,马化腾,李彦宏的微信

    让马化腾出如今你的微信聊天里面 首先声明不是 PS 我不会 PS 的 这是程序截图 例如以下图 程序源码 http git oschina net LittleDY isWeiXin 我在他的基础上 又一次设计了图片和聊天记录 图片来自百度
  • C++ 内存模型

    C 内存模型 未完 数据存储 程序数据段 程序代码段 stack栈内存 栈内存属于执行期函数 编译时确定大小 函数执行时栈空间自动分配 结束时栈空间自动销毁 栈对象是线性分配 连续排列 没有内存碎片化效应 栈内存具有函数本地性 不存再多线程
  • mysql 数据库合并命令_mysql多源复制及合并数据库

    背景 机器1 10 1 6 99 机器2 10 1 6 100 机器3 10 1 6 101 1 分别在三台主机上安装mysql数据库 1 配置yum源 root master lucky front cat etc yum repos d
  • Python 发邮件

    来源 微信公众号Crossin的编程教室 0 前言 发送电子邮件是个很常见的开发需求 比如你写了个监控天气的脚本 发现第二天要下雨 或者网站上关注的某个商品降价了 就可以发个邮件到邮箱来提醒自己 使用 Python 脚本发送邮件并不复杂 不
  • maven学习笔记

    1 什么是Maven maven是跨平台的项目管理工具 主要服务于基于java平台 包括j2ee和j2se 的项目构建 依赖管理和项目信息管理 可以帮助开发者管理jar包 一步构建项目 从清理 编译 测试 报告直接到打包 部署 2 Mave
  • 关于洗牌算法的一点总结

    之前写斗地主的时候简单写了一个洗牌函数 基本思路是先产生一个顺序数组 遍历数组 每次产生一个 1 n 随机数 把这个随机数作为下标取出数组里的数与当前位置的数交换 当时也没多想 反正能打乱数组顺序就行 后来跟师兄吃饭的时候聊起来 说到面试里