跳到主要内容
CalcMax

随机名字抽取器

范围:1 – 200

范围:0 – 4,294,967,295

结果

6, 1, 5

抽中的名字

名单里的人数
8
任意一个名字被抽中的概率
37.50%

随机名字抽取器从你粘贴进来的名单里抽名字,抽取是不重复的,而且同一个种子每次运行都会给出同一个结果。把一份名单贴进去——每行一个,或者用分号、逗号隔开——再说一句要抽几个,页面就会返回那么多个互不相同的名字,旁边还给出名单里有多少人、以及每个名字被抽中的概率。它是一次抽签、抽奖、发言顺序、座位安排或者分配杂务背后的机制:名单是输入,抽取是输出,而旁边的两个数让你能描述发生了什么,而不只是断言。有两条性质值得直说。抽取是不放回的,所以同一个名字不会在一次结果里出现两次;而且每个名字的机会都一样——抽取个数除以名单人数,所以从八个人里抽三个,每人 37.5%。结果是可复现的,这正是让一次公布的抽取可以被人核对、而不只是一句声明的那个性质。

公式

任意一个名字被抽中的概率 P = 抽取个数 / 名单人数 · 抽取本身是一次数了种子的洗牌,取前「抽取个数」个

nameCount
名单切开之后有多少个名字。分隔符是换行、分号与逗号——空格不是,所以带空格的名字仍然算一项,而用空格隔开的一串编号会塌成一个名字
drawCount
要抽几个名字。它不能超过名单人数,因为抽取是不放回的:从三个人的名单里抽四个,不是一个不太可能的结果,而是一个做不到的请求
seed
发生器的起始状态,最大 4294967295。同一份名单、同一个抽取个数、同一个种子,永远给出同一批名字,这正是公布出去的结果可以被重跑核对的原因;换一个种子,整次抽取都变了
抽取个数 / 名单人数
任意某一个特定名字被抽中的概率。它不是对某一次抽取的承诺——一个 37.5% 的名字可以连着十次不出现——但在许多次独立的抽取里,它出现的那些次所占的比例会收敛到这个数
picked
抽中的名字,按抽取产生的顺序排列,用逗号隔开。顺序是结果的一部分而不是排版选择:同一个种子复现出同样的顺序,所以它可以直接当发言顺序或从头到尾的清单用

凡是要有一次看得见、说得清的抽取,而且公平性必须在事后可以被核对的时候,都用得上它:抽一个中奖者、定一个顺序、派活、从几个选项里选一个。种子就是它与一个不透明的随机按钮之间的区别——把种子和结果一起公布,任何人都能复现出完全相同的那一次抽取,于是关于「抽得公不公平」的争论变成了算术问题而不是信任问题。选参数时有两件事要记住。当目的是一个完整的排序而不是一个子集时,就把名单抽满,因为把每个名字都抽出来等同于一次洗牌,输出就成了一个从头到尾的顺序。另外,在相信这次抽取之前,先看一眼页面以为它拿到了多少个名字:结果旁边报出的那个数是实际解析出来的条目数,这是抓住「分隔符没有按你预想的方式切开」最快的方式。

算例

  1. 八个人里抽三个

    1. 名单按分号切成八项
    2. 数了种子的抽取在不放回的情况下取走三个:先 6,再 1,再 5
    3. 每个名字开始时机会都一样:3 / 8 = 0.375,也就是 37.5%
    4. 用种子 1 再跑一次,会以同样的顺序返回同样的三个名字

    这里第一个该看的数是 8,而不是那三个名字。它是页面在告诉你它实际解析出了多少条,也是检查名单有没有按你的意图切开最快的办法——一份悄悄塌成一条的名单照样会给出一个看起来很有把握的结果。37.5% 是每个名字各自的机会,不是累计进度:八个人各自的概率加起来是 300%,因为要抽三个人,而每一次抽取都是对名单的一次独立占用。

  2. 名字里带空格的情况

    1. 每个名字各占一行,所以名单里是四项,不是八项
    2. 抽取从四项里取走两个:Mary Jane 与 Peter Parker
    3. 每个名字的机会是 2 / 4 = 50%
    4. 把这四个名字写成 John Smith; Mary Jane; Peter Parker; Bruce Wayne,结果完全相同

    四项而不是八项,正是这一格要说的:空格在这一页不分割名字,因为真实的名字大多含有空格。分号与换行才分隔,而两种写法在同一个种子下给出同一次抽取。如果结果旁边的计数比你粘贴的人数还多,说明名单被切得太碎了——把姓写在前面、名写在后面时又用了逗号作分隔,就会这样。

  3. 把整份名单抽满

    1. 从八个名字的名单里抽八个,不放回
    2. 每个名字必然恰好出现一次,所以结果就是整份名单换了一个顺序
    3. 任意一个名字的机会是 8 / 8 = 100%,这是「抽满」最诚实的读法
    4. 输出顺序就是抽取顺序,所以这一次同时也是洗牌

    100% 的机会看起来像弄错了,直到把这个问题的读法看清:它是「把每个名字都抽出来时,某个名字被抽到」的概率,与那个名字落在顺序的哪个位置毫无关系。想要一个打乱的先后顺序而不是一个子集时,用的就是这一档——同一个输出同时服务两个目的,而顺序和其他一切一样可以从种子里复现出来。

  4. 用空格打的一串编号被读成一个名字

    1. 空格在这一页不是分隔符,所以名单里恰好只有一项
    2. 从只有一项的名单里抽一个名字,原样返回它
    3. 机会是 1 / 1 = 100%
    4. 把同一串编号改用分号写成 1; 2; 3; 4; 5; 6; 7; 8,就变成八项,也就得到想要的那次抽取

    这就是空格规则生效时的样子:用空格打的八个数字是一个名字,所以抽取返回那一条,并报出计数 1 与机会 100%。面板上没有任何一处看起来坏了,这就是为什么结果旁边那个计数每次都值得扫一眼。修法是用一个不是空格的分隔符——1; 2; 3; 4; 5; 6; 7; 8,或者每行一个。

局限

在把结果用于任何要紧的事之前,有三条实际的限制值得知道。名单最多 200 个名字,而抽取个数最多不能超过名单里的人数。空格永远不分割名字,因为真实的名字含空格——分隔符是换行、分号与逗号——所以把姓写在前面再用逗号时,名字会被切成两半,而结果旁边那个计数是你唯一会得到的提示。种子是复现装置,不是安全装置。它背后是一个又小又快、完全确定的发生器,属于这一页该有的那种:拿来抽一个发言顺序或者排一份值日表完全够用,但不适合用在有真金白银的抽奖上——知道种子和算法的人可以提前算出结果,那种场合该用的是可公开验证的随机源。最后,概率不是日程表。名单里每个名字被抽中的概率都一样,但「八分之一」不代表一个名字每八次就会出现一次——它说的是在极长的一串独立抽取里,出现的比例会收敛到八分之一,这是关于长期的说法,不是关于下一次的说法。

常见问题

这个抽取真的随机吗,会不会偏向某些名字?
名单里每个名字的机会都一样,而且页面只会不重复地抽,所以同一个名字不会在一次结果里出现两次。你能核对的是结果旁边的那个计数:它报出页面解析出了多少条,如果这个数与粘贴的人数不一致,名单就是按与你意图不同的方式切开的,抽取也就是在错误的那一组人上公平。那才是抽取看起来不对劲的常见原因,而不是什么隐藏的偏向——这也是为什么一行一个名字地粘贴名单是最稳妥的习惯。
为什么同一个种子会抽出同一批名字?
因为这个发生器的确定性的:种子设定它的起始状态,从那里开始序列就固定了。这是特性而不是缺陷,因为它把关于公平性的说法变成了任何人都能验证的东西——把名单、抽取个数与种子一起给出,在任何设备、任何语言下都会返回完全相同的结果,而且不需要留下任何记录。换一个种子会得到完全不同的一次抽取,所以想在不改名单的前提下换一批结果,就改这一个数。同样的确定性也正是它不适合有下注的场合的原因:有人可能提前算出结果。
八分之一的机会等于每八次会出现一次吗?
不等于,而这是所有概率最常见的误读。八分之一的机会意味着在极长的一串独立抽取里,包含那个名字的那些次所占的比例会落在八分之一附近,但任何一段具体的抽取都可能连着很多次都抽不到它,也可能连着两次抽到它。八次太少了,平均值在那样的长度上还没有任何约束力。这个数仍然有用——它让两个名字之间可以比较,也告诉你从八个人里抽四个时每人有 50% 的机会——但它是关于长期的说法,不是一张日程表。
为什么我填的一串数字被读成了一个名字?
因为空格在这一页不分割名字。真实的名字大多含有空格,所以把空格当分隔符会把 John Smith 切成两半,而这条保住名字完整的规则,同时也就把 1 2 3 4 5 6 7 8 压成了一条。结果旁边的计数会显示这件事:它读出来是 1 而不是 8,机会是 100%。修法是用一个不是空格的分隔符——分号、逗号,或者每行一条——三种写法在同一个种子下给出同一次抽取。
同一个名字会被抽中两次吗?
在一次抽取里不会。名字被选中的同时就从名单里拿走了,所以每一次结果都是一组互不相同的名字,这正是抽奖或发言顺序需要的——把同一个人念两遍那是 bug 而不是惊喜。需要知道的一个后果是:抽取个数不能超过名单人数。从三个人的名单里要四个名字,描述的是一套做不到的流程,页面会直接说出来,而不是悄悄返回那三个。把名单里的人都抽出来,结果就是整份名单换了一个顺序。
为什么这一页没有一张示例抽取结果的表?
因为结果完全取决于你粘贴的名单与选的个数,而一张表看不到这两样。印出来的一组示例抽取是对某一份别的名单的结果,而它与上面的面板不一致时,正确的那一个是面板——一个和自己吵架的页面,比一个没多出任何东西的页面更糟。面板本身就是答案,而它旁边那两个数是这里唯一值得列表的一般事实:名单里实际有多少条,以及每一条被抽中的机会。

参考资料

相关计算器