使用方法(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 時,開啟排列頻率跟蹤更容易直接看出偏差。