洗七次才洗开:一副扑克牌的随机性断崖
- 作者:Bougie
- 创建于:2026-10-19
家里有一副牌,过年的时候拿出来打掼蛋。我洗牌的习惯是:切一下,双手一拨,再来一次,然后发牌。表弟看了说"你这也叫洗牌"。
我不服。牌面看着已经乱了,凭什么说没洗开?
后来我把这件事写成代码算了一遍,发现他说得对,而且比我想的严重得多:洗四次和没洗,在统计意义上是一样的。

下面所有数字都来自我写的两段程序:一段用 BigInt 做精确计算(不是模拟,是真的把 52! 个排列按概率加权求和),一段是每次 20 万次的蒙特卡洛模拟(种子固定为 20261019,随机数发生器是 mulberry32)。环境是本机 Linux x86_64、Node v24.16.0。没有网络,没有浏览器,只有 CPU。
# 一、先把答案摆出来
一副 52 张牌,用标准的 riffle shuffle(双手把牌分成两摞,然后交错落下)洗 k 次,牌堆的排列分布与"完全均匀分布"之间的总变差距离(total variation distance,下面会解释它是啥):
| 洗牌次数 k | 与随机的距离 TVD | 平均上升序列数 |
|---|---|---|
| 0 | 1.000000 | 1.00 |
| 1 | 1.000000 | 2.00 |
| 2 | 1.000000 | 4.00 |
| 3 | 1.000000 | 7.95 |
| 4 | 1.000000 | 14.10 |
| 5 | 0.923733 | 19.61 |
| 6 | 0.613550 | 22.95 |
| 7 | 0.334061 | 24.71 |
| 8 | 0.167159 | 25.60 |
| 9 | 0.085420 | 26.05 |
| 10 | 0.042946 | 26.28 |
| 11 | 0.021502 | 26.39 |
| 12 | 0.010755 | 26.44 |
| 13 | 0.005378 | 26.47 |
| 14 | 0.002689 | 26.49 |
(完全随机的牌堆,平均上升序列数是 26.50。)
这张表是 Bayer 和 Diaconis 在 1992 年的论文 Trailing the Dovetail Shuffle to its Lair 里给出的,我按同样的方法独立算了一遍,数字对上了。
前面那几个 1.000 不是"约等于 1"。我把它们算到小数点后 15 位:
| k | TVD(15 位精度) | 与 1 的差 |
|---|---|---|
| 1 | 1.000000000000000 | — |
| 2 | 1.000000000000000 | — |
| 3 | 1.000000000000000 | — |
| 4 | 0.999999533431375 | 4.67 × 10⁻⁷ |
也就是说:洗四次之后,牌堆和"没洗"在统计上仍然无法区分。 这不是修辞,是有具体判据的——洗四次的牌堆,上升序列数必定不超过 16(这个概率是 1);而一副真随机的牌堆出现这种情况的概率是 4.67 × 10⁻⁷,差不多两百万分之一。你只要数一遍上升序列,就能以 99.99995% 的把握指认"这副牌最多洗了四次"。
然后,从第 6 次开始,每多洗一次,距离精确减半:
- 0.6136 → 0.3341(1.84 倍)
- 0.3341 → 0.1672(2.00 倍)
- 0.1672 → 0.0854(1.96 倍)
- 0.0854 → 0.0429(1.99 倍)
- 0.0429 → 0.0215(2.00 倍)
- 0.0215 → 0.0108(1.99 倍)
洗到第 12 次,距离只剩 0.0108。这就是所谓的截止现象(cutoff):不是慢慢变好,而是一直纹丝不动,然后在两三步内掉下去。

# 二、"洗开了"到底是什么意思
一副 52 张牌有
52! = 80658175170943878571660636856403766975289505440883277824000000000000
≈ 8.07 × 10^67
种排列。如果你每秒洗出一种全新的排列,洗完所有排列需要 2.56 × 10^60 年。宇宙年龄的 10^50 倍。
所以"洗开"不可能是指"遍历所有排列"。它的实际定义是:你拿到的这副牌,能不能被一个知道你洗牌方式的人,用比瞎猜更高的概率猜出来。
总变差距离衡量的就是这个。它的定义是:
TVD = (1/2) × Σ |P(实际洗出的排列 π) − 1/52!|
一个更直观的解释:TVD 就是"某个事件在真实牌堆上的概率"与"它在完全随机牌堆上的概率"之间,可能达到的最大差距。TVD = 1 意味着存在一个事件,它在这副牌上必定发生(概率 1),而在随机牌堆上概率为 0;TVD = 0 意味着牌堆和真随机完全无法区分。
所以上表第一行可以理解为:洗四次之后,从信息论的角度看,你基本没洗。
# 三、riffle shuffle 在数学上是什么
1950 年代,Gilbert、Shannon 和 Reeds 各自独立给出了一个模型(GSR 模型),后来被证明和真人洗牌吻合得非常好:
- 把牌切成两摞,切点位置服从二项分布 Binomial(52, 1/2)——也就是每一张牌 independently 地以 1/2 的概率进入左摞或右摞;
- 两摞牌交错落下:落下时,从某一摞取下一张的概率,正比于那一摞当前还剩多少张。
这个模型里有一个漂亮的关键量:上升序列(rising sequence)。
把洗完的牌按从上到下的顺序写成"它在原始牌堆里的编号",然后数一数这个序列里有多少段是"递增的"。比如原始顺序是 1,2,3,…,洗完是 1,3,5,2,4,6,那递增段就是 1,3,5 和 2,4,6,一共 2 段。
一个数学习惯叫"上升序列"的东西,物理意义非常直白:它就是洗牌时被拨开的"摞"的数量。洗一次,就是两摞牌交错,所以最多只有 2 个上升序列。洗 k 次,最多 2^k 个。

Bayer 和 Diaconis 的核心结论是:洗 k 次 riffle shuffle,等价于一次 2^k-shuffle,而一次 a-shuffle 的概率分布有一个闭式解——它只取决于排列 π 有几个上升序列 r:
P(π) = C(2^k + 52 − r, 52) / 2^(52k)
而"恰好有 r 个上升序列的排列有多少个",正好是欧拉数 A(52, r−1)。于是整张 TVD 表可以被精确算出来,一个随机数都不用生成:
TVD(k) = (1/2) × Σ_r | A(52,r−1)·C(2^k+52−r, 52)/2^(52k) − A(52,r−1)/52! |
我用 BigInt 把整个式子按有理数算了一遍(分子分母都保留整数,最后一步才转浮点),和用对数空间的浮点算法互相验证,两组数字吻合到小数点后 6 位。上面那张表是精确的,不是模拟出来的。
顺带说一句"上升序列"为什么这么有用:完全随机的排列,平均有 (n+1)/2 = 26.5 个上升序列。而洗 4 次只有 14.10 个,洗 7 次 24.71 个。你只要数一数牌堆里有几个上升序列,就能大概知道这副牌被洗了几次。
# 四、洗一次牌,到底洗掉了什么
精确的距离有点抽象,我们换几个看得见的量。下面是对每个 k 各做 20 万次独立洗牌的实测结果:
| k | 平均上升序列数 | 51 对原相邻牌还剩几对挨着 | 最上面那张牌还在最上面 | 最上面那张牌在前 5 张里 | footrule 距离 |
|---|---|---|---|---|---|
| 1 | 2.00 | 25.51 | 49.75% | 49.75% | 663 |
| 2 | 4.00 | 12.75 | 25.04% | 25.08% | 785 |
| 3 | 7.95 | 6.39 | 12.58% | 15.32% | 844 |
| 4 | 14.10 | 3.43 | 6.56% | 12.79% | 872 |
| 5 | 19.61 | 2.37 | 3.90% | 11.19% | 887 |
| 6 | 22.96 | 2.07 | 2.81% | 10.42% | 894 |
| 7 | 24.71 | 1.99 | 2.33% | 10.08% | 898 |
| 8 | 25.60 | 1.98 | 2.10% | 9.75% | 899 |
| 9 | 26.04 | 1.96 | 2.07% | 9.72% | 900 |
| 10 | 26.27 | 1.96 | 1.96% | 9.66% | 900 |
| 完全随机 | 26.50 | 1.96 | 1.92% | 9.62% | 901 |
最后一行是理论值(相邻对 51×2/52 = 1.96,footrule (n²−1)/3 = 901.0,顶牌在第一张 1/52 = 1.92%),蒙特卡洛全部复现了。
第一行是最扎心的:
- 洗一次牌,最上面那张牌还有 49.75% 的概率仍然在最上面。 随机情况下这个概率是 1.92%,也就是洗一次之后的偏差是 26 倍。
- 51 对原本挨在一起的牌,洗一次之后还有 25.51 对仍然挨着——一半的相邻关系原封不动。随机的期望值是 1.96 对。
- 整副牌只有 2 个上升序列。所谓"洗了一次",从数学上看就是:把一副牌切成两摞,然后交错了一下。 别的什么都没发生。
洗两次?4 个上升序列,两摞变四摞。洗三次?8 个。它是指数增长的,所以在 2^k 还没接近 52 之前,牌堆始终"有结构"。这就是为什么前四次 TVD 死死钉在 1.000。
# 五、数一数就知道洗了几次(但只到六次为止)
既然上升序列数直接暴露了洗牌次数,那它能不能当"测谎仪"?我测了它的分布:
| k | 平均上升序列数 | 标准差 | 95% 的牌堆落在 |
|---|---|---|---|
| 4 | 14.10 | 1.08 | 12 ~ 16 |
| 5 | 19.59 | 1.77 | 16 ~ 23 |
| 6 | 22.95 | 2.02 | 19 ~ 27 |
| 7 | 24.72 | 2.08 | 21 ~ 29 |
| 8 | 25.60 | 2.10 | 21 ~ 30 |
| 完全随机 | 26.50 | 2.10 | — |
结论有点微妙:洗 5 次以内,你数一遍上升序列就能抓个正着(洗 4 次的牌堆上升序列集中在 12~16,随机牌堆是 26.5 ± 2.1,根本不可能混)。但洗到第 7 次,24.72 ± 2.08 和随机的 26.50 ± 2.10 已经重叠得厉害,单看一副牌分辨不出来了。
这正好呼应了那张 TVD 表:"7"不是"洗好了"的及格线,而是"再也看不出来"的阈值。 洗 7 次的时候,牌堆离真随机还有 0.334 的距离,只是这个距离藏得太深,用肉眼和普通统计量挖不出来了。
# 六、完美洗牌:洗 8 次,牌回到原样
GSR 模型假设你手很笨,牌落下的时候是随机的。如果你手特别稳——每次都精确地一隔一张,这就是魔术师用的 faro shuffle(完美洗牌)。它是洗牌的反面:完全确定,完全不随机。
分成两种:
- out-faro:原来最上面那张牌,洗完还在最上面。它等价于位置映射
p → 2p (mod 51)。 - in-faro:原来最上面那张牌,洗完掉到第二张。等价于
p → 2p+1 (mod 53)。
我直接模拟了一遍,数了几次回到原样:
| 牌数 | out-faro 周期 | in-faro 周期 |
|---|---|---|
| 52 | 8 | 52 |
| 54(含两张大小王) | 52 | 20 |
这是全文我最喜欢的一个数字:52 张牌,完美洗牌洗 8 次,牌堆回到出发前的顺序,一张不差。 这就是扑克魔术里"洗八次"这个梗的来源——它看起来是在洗牌,实际上是在原地转圈。
数论上的解释很干净:out-faro 是 p → 2p mod (n−1),所以周期就是 2 在模 n−1 下的乘法阶。2^8 = 256 = 5 × 51 + 1,所以 ord₅₁(2) = 8。
而那张表最诡异的一格是:同样这副牌,加进两张大小王变成 54 张,out-faro 的周期从 8 次暴涨到 52 次。 因为模数从 51 变成了 53,而 53 是素数,2 恰好是它的原根,ord₅₃(2) = 52。两张牌,把 8 变成 52。

# 七、切牌,洗一万次也洗不开
每次打牌都有人洗完牌再"切"一下,像是最后一道保险。切牌在数学上是什么?把牌堆循环移位。
循环移位不改变牌的相对循环顺序。也就是说,不管你切多少次,牌堆永远是"原始顺序的某个循环位移"——52 种可能。而全部可能是 52! 种。
我模拟了 10 万次随机切牌:结果是 true,牌堆确实还是原始顺序的一个循环移位,只是起点变了。10 万次切牌,和一次切牌,效果完全一样。
切牌不是洗牌的一个步骤,它是一种仪式。
# 八、印度洗牌(overhand)要洗多少次
还有一种很常见的洗法:右手把牌一叠一叠地搬到左手上,每叠几张。这就是 overhand shuffle,也叫印度洗牌。它的数学结构和 riffle 完全不同——它把牌分成若干块,然后按块把顺序倒过来,块内部保持原样。
我按"每叠大小服从几何分布、均值 6 张"来建模(接近真人一次搬 5~7 张),测了它离随机还有多远:
| 洗牌次数 | 51 对原相邻牌还剩几对 | footrule 距离 |
|---|---|---|
| 1 | 42.48 | 242 |
| 2 | 35.95 | 367 |
| 5 | 21.79 | 539 |
| 10 | 10.02 | 709 |
| 25 | 2.47 | 866 |
| 50 | 2.14 | 886 |
| 100 | 1.95 | 914 |
| 完全随机 | 1.96 | 901 |
洗一次,只有 42.48/51 对被打散——riffle 洗一次就能打到 25.51 对。overhand 要洗到 50 次以上,才勉强追上 riffle 洗 7 次的效果。 慢了差不多一个数量级。(这个数字对模型很敏感:我把每叠均值改成 3 张,收敛要 100 次左右;文献里因为块大小分布假设不同,给出的量级从几十次到上万次都有。)
原因不难理解:overhand 是"逐块"操作,一次只打散块与块之间的边界;riffle 是"逐张"操作,一次能把整副牌切成两半重新编织。

# 九、别的牌要洗几次
那句"洗七次"只对 52 张成立。牌数变了,数字也变。我把 TVD 首次跌破 0.5 的洗牌次数算了一遍:
| 牌数 n | 一副什么牌 | TVD<0.5 | TVD<0.1 | TVD<0.05 | 1.5·log₂n − 1.5 |
|---|---|---|---|---|---|
| 4 | — | 2 | 4 | 5 | 1.50 |
| 13 | 一种花色 | 4 | 6 | 7 | 4.05 |
| 32 | — | 6 | 8 | 9 | 6.00 |
| 52 | 扑克 | 7 | 9 | 10 | 7.05 |
| 54 | 一副牌带大小王 | 7 | 9 | 10 | 7.13 |
| 78 | 塔罗牌 | 8 | 10 | 11 | 7.93 |
| 108 | 掼蛋(两副) | 8 | 11 | 12 | 8.63 |
| 144 | 麻将 | 9 | 11 | 12 | 9.25 |
| 208 | 四副牌 | 10 | 12 | 13 | 10.05 |
最后一列是我拟合出来的经验公式:需要的次数 ≈ 1.5 × log₂(n) − 1.5,在 n 从 8 到 208 之间误差不超过 1 次。Bayer-Diaconis 的渐近结论是 (3/2)·log₂n,实际牌堆规模下要再减掉约 1.5 的常数修正。
也就是说:牌数翻一倍,只需要多洗 1.5 次。 对数增长,这就是"洗七次"这么小的原因。麻将洗 9 次就够了,掼蛋两副牌 8 次。
# 十、所以赌场为什么用洗牌机
说了这么多,一条务实的尾巴:
- 赌场不用手洗。 不是因为荷官洗得不标准,而是因为"洗 7 次"这件事在真人手里根本执行不了——你得每次都切成大致均匀的两摞,每张牌落下的时机独立,这做不到。所以赌场直接用连续洗牌机(continuous shuffler),或者干脆每局用新牌。
- 线上扑克不用洗牌。 它是用密码学安全的随机数发生器直接生成一个排列(Fisher-Yates + CSPRNG),等价于"洗无穷次"。有意思的是,这个"太随机了",反而让习惯了真人洗牌的玩家觉得"牌不对劲"。
- 桥牌比赛也不洗牌。 正式比赛用发牌机按电脑生成的随机牌型预先装盒,全场用同一副牌型,比的是技术不是运气。

# 最后
我原来以为洗牌是"洗得越久越乱"这种渐进的事。算完才发现它是一道断崖:前四次纹丝不动,第五次开始松动,然后三步之内掉到 0.33,之后每多洗一次就精确减半。
而且真正的教训不是"要洗七次"。而是——在阈值到来之前,你付出的所有努力,从结果上看都等于零。
洗一次、两次、三次、四次,牌堆与"没洗"的距离始终是 1.000,精确等于。你确实做了功,牌面看着也确实变了,但信息一点没少。
这大概就是为什么很多事情"坚持了很久却毫无进展"。不是方向错了,是你还没到断崖。