“随机”这个词,平时聊天和数学里说的不是一回事。随机说的是结果有不确定性;每次都不受前面影响,叫独立随机,随机洗牌则可以前后有关联。 而你的手机、电脑给出的“随机”,很多是一段程序算出来的数——看着毫无规律,其实从头到尾是定好的。

先看一个你可能遇到过的场景。小艾的歌单里有 200 首歌,她开了随机播放,结果半小时里连放了三首同一歌手的歌,气得她想投诉“随机功能是坏的”。其实恰恰相反:如果每首都独立抽取,这种情况完全可能发生——每首都独立抽,抽到谁不记前情。反倒是很多 App 怕用户嫌“老重复”,偷偷做了手脚:先把歌单整个洗一遍牌,再按洗好的顺序放,保证不重复。洗牌仍然可以是随机的,只是它把一轮内的歌曲抽取改成了不重复;同一歌手有多首歌,也仍可能连着出现。

一眼看懂 / 示意图

逐次独立抽取,与整张歌单洗牌

  1. 01每首独立抽

    抽过的还可再抽,同曲和同歌手都能重复

  2. 02整张歌单随机洗牌

    一轮内同曲不重复,同歌手仍可能相邻

随机,到底是什么脾气

1. 独立随机不记前情。 独立抛公平硬币连出三次正面,第四次正反还是各一半的机会。连出三次正面的概率是 1/8(八分之一),本来就会时不时发生;发生了,也不欠下一次什么。“都连出三次了,下一把该出反面了”——这个念头不叫直觉,叫误会。

2. 随机不等于均匀,更不等于不重复。 很多人觉得随机就该“雨露均沾”,每首歌轮一遍才算随机。随机洗牌也叫随机,只是一轮里不重复同一首。逐次独立抽取则允许连号和重复,凑巧连着来完全可能。

3. 电脑的随机数是“算”出来的。 程序从一个叫“种子”的起始数出发,按固定公式一路滚下去,滚出一长串看着乱七八糟的数。关键点在这:同一个算法、相同的种子和设置,会给出相同数列。 所以它才叫“伪”随机——不是真乱,是乱得很有规律。好处是快、可控、能复现:做游戏、跑模拟实验、随机播放,全都够用。

一眼看懂 / 示意图

同一种子,同一算法,再现同一数列

伪随机:相同起点,重复同一条路同一算法同一种子 7固定规则:(5 × 上一个数 + 1) 除以 16 取余4 → 5 → 10 → 3 → 0 → 1 → 6 → 15再运行一次种子仍为 7规则不变,得到相同数列4 → 5 → 10 → 3 → 0 → 1 → 6 → 15这是便于验算的小玩具算法,不能用来生成密码或正式抽奖。

简化线性同余算法,只用于解释可复现。

4. 有些事,普通伪随机扛不住。 验证码、加密密钥、抽奖开奖,这些场合如果用的是容易预测的算法,或者种子等内部状态泄露,对手就可能提前算出下一个数——伪随机的“有规律”就成了命门。所以系统会从鼠标抖动、键盘敲击间隔、硬件噪声这些真实世界的乱里收集“真随机原料”,再把这些原料用于专门设计的密码学级随机数发生器,让对手即使知道算法,也难以从输出倒推状态或预测下一次结果。

为什么随机也会“老重复”

回到小艾的歌单。假设 200 首里有 10 首是同一歌手的(演示数字):每首歌机会相同、每次独立抽取时,抽中他的概率是 5%;连抽三首都是他的概率是 0.0125%——确实低,但不是零。每天听几十首、一年听下来,就有更多机会撞上“连放”,但不能保证一定出现几次。在独立、规则不变的抽取里,长期比例会趋近对应的概率,但短期不保证均匀。 短期内看着“不匀”,不代表动过手脚,也不能单凭这一点证明公平。

反过来,如果一个“随机播放”永远不重复、永远不连号,可能是采用了不放回抽取,或者额外加入了避开连号的规则。随机来源和播放规则是两回事,不能只看重复不重复来判断。

顺带说一句:人脑随口编数字,很难做到理想的随机。让一个人随口说一串 0 到 9 的“随机数字”,他会有意无意地避开重复、躲开连号,写出来的序列常带有能被统计方法发现的偏好。真随机比我们的直觉野得多。