洗牌偏差比較

用同一套設定比較樸素洗牌和 費雪–耶茲 的偏差。

全程在瀏覽器本機執行。輸入與結果不會上傳。複製連結預設只包含設定。

其他語言 日本語 | English | 简体中文 | 繁體中文 | 繁體中文(香港) | Español | Português (Brasil) | Bahasa Indonesia | Français | हिन्दी | العربية

使用方法(3 步)

  1. 選擇清單模式(按大小 / 自訂)並設定模擬次數。
  2. 點選 比較,用同樣設定跑兩種洗牌。
  3. 檢視熱力圖與統計,然後複製僅含設定的連結或下載報告。

看清洗牌偏差

洗牌偏差比較工具

樸素交換每一步都在全範圍取隨機索引;費雪–耶茲 每一步縮小範圍,在隨機整數均勻時能得到均勻排列。

這是 JavaScript 中常見的反模式。結果依賴引擎,通常有偏差。

概覽

提示:這裡的 χ² 和 df 是建立直覺用的近似值(因為存在約束,並不嚴格)。不要把它當作正式證明。

圖表

圖例:naive=紅、FY=綠、sort=紫(開啟時)。

曲線是 df = n² - 1(近似)的 χ² 密度。直線表示觀測到的 χ²。

此圖依 |i - j|(與對角線的距離)彙總。大於 1 表示「太靠近原位置」。

結果

每一側都顯示位置矩陣(項目 i → 位置 j)的統計結果。

樸素洗牌

費雪–耶茲

常見問題

費雪–耶茲 一定沒有偏差嗎?
如果 randomInt 均勻,就沒有演算法偏差。把隨機位元組映射到整數範圍時,仍要避免取模偏差。
為什麼不建議 sort(() => random - 0.5)?
它有偏差,而且結果依賴 JS 引擎。你可以在本頁勾選它,看看你的瀏覽器會出現什麼結果。
通過這項檢查就代表加密安全嗎?
不。此工具展示的是洗牌演算法偏差。安全性仍取決於你的 RNG 與威脅模型。
模擬次數用多少合適?
先從 100k 開始。n ≤ 8 時,開啟排列頻率跟蹤更容易直接看出偏差。

相關工具

相關計算器