随机排列与Fisher-Yates算法

目录

[1. 随机排列](#1. 随机排列)

[2. 均匀随机排列](#2. 均匀随机排列)

[3. Fisher-Yates Shuffle: Original Version](#3. Fisher-Yates Shuffle: Original Version)

[4. Fisher-Yates Shuffle: Modern Version](#4. Fisher-Yates Shuffle: Modern Version)


1. 随机排列

将上面7张牌进行随机排列,可能会得到下面结果。

2. 均匀随机排列

上面是集合 的均匀随机排列。

若一个集合含有 个元素,则共有 种排列。

  • 从 种可能的序列中等概率随机选取一个。
  • 某个元素出现在 个任意位置上的概率相等。
  • 某个位置上为 个任意元素之一的概率相等。

3. Fisher-Yates Shuffle: Original Version

进行 轮循环,每轮循坏从原序列随机抽取一个元素,写入排列数组中,原序列中的空位由被抽取元素的后面元素都左移一位补平。

时间复杂度:

4. Fisher-Yates Shuffle: Modern Version

cpp 复制代码
void permute(int arr[], int n){
     for (int i=0; i<=n-2; i++){
     // k从{0,1,..., n-i-1}中随机取样
     int k = uniform(n-i);
     // j的范围{i, i+1, ..., n-1}
     int j = i + k;
     // 交换arr[i]和arr[j]
     swap(arr[i],arr[j]);
     }
}

第一轮循环中,随机抽取一个元素,与第一个元素交换,并且固定第一个元素。

第二轮循环中,把原来的第二个元素当作第一个元素,随机抽取一个元素,与第一个元素交换位置,并且固定第一个元素。

以此类推,第 轮循环中,把原来的第 个元素当作第一个元素,随机抽取一个元素,与第一个元素交换位置,并且固定第一个位置。

时间复杂度:

相关推荐
Easy_API5 小时前
2.8万亿参数,编程反超GPT-6 Astra:Kimi K3.1 Pro把开源模型推到了哪一步
大数据·人工智能·gpt·深度学习
GlobalInfo5 小时前
2026年机器人多指灵巧手市场分析报告——涵盖行业调查、趋势分析与发展前景
大数据·人工智能·microsoft·微服务·机器人
紧跟先前的步伐6 小时前
Go AI Agent 实战 24|工具系统工程化收尾与阶段验收
人工智能·ai·golang·1024程序员节
释厄6236 小时前
AI学习层更新与跨体转移律——人类社会同构·不缺理解缺 U
人工智能·学习
老金带你玩AI7 小时前
集万家所长,一键复制的Agent.md!
人工智能
ZhuoAIStage7 小时前
舞台工艺多专业审图提速:用 AI 智能体编排 A+B+C+G 四段读图流水线
人工智能·自动化·工作流编排·舞台工艺·审图智能体
小奶包他干奶奶7 小时前
AI学习——1、机器学习概念
人工智能·机器学习
展讯快报8 小时前
悬浮提词器免费App评估报告:说得AI的免费策略与可用性分析
人工智能
Yuzhiyuxia8 小时前
【AI Agent面试系列】AI Agent记忆机制知识点1
人工智能·面试·职场和发展
2601_965448878 小时前
AI视频制作:做系列历史人物视频音色不搭,AI 音色克隆的方法实测
人工智能·音视频