shuffle过程

Shuffle过程

Shuffle(随机重排)是计算机科学中用于将序列元素随机重新排列的过程。其核心目标是保证每个元素出现在任一位置的概率均等,即对于长度为n的序列,每个元素最终位于第i个位置的概率为\\frac{1}{n}

Shuffle的本质基于磁盘划分来解决分布式大数据量的**全局分组、全局排序、重新分区【增大】**的问题。

经典算法:费雪耶茨洗牌(Fisher-Yates Shuffle)

该算法通过逐步交换元素实现高效随机化:

  1. 从最后一个元素开始向前遍历
  2. 对当前元素i(从n-10),随机选择索引j0 \\leq j \\leq i
  3. 交换位置ij的元素

数学表达: P(\\text{元素移至位置}k) = \\prod_{m=k}\^{n-1} \\frac{m}{m+1} \\times \\frac{1}{k} = \\frac{1}{n}

复制代码
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

特性

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)
  • 无偏性:每个排列出现的概率均为\\frac{1}{n!}
应用场景
  1. 机器学习数据集随机化
  2. 卡牌游戏发牌
  3. 随机实验分组
  4. 密码学中的随机序列生成

注意:实际实现需使用密码学安全的随机数生成器(如CSPRNG)以保证不可预测性。

相关推荐
大大大大晴天13 小时前
从 HDFS 到对象存储:计算存储分离如何重塑云原生大数据底座
大数据
用户36105886261221 小时前
SparkStreaming 之 updateStateByKey 算子详解及代码实现
大数据·spark
咖啡屋和酒吧1 天前
“隐性肩颈紧张”正在透支精力|没有酸痛,不代表肩颈处于健康状态
大数据·精选
港股研究社1 天前
专注履约底座,顺丰同城在即时零售效率时代提升增长动能
大数据·人工智能
AI_yangxi1 天前
短视频矩阵系统选哪家
大数据·人工智能·矩阵
lupai1 天前
手机在网状态接口实测效果与质量评估
大数据·python·智能手机·api接口
大模型丫丫2 天前
Hermes Agent:轻量级智能体框架实战指南
大数据·运维·服务器
大大大大晴天2 天前
每天认识一个组件:SQL网关Apache Kyuubi
大数据
2601_962218472 天前
万象生鲜系统冷链物联网接入技术实现生鲜企业温控管理数字化
大数据·运维·微服务·云原生·架构
2601_962074812 天前
大数据-264 实时数仓 - Canal MySQL的binlog研究 存储目录 变动信息 配置MySQL
大数据·数据库·mysql