使用方法(3 步)
- 选择列表模式(按大小 / 自定义)并设置模拟次数。
- 点击 对比,用同样设置跑两种洗牌。
- 查看热力图和统计,然后复制仅设置的 URL 或下载报告。
看清洗牌偏差
洗牌偏差对比工具
朴素交换每一步都在全范围取随机索引;Fisher–Yates 每一步缩小范围,在随机整数均匀时能得到均匀排列。
允许重复。分析会用行号(1..n)作为标识。
这是 JavaScript 中常见的反模式。结果依赖引擎,通常有偏差。
概览
提示:这里的 χ² 和 df 是直观用的近似(因为存在约束,并不严格)。不要把它当作正式证明。
图表
图例:naive=红、FY=绿、sort=紫(开启时)。
曲线是 df = n² - 1(近似)的 χ² 密度。竖线表示观测到的 χ²。
此图按 |i - j|(与对角线的距离)汇总。大于 1 表示“太靠近原位置”。
结果
每一侧都显示位置矩阵(项目 i → 位置 j)的统计结果。
朴素洗牌
Fisher–Yates
sort(() => random - 0.5)
常见问题
Fisher–Yates 一定没有偏差吗?
如果 randomInt 是均匀的,就没有算法偏差。把随机字节映射到整数范围时要避免取模偏差。
为什么不推荐 sort(() => random - 0.5)?
它有偏差且依赖 JS 引擎。你可以在本页勾选它,看看你的浏览器会出现什么结果。
通过这个就代表加密安全?
不。此工具展示的是洗牌算法的偏差。安全性取决于你的 RNG 和威胁模型。
模拟次数用多少合适?
先从 100k 开始。n ≤ 8 时,打开排列频率跟踪更容易直接看出偏差。