news 2026/5/1 10:03:30

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/5/1 9:15:53

G-Helper终极指南:释放华硕笔记本隐藏性能的完全攻略

G-Helper终极指南:释放华硕笔记本隐藏性能的完全攻略 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址…

作者头像 李华
网站建设 2026/5/1 7:20:01

CSANMT模型蒸馏:小模型保留大模型能力

CSANMT模型蒸馏:小模型保留大模型能力 🌐 AI 智能中英翻译服务 (WebUI API) 项目背景与技术挑战 在多语言交流日益频繁的今天,高质量的机器翻译系统已成为跨语言沟通的核心基础设施。传统神经机器翻译(NMT)模型虽然取…

作者头像 李华
网站建设 2026/4/28 15:20:31

SillyTavern实战精通:从环境部署到深度定制的完整指南

SillyTavern实战精通:从环境部署到深度定制的完整指南 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 技术架构概览 SillyTavern作为一个专为高级用户设计的LLM前端工具&#…

作者头像 李华
网站建设 2026/5/1 7:24:36

百度网盘密码智能破解:5秒获取加密资源的终极方案

百度网盘密码智能破解:5秒获取加密资源的终极方案 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘加密资源而苦恼吗?每次遇到"请输入提取码"的提示,是否让你感到无…

作者头像 李华
网站建设 2026/5/1 6:18:29

G-Helper实战指南:华硕笔记本轻量化控制的全能解决方案

G-Helper实战指南:华硕笔记本轻量化控制的全能解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地…

作者头像 李华
网站建设 2026/5/1 7:24:45

DownKyi效率革命:B站视频下载的完整手册

DownKyi效率革命:B站视频下载的完整手册 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等)。 项…

作者头像 李华