news 2026/6/12 23:27:49

Fisher-Yates 洗牌算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Fisher-Yates 洗牌算法

Fisher-Yates 洗牌算法(又称 Knuth 洗牌算法)是一种能生成有限序列无偏全排列的高效随机化算法,现代版为原地操作,时间复杂度 O (n)、空间复杂度 O (1),由 Fisher 和 Yates 于 1938 年提出,经 Durstenfeld 与 Knuth 改进普及。


核心原理与步骤

核心是 “从后向前遍历,当前元素与前序随机位置交换”,确保每个元素到任意位置的概率均为 1/n,所有 n! 种排列等可能。

  1. 设数组长度为 n,索引从 0 到 n-1。
  2. 初始化 i = n - 1,向前遍历至 i = 1。
  3. 对每个 i,生成 [0, i] 内的均匀随机整数 j。
  4. 交换 arr [i] 与 arr [j]。
  5. i 减 1,重复至遍历结束。

伪代码

function fisherYatesShuffle(arr): n = arr.length for i from n-1 downto 1: j = random integer in [0, i] swap arr[i] and arr[j] return arr

代码实现(Python)

import random def fisher_yates_shuffle(arr): n = len(arr) for i in range(n-1, 0, -1): j = random.randint(0, i) arr[i], arr[j] = arr[j], arr[i] return arr # 示例 if __name__ == "__main__": test_arr = [1, 2, 3, 4, 5] shuffled_arr = fisher_yates_shuffle(test_arr) print("Shuffled array:", shuffled_arr)

数学正确性(归纳法简述)

  • 基础步:n=1 时,唯一排列,概率 1,成立。
  • 归纳步:假设 n=k 时成立,当 n=k+1,第 k+1 个元素被换到位置 i 的概率为 1/(k+1);前 k 个元素仍保持均匀分布,故整体均匀。最终每个排列概率为 1/(n!)。

关键特性与对比

特性Fisher-Yates(现代)朴素洗牌(如每次全数组随机交换)
时间复杂度O(n)O (n)(但概率不均)
空间复杂度O (1)O(1)
无偏性是(所有排列等可能)否(概率偏倚)
适用场景数组、列表等可随机访问结构非严谨场景

常见误区与注意事项

  1. 随机数范围错误:若 j 取 [0, n-1] 而非 [0, i],会导致概率偏倚。
  2. 伪随机数质量:需使用高质量随机数生成器(如 Python 的 secrets 模块),避免周期过短或分布不均。
  3. 遍历方向:从后向前是为了原地操作,从前向后也可实现,但需额外空间或调整逻辑。

应用场景

游戏开发:打乱牌组、随机生成敌人位置、随机道具掉落顺序。

数据采样:无放回随机抽样、交叉验证中划分训练 / 测试集。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 20:12:41

哔哩下载姬完全攻略:5步解锁B站视频永久收藏秘籍

哔哩下载姬完全攻略:5步解锁B站视频永久收藏秘籍 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&#xff09…

作者头像 李华
网站建设 2026/6/9 21:15:30

DLSS Swapper终极指南:3步让游戏画质飞跃提升

DLSS Swapper终极指南:3步让游戏画质飞跃提升 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 还在为游戏画面模糊、细节丢失而困扰吗?想要在不升级硬件的情况下获得更清晰的视觉体验&#xff1f…

作者头像 李华
网站建设 2026/6/9 21:38:07

CSANMT模型在学术论文写作中的辅助应用技巧

CSANMT模型在学术论文写作中的辅助应用技巧 🌐 AI 智能中英翻译服务 (WebUI API) 📖 项目简介 在当前全球科研交流日益频繁的背景下,高质量的中英翻译能力已成为学术工作者不可或缺的核心技能。然而,传统机器翻译工具往往存在语义…

作者头像 李华
网站建设 2026/6/9 21:37:25

翻译质量提升300%:CSANMT模型在电商产品描述中的应用

翻译质量提升300%:CSANMT模型在电商产品描述中的应用 引言:AI智能翻译如何重塑跨境电商内容生态? 在全球化电商快速发展的背景下,高质量的多语言产品描述已成为品牌出海的核心竞争力之一。传统机器翻译(如Google Trans…

作者头像 李华
网站建设 2026/6/12 22:58:25

LeagueAkari游戏辅助工具全面使用手册:从基础配置到高级应用

LeagueAkari游戏辅助工具全面使用手册:从基础配置到高级应用 【免费下载链接】LeagueAkari ✨兴趣使然的,功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari Le…

作者头像 李华
网站建设 2026/6/12 11:37:23

TranslucentTB启动失败终极指南:3步诊断与完整修复方案

TranslucentTB启动失败终极指南:3步诊断与完整修复方案 【免费下载链接】TranslucentTB 项目地址: https://gitcode.com/gh_mirrors/tra/TranslucentTB 当您满怀期待地启动TranslucentTB,却遭遇"Microsoft.VCLibs.140.00_8wekyb3d8bbwe not…

作者头像 李华