什么时候适合用梯子抽签
当需要把与人数相同的一组结果(中奖、谢谢参与、惩罚、顺序等)不重复地分给每个人时,梯子抽签很合适。 请客的赌注只有一个人倒霉,或是把发言顺序从第1位到第N位全部分开,用的都是同一套结构。本工具会用您输入的姓名和结果画出梯子, 点击姓名即显示从上到下的路径。输入内容既不会发送到服务器,也不会保存在浏览器里,刷新页面后全部清空。
为什么梯子总是一一对应
每一条横线连接相邻的两条竖线,走过横线就等于这两条线上的人互换位置。可以把一条横线看作相邻两个座位的对调。 对调再做一次就能还原,所以任意多次对调也都能还原,因此不会有两个人走到同一格,也不会有哪一格落空。 用数学语言说,所有横线叠加的效果是一个排列(双射)。保证这一点的条件是同一高度的横线不能共用同一条竖线, 本工具从左到右放置横线,放下一条后就跳过一条竖线。
还有一个已知的性质:一条横线就是一次对调,所以横线总数为偶数时,最终排列是偶排列,为奇数时是奇排列。 因此,横线数是偶数时,每个人有可能恰好停在自己竖线的正下方,横线数是奇数时则不可能。
各人数下的分配方式数量
| 参加人数 | 每行可放横线的位置 | 可能的分配总数(n!) |
|---|---|---|
| 2人 | 1处 | 2种 |
| 3人 | 2处 | 6种 |
| 4人 | 3处 | 24种 |
| 5人 | 4处 | 120种 |
| 6人 | 5处 | 720种 |
| 7人 | 6处 | 5,040种 |
| 8人 | 7处 | 40,320种 |
8个人时,让每个人拿到不同结果的方式共有40,320种,梯子就是把其中一种直观地抽出来的办法。
示例1: 4个人、8条横线的路径
从左起第0到第3条竖线上站着小明、小红、小刚、小丽,底部各格从左到右是洗碗、过关、过关、咖啡。梯子共有8条横线, 路径按本工具相同的规则追踪得出。表中的数字是每下一行后所在竖线的编号。
| 姓名 | 每一行后的位置(上→下) | 到达格 | 结果 |
|---|---|---|---|
| 小明 | 0 → 1 → 2 → 2 → 3 → 3 → 3 → 2 → 1 | 第1格 | 过关 |
| 小红 | 1 → 0 → 0 → 0 → 1 → 2 → 2 → 3 → 3 | 第3格 | 咖啡 |
| 小刚 | 2 → 2 → 1 → 1 → 0 → 0 → 1 → 1 → 2 | 第2格 | 过关 |
| 小丽 | 3 → 3 → 3 → 3 → 2 → 1 → 0 → 0 → 0 | 第0格 | 洗碗 |
到达格分别是1、3、2、0,没有重复,所以一一对应成立。 8条横线是偶数,整体排列(0号到1号格,1号到3号格,3号到0号格,2号不动)是三个人轮换的偶排列,与前面的性质相符。
示例2: 3条横线让3个人顺序完全颠倒
在三条竖线之间按左、右、左的顺序只放3条横线,0号会到第2格,1号到第1格,2号到第0格,顺序完全反过来。 横线少并不意味着打乱得少,关键在于横线在高度上如何交错。这次颠倒用了3条(奇数)横线,三个元素的颠倒相当于对调两端的一次交换,是奇排列,同样符合前面的性质。
只让横线随机,各格的概率并不相等
“一一对应”和“概率相等”是两回事。横线按一定概率随机放置的梯子,走到离起点竖线较近的格子的可能性会略高。下表是在横线概率35%、 20行、从左到右放置的方式下,4个人到达各格的精确分布(单位为%,页面构建时计算)。
| 出发 \ 到达 | 第0格 | 第1格 | 第2格 | 第3格 |
|---|---|---|---|---|
| 第0条 | 26.4% | 25.8% | 24.3% | 23.5% |
| 第1条 | 25.8% | 25.4% | 24.6% | 24.2% |
| 第2条 | 24.3% | 24.6% | 25.3% | 25.7% |
| 第3条 | 23.5% | 24.2% | 25.7% | 26.6% |
从第0条出发到第0格的概率是26.4%,到第3格是23.5%,与均匀的25%有差距。为了消除这种偏差,本工具在把结果分配到底部各格之前, 先用Fisher-Yates算法把结果打乱。这样哪一格对应哪个结果是均匀随机的,每个人拿到任何结果的概率都相同。梯子的形状只是让路径可被眼睛追踪,公平性来自这次打乱。
使用方法
- 每行输入一个参加者和一个结果。两个列表的行数要相同,支持2到8人。
- 决定是否隐藏结果,然后点击“生成梯子图”。隐藏时,只会揭晓路径走到的那一格。
- 点击姓名沿路径走,该人的结果就会揭晓。想一次看全部,点击“查看全部结果”。
- 要重来,点击“重新生成梯子图”。横线会重画,结果的分配也会重新打乱。
常见错误与局限
- 如果结果在选择前就可见,参加者可以挑选通往想要结果的竖线,因为用眼睛追路径并不难。涉及赌注时,隐藏结果更公平。
- 姓名或结果重复也能运行,但同名在画面上很难区分,请加上编号或首字。
- 随机数来自浏览器的Math.random,不是用于安全场景的随机数。朋友间的小赌注足够用,但抽奖等需要证明公正的场合不适合。
- 参加者数与结果数必须一致。空行会被忽略,但结果不够时会提示原因并停止。
- 分享截图前,请先确认结果是否仍处于隐藏状态,以及已经揭晓了哪些路径。
如何使用结果
若只想让一个人倒霉,可以输入一个“请喝咖啡”和若干“谢谢参与”。决定发言顺序时,把结果写成第1位、第2位、第3位。 分配任务时,把要做的事写进结果,人比事多就用“休息”之类的格子补齐。重复抽签时不要沿用同一张梯子,每次都重新生成。
常见问题
结果会被操控吗?
横线和结果的排列在您点击生成按钮的瞬间由浏览器随机决定,不会发送到服务器。不过和一般网页一样,有人可以用开发者工具查看自己屏幕上的数值,因此需要互信的场合,请让大家一起看同一块屏幕。
最多支持多少人?
为保证画面清晰,支持2到8人。更多人时,分组或随机数工具更合适。
横线越多越公平吗?
不是。本工具在把结果分配到底部各格之前先打乱顺序,所以无论横线多少,每一格的概率都相同。横线的作用是让路径可见,并使人难以从上方预测终点。
两个人会走到同一个结果吗?
不会。横线会对调相邻的两条路径,所以每个人都走到不同的格子。即使多个格子填了相同的文字,它们也只是文字相同的不同格子。
输入的姓名和结果会被保存吗?
不会。页面不使用Cookie或本地存储,刷新或关闭标签页后,输入内容和梯子都会消失,也不会在设备间同步。