打开就能用的随机分组器:贴一份名单,选「分成 N 组」或「每组 N 人」,一键分好。人数分不平时余数怎么放由你定(前几组多一人,或者单独成一组);组名可以改成红队、蓝队;还能指定谁和谁必须同组、谁和谁不能同组,程序先满足约束再随机填,排不开会直说。结果一组一张卡片,能复制成纯文本,也能复制成制表符表格直接粘进表格软件。名单最多 500 人,只存在你自己的浏览器里。
怎么用
页面从上到下就是一条流水线:贴名单 → 选分法 → (可选)加约束 → 点「分组」。
一、贴名单
把名字写进大框里,一行一个。也认逗号、顿号、分号和制表符分隔——从表格软件里复制一列名字直接粘进来就行。页面会自动做三件事:
- 去掉空行和前后空格,不用管粘贴时带进来的空白;
- 完全相同的名字只算一个,并在下面提示重复的是哪几个。同名同姓的两个人都要参与时,记得写成「张伟 A」「张伟 B」这样区分开;
- 最多 500 个,多出来的会被截掉并明确提示,不会偷偷少算人。
空格什么时候算分隔:只有整段一个换行、逗号、顿号、分号都没有、全用空格隔开时(比如「张三 李四 王五」一行),才按空格拆。只要有换行或逗号,名字里的空格就原样保留,外文名「Tom Smith」、区分同名的「张伟 A」都算一个人。名单下面一行读数实时写着现在有多少个名字。
名单和约束存在你自己浏览器的本地存储里(键名 hi8-suijifenzu-list),刷新页面能接着用;点「清空名单」会先问一次,确认后连本机存的那份一起删掉。第一次打开时框里是一份 12 个人的示例名单,点「导入示例名单」也能随时把它请回来。
二、选分法
三个下拉决定「怎么分」:
- 分法:「分成 N 组」——你定组数,人数由程序摊平;「每组 N 人」——你定每组多少人,组数由程序算。中间那个数字框的标签会跟着换成「分成几组」或「每组几人」。
- 余数处理:人数除不尽时余下的那几个人去哪儿。「余数均摊(前几组多一人)」让各组人数尽量平均;另一种在「每组 N 人」时叫「余数单独成一组」,在「分成 N 组」时叫「余数都给最后一组」。
- 整除时两种余数处理的结果完全一样,只有除不尽才分岔。
三、组名(可选)
展开「组名」那一栏,一行写一个组名(红队、蓝队、黄队……),按顺序配给第 1 组、第 2 组……。写少了不要紧,剩下的那几组仍然叫「第 N 组」;写多了多出来的会被忽略。组名会存进本机设置,下次打开还在。
四、约束(这一页的重点)
展开「约束:谁和谁必须同组、谁和谁不能同组」,里面是两块:
- 必须同组:固定搭档、师徒配对、住同一间宿舍的两个人;
- 不能同组:要拆开的两个人,或者要把两个强手分散到不同队伍。
每块都是「从左边下拉选一个人、从右边下拉选一个人、点添加」,加好的对会变成一个个小标签列在下面,每个标签右边有「删除」。两类各最多 60 对。名单改动之后,两边的人如果有一个已经不在名单里,那一对会自动失效并提示一句。
五、分组与复制
点「分组」出结果,每组一张卡片,卡片标题写着组名和人数。点「再分一次」重新洗一遍牌。结果上方有一行「第 N 次 · 时分秒」,当众分组时它能证明你没有偷偷重分。
两种复制:「复制」得到纯文本(一组一段),「复制成表格」得到制表符分隔的表格文本(一组一列)。
怎么看结果
先核三件事
拿到分组结果,三条就能核完:
- 人数总和对不对——所有卡片的人数加起来应该等于名单人数;
- 有没有人出现在两组里——这一页的做法是「把名单洗一遍牌再顺着切开」,所以天然不会重复,但你自己手工调整过之后就该核一遍;
- 组与组的人数差——用「余数均摊」时差不会超过 1,用另一种时差可能等于余数,这是你自己选的,不是程序算错。
「分成 N 组」和「每组 N 人」什么时候会给出不同答案
举一组具体的数:10 个人。
| 分法 | 余数处理 | 结果 |
|---|---|---|
| 分成 3 组 | 均摊 | 4、3、3 |
| 分成 3 组 | 都给最后一组 | 3、3、4 |
| 每组 3 人 | 均摊 | 4、3、3 |
| 每组 3 人 | 单独成一组 | 3、3、3、1 |
看得出来:只有「每组 N 人+余数单独成一组」会多出一组,其余三种都是三组。选哪一种取决于场景——桌游要每桌人数一致就用「单独成一组」(哪怕最后一桌人少),课堂讨论要人数尽量平均就用「均摊」。
约束排不开,是约束的问题不是程序的问题
页面上会出现三种不同的失败提示,各有各的修法:
- 「必须同组」绑出来的一块比一组还大:比如 6 个人分 3 组(每组 2 个),却要求 A、B、C 三个人同组——一组根本装不下。页面会当场点名是哪几个人、每组最多装几个,改法是把组数调少或把每组人数调大。
- 同一对既要同组又不能同组:两条约束自相矛盾,页面直接指出是哪一对,删掉其中一条即可。
- 连着排了 200 次都排不开:这是「不能同组」太密造成的。最典型的是 4 个人分 2 组却要求四个人两两都不同组——数学上不可能。放宽的顺序建议是:先删掉最不重要的那几条「不能同组」,再考虑把组数调多(组多了,冲突的人就容易被分开)。
🔴 页面不会在排不开时悄悄放弃某一条约束再把结果给你。它宁可报失败,因为一份「看起来分好了、其实有一条约束没守住」的名单比没有结果更糟。
每个人落进每一组的机会是均等的
没有约束时,这一页等价于「把名单整份洗一遍牌,再按每组人数顺着切开」,所以每个人落进任意一组的概率只和那一组的容量成正比,和他在名单里排第几毫无关系。加了约束之后,随机性会被约束压缩(被绑在一起的人只能一起走),但在所有满足约束的分法里,程序仍然是随机挑的,不会偏向名单靠前的人。
连续两次分组出现相同的搭档,很正常
8 个人分 4 组,某两个特定的人这一次同组的概率是 1/7,连着两次都同组的概率约 2%。听起来小,但一个班里有 28 对组合,「这一轮里至少有某一对重复上次的搭配」的概率其实很高。真正的随机里,重复和扎堆本来就常见;要避免重复搭档,就该用「不能同组」把上一轮的搭档显式排开,而不是一直点「再分一次」等一个「看起来更随机」的结果。
常见问题
名单最多能放多少人?
500 个。超过会截断并明确写出截掉了多少,不会让你以为全员都在里面。超过 500 人的场景(整个年级、整场大会)更适合用表格软件配随机数列排序来分,或者先按班级、部门拆成几份再各自分组。
为什么我的名字被拆成了两半?
多半是整段名单只有一行、用空格隔开,这时空格会被当成分隔符,带空格的名字就被拆开了。改成一行一个写(或者用逗号隔开),名字里的空格就会原样保留。名单下面的读数会显示识别出的人数,贴完名单先看一眼这个数对不对,是最快的自查方式。
分组结果会被记住吗?刷新之后还在吗?
名单、约束、分法设置会被记住,分组结果本身不会。刷新页面之后要重新点一次「分组」——这是有意的:分组结果是一次性的,留着上一次的结果反而容易让人误以为那就是这一次的安排。要留档就点「复制成表格」贴进表格软件。
能不能按性别、能力值做「均衡分组」?
这一页不做。带条件的均衡分组(男女搭配、强弱搭配、A/B/C 三档各摊开)本质上不再是「纯随机」,而是一种排班优化,结果好不好取决于你怎么定义「均衡」。实际操作里最省事的办法是先按条件把名单拆成几份,各自用这一页分组,再把同序号的小组合并——比如男生名单分 4 组、女生名单分 4 组,两边的第 1 组合成新的第 1 组。要在页面里表达少量硬性要求,用「必须同组/不能同组」就够了。
它和随机点名、抽签、转盘有什么区别?
四件工具各有各的场合:
- 随机分组器(本页):一次把整份名单分完,关心的是「怎么分」;
- 随机点名器:一次点一个人,有滚动动画和投屏大字,关心的是「轮到谁」,本页不做这件事;
- 在线抽签器:一次抽出若干人,也能排顺序,里面有个简化版的分组,但没有约束和自定义组名;
- 随机转盘:过程看得见,适合当众做一次选择。
要数字不要名字,就去随机数生成器。
分好组之后想给每组排个先后顺序怎么办?
把各组的组名(红队、蓝队……)当成一份新名单贴进在线抽签器的「排顺序」里跑一次,就得到出场顺序了。这一页只负责把人分进组,不负责组与组之间的先后。
手机上能用吗?
能。名单框、分法表单、约束区和分组卡片在 400 像素宽的屏幕上都完整可见,卡片会自动折成更窄的几列,不用横向滚动。数字框设了数字输入模式,正常会直接弹数字键盘。
原理与冷知识
-
分组的本质是「洗牌再切开」。 把 n 个人分成若干组,等价于先给这 n 个人随机排一个序,再按每组人数把这个序列切成几段。所以分组的公平性完全取决于洗牌公平不公平——这也是为什么这一页把力气都花在洗牌和取样上,而不是花在「打乱几次」这种看起来很随机的操作上。
-
洗牌有正确写法和错误写法。 这一页用的是 Fisher–Yates 洗牌:从最后一个位置起,每次和它前面(含自己)的随机一个位置交换。写成「每次和任意位置交换」看着更自然,分布却是歪的,这是流传极广的经典错误。这套方法得名于费希尔与耶茨 1938 年为随机抽样写的那本随机数表手册,1964 年由 Durstenfeld 改成今天这种只走一遍数组的现代写法。
-
取模偏差是这类工具最常见的隐蔽 bug。 把一个 32 位随机整数直接「对人数取余」看着没问题,但 2³² 通常不能被人数整除,排在前面的几个人会多分到一份机会。这一页用的是拒绝取样:把取样空间按人数切成整份,落在末尾零头里的取样直接丢掉重取,代价只是偶尔多取一次,换来完全等机会。
-
约束是靠并查集和重试解决的。 「必须同组」在算法上是典型的等价关系:A 和 B 同组、B 和 C 同组,就意味着 A 和 C 也必须同组。程序用并查集把它们并成一块块,之后整块整块地安排,块内不再拆开。「不能同组」则是另一类问题——它等价于图论里的图着色:把人当作点、把「不能同组」当作边,分成 k 组就是用 k 种颜色给这张图染色,要求相邻的点不同色。图着色在一般情况下是出了名的难题,所以这一页老老实实用「随机填+最多重试 200 次」,够用、可预测,而且失败时会直说,不会算到天荒地老。
-
随机源用的是浏览器的加密级随机数。 页面优先调用
crypto.getRandomValues,它背后是操作系统的随机数池,材料来自硬件噪声、时钟抖动、中断时序;浏览器不给(比如被禁用)才退回Math.random,页面下方的说明会写明当前用的是哪一种。 -
「随机分组」和「均衡分组」是两件事。 体育赛事的分组抽签之所以要设种子队、要分档抽,就是因为纯随机会产生「死亡之组」——四支强队撞在一起。同样的道理,课堂分组如果完全随机,很可能出现一组全是活跃的人、另一组一句话都没有。纯随机的价值在于过程无可争议,均衡的价值在于结果好用,两者天然冲突,只能靠「先分层再随机」这类办法折中。
-
随机分组也被用来做严肃的事。 临床试验里把受试者随机分进试验组与对照组,是现代医学证据体系的地基之一;这套做法在 1948 年那次链霉素治疗肺结核的试验里被正式确立,从此「随机对照」成了判断一种疗法有没有用的黄金标准。它和课堂上分小组用的是同一个数学,差别只在于前者要把随机的过程记录到可复核的程度。
-
分组结果不落盘是有意的。 页面会记住你的名单、约束和设置,但不记住上一次的分组结果。分组是一次性的决定,留着旧结果只会让人分不清「这是刚才那次还是上一次的」;要留档,点一下「复制成表格」贴进表格软件,比什么都可靠。