随机分组生成器

把一份名单按人数等分成若干组,可以指定要分几组,也可以指定每组最多几人。分组先把整张表洗牌再按顺序切片,保证一人只进一组;随机源由可输入的种子驱动,同一份名单配同一个种子,在任何设备上都得到同一份结果,方便公示与复算。数据在浏览器本地计算,不上传名单。

10 人 / 3 组 / 组大小 4、3、3

分组规则:base = floor(名字数 ÷ 组数);extra = 名字数 mod 组数;前 extra 组各多 1 人。

本页的核心结论:公平分组靠的是先整表洗牌再切片,而不是每组各自抽人——每组独立抽人会把人抽重复,而洗牌只动一次序列,天然满足一人一组。种子是这套序列的起点:默认 20261016 下,十个名字按三组分成 4、3、3,第一组是赵磊、李娜、黄敏、周涛;把种子改成 1,第一组立刻变成周涛、赵磊、陈静、黄敏。

使用方法

  1. 把名单粘进左侧文本框,每行一个名字,示例是十个人。回车的行为是换行,要开始分组请按 Ctrl 或 Cmd 加回车,避免把换行当成提交。
  2. 「分组方式」选「按组数」时填想分几组,示例 3 组;选「每组人数」时填每组最多几人,示例 4 人,程序会自己算出需要几组。
  3. 「随机种子」默认 20261016,可改成 1 到 2147483646 之间的任意整数。种子相同、名单相同,得到的结果一定相同。
  4. 点「重新分组」或改动任一控件都会立即重算;换一个种子就换一套排列,名单不动也能反复重排。
  5. 结果区先给出人数、组数与每组人数分配,下方卡片逐组列出成员,再下方是把全部名字按序号排开的明细表。
  6. 明细表默认展开六行,「加载更多」展开其余,「复制对照表」取制表符文本,「导出 CSV」下载带字节序标记的文件。

这个随机分组生成器能解决什么问题

这个随机分组生成器针对的是「把一群人公平地分成几摊」这种反复出现的场景:课堂上分小组、比赛抽签分边、值班排班、团建分桌。它的重点不在「随机」两个字,而在「可复算」与「可公示」——分组结果一旦能被独立复现,任何人拿着同一份名单与同一个种子都能重新跑出同一份结果,就不必再争论某个人是不是被塞进了哪个组。

同类里的几个兄弟页方向不同:是非选择器只对一个命题出「是」或「否」,随机顺序生成器把一份名单排成一个整体顺序、不切块,随机动物生成器与随机城市生成器从内置词表里取名,而打乱行工具只做洗牌、不做等分。本页在洗牌之后还多做一步「按人数切片」,这才叫分组。

计算原理与变量说明

设名单里有效名字共 N 个,要分成 K 组。本页先用一个线性同余发生器从种子出发生成随机序列,再用它驱动一次整表洗牌,最后把洗好的序列按每组人数切开,分两步走:

一、公平分组的核心是洗牌的均匀性,不是「随便抽一个」。 常见的错误做法是每一组各自从名单里随机取人,取到的先从池子里划掉。这种做法看着随机,实际会让人被抽到的先后顺序影响分布,某些人明显更容易落在靠前的组。正确做法是先把整张表洗一次,让每个排列出现的概率相同,再机械地切片——把随机性集中在洗牌这一步,后面的切分完全确定。

二、用种子加线性同余是为了可复现,这与系统随机数是两套语义。 浏览器内置的随机源每次调用都不同,无法复现;本页改用「种子乘 1103515245 加 12345、再取低 31 位」的固定序列,同一个种子必然走出同一条序列,同一份名单永远得到同一份分组。要换一批结果,改种子即可。这套序列的取值落在 0 到 2147483647 之间,再除以该上限映射到区间,才能当洗牌下标。

三、名单不能整除组数时必然有组多 1 人,规则固定才不会有人质疑。 十个名字分三组,3 乘 3 等于 9,还差 1 个,于是有一组是 4 人、另两组是 3 人。本页把多出来的 1 人分给编号靠前的组,也就是第一组,写死这条规则比每次都换一种分法更让人服气。同理,十个名字分六组会自动得到 2、2、2、2、1、1,先满足前面的组。

四、同一个人反复被抽会直接违反一人一组,必须先洗牌再切片。 若不加约束地反复抽取,一个人可能同时出现在两个组里,事后还得手动去重。整表洗牌保证每个名字在洗好的序列里只出现一次,切片只是在一条不重复的序列上划线,从根上杜绝了重复。这也是算法顺序不可颠倒的原因:先洗牌、再算组大小、后切片。

完整示例(数值仅作演示)

示例条件:十人名单(张伟、王芳、李娜、刘洋、陈静、杨帆、赵磊、黄敏、周涛、吴婷),种子 20261016,按 3 组。结果由本页的洗牌与切片算法复算得到。

把同样的名单与种子填进工具区即可得到相同结果,示例数值均为演示。

组大小分配与种子复现对照表

下表是十个名字在不同组数下的组大小分配,靠前的组先拿到多出来的名额,规则只有这一条。

组数 K组大小说明
25、5能整除,两组等分
34、3、3前 1 组多 1 人
43、3、2、2前 2 组各多 1 人
52、2、2、2、2能整除,五组等分
62、2、2、2、1、1前 4 组各多 1 人

下表把同一份十人名单换四个种子,只列出第一组,用来演示「名单不动、种子一换结果就换」。

随机种子第 1 组
20261016赵磊、李娜、黄敏、周涛
1周涛、赵磊、陈静、黄敏
42周涛、黄敏、赵磊、王芳
2026赵磊、周涛、李娜、黄敏

下表是第二个完整示例:十二人名单(在十人基础上追加徐明、孙倩)按 5 组、种子 20261016 的逐人明细,组大小为 3、3、2、2、2。这张十二行的明细由本页算法复算得到,可以逐条核对。

序号姓名所属组
1孙倩第 1 组
2王芳第 1 组
3周涛第 1 组
4徐明第 2 组
5赵磊第 2 组
6吴婷第 2 组
7李娜第 3 组
8杨帆第 3 组
9张伟第 4 组
10黄敏第 4 组
11刘洋第 5 组
12陈静第 5 组

读表要抓两点。一是四个种子给出的第 1 组完全不同,说明种子直接决定洗牌结果,而组大小规则始终不变。二是十二人那一例里第 3 组只有 2 人,因为 12 除以 5 得 2 余 2,只有前 2 组拿到 3 人,与前面「前 extra 组各多 1 人」的规则对应。

结果边界、舍入与适用说明

常见问题

为什么同一个种子每次分组结果都一样?

因为随机序列由种子驱动,用的是固定公式 s 等于 s 乘 1103515245 加 12345 再取低 31 位,没有引入时间或系统随机源。种子相同,走出的序列就相同,洗牌与切片自然一致。想要每次都不同,换个种子即可。

为什么按组数分不匀,总有一组多一个人?

当名字数不能整除组数时,平均数不是整数,必然有组多 1 人。十个名字分三组,每组 3 人只能装下 9 个,剩下 1 个只能放进其中一组。本页把多出来的人分给编号靠前的组,规则固定,第一组优先拿到。

「按组数」和「按每组人数」有什么区别?

前者你定的是分几组,人数由名字数除以组数得到;后者你定的是每组最多几人,组数由名字数除以每组人数向上取整得到。两种模式最终都走同一套洗牌与切片。

换种子会打乱已经分好的组吗?

会。种子是洗牌的起点,换一个种子就得到一条全新的洗牌序列,切片后每个组的人都会重新组合。名单不变时,种子是唯一能改变结果的开关,想换一批分组只要改种子即可。

名单里能放数字、空格或英文吗?

可以。每一行按名字原样处理,去掉首尾空格后作为一个个体参与洗牌,数字与英文同样适用。空行会被忽略,从电子表格里复制一整列贴进来也能直接用。

结果是真随机还是可预测的?

是可复现的伪随机。它由种子确定,不是系统随机源,所以同一个种子必然得到同一份结果,这正是公平公示要的性质。它的分布足够均匀,但不能用于密码、抽奖兑奖这类需要不可预测性的场景。

这个工具免费吗?

免费,无需注册即可使用。

输入的数据安全吗?

安全。计算在当前浏览器本地完成,不会上传输入内容。

相关工具