“把这 30 个人分成 6 组”——听起来简单,真要分得让所有人都满意却很麻烦:这对情侣不能分一桌、这两个搭档得在一起、每组研发和产品的比例最好均匀、还有人数除不尽多出来的零头怎么办。
普通的”随机洗牌再切片”处理不了这些。活动分组就是为带约束的分组而生:粘名单、选模式、加约束,一键得到一份既满足所有硬性条件、又尽量均衡的方案。这篇讲清楚每个约束背后的机制,让你知道什么场景该怎么设。
先分清:这不是”随机抽签”
很多人把”分组”和”抽签”搞混,其实目标完全相反:
| 随机抽签 | 活动分组 | |
|---|---|---|
| 做什么 | 从 N 个里挑出 K 个 | 把 N 个全部分进 K 组 |
| 覆盖 | 部分人 | 所有人 |
| 典型场景 | 点名、抽奖、做选择题 | 分桌、分小组、配对 |
| 支持约束 | 否 | 禁同组 / 必同组 / 均衡 |
只要你的需求是”每个人都得在某个组里”,并且带任何约束或均衡要求,就该用分组工具;纯粹”挑几个人出来”用 随机抽签 更直接。两者互补。
禁同组 / 必同组:硬约束怎么写
这是分组工具的核心能力——强制某些人凑一起、或强制错开。写法是每行一对或一组,逗号分隔:
| 约束 | 写法 | 含义 |
|---|---|---|
| 必同组 | 张三,李四 | 两人必须在同一组 |
| 必同组 | 王五,赵六,孙七 | 三人必须在同一组 |
| 禁同组 | 张三,李四 | 两人不能在同一组 |
| 禁同组 | 周八,吴九,郑十 | 三人两两都不能同组 |
必同组有个聪明的细节——传递合并。 用并查集(一种把”同类”不断合并的算法)处理:你写了 A,B 又写了 B,C,工具会自动推断 A、B、C 三人都得在同一组,不用你手动写全 A,B,C。
冲突会被立即拦截:同两个人既写进必同组又写进禁同组(自相矛盾),或某个必同组单元的人数超过了你设的最大组容量(5 个人必须同组、但每组只能坐 4 个),工具直接报错,不会偷偷给你一个错误方案。
按属性均衡:软约束,尽量而非保证
想让每组的部门 / 性别 / 能力分布均匀,先在名单里给每个人带上属性。两种写法都认:
张三,部门=研发,性别=男 ← k=v 格式,可多个属性
李四,产品 ← 简写,归到统一的"标签"属性
中英文逗号、中英文等号都识别。填了之后,“按属性均衡”下拉会自动列出所有出现过的属性键供你选。
关键认知:属性均衡是软约束,不是硬约束。算法跑最多 300 次随机分配,每次计算”该属性在各组的分布方差”,保留方差最小的那一次——尽量均匀,但不保证每组一模一样。
完美均衡需要同时满足:
- 该属性每个值的总人数能被组数整除(8 男 8 女分 4 组 → 每组 2 男 2 女,可以完美)
- 没有别的约束来打架
做不到完美的几种情况:
- 除不尽:7 男 5 女分 4 组,必然有两组 2 男 1 女、两组 1 男 2 女
- 禁同组锁死:禁同组把同属性的人强制分到不同组,均衡就被牵制
- 必同组扎堆:3 个男生必同组,那一组注定男生偏多
结果区会显示不平衡度:0 是完美,数字越大越不均。觉得不理想就多点几次”重新洗牌”,看能不能碰到更低的分。
余数处理:17 人按每组 4 的三种解
只在”按每组人数”模式、且总人数除不尽时,才需要决定零头怎么办。以 17 人按每组 4 为例:
| 选项 | 结果 | 适用场景 |
|---|---|---|
| 均匀分配(默认) | 余数分散,每组最多差 1(如 4+4+4+5) | 课堂分组、一般团队 |
| 单独一组 | 前几组装满,剩下自成一组(4+4+4+4+1) | 要明显区分”主组 + 散户” |
| 抽掉 | 把不够一组的人随机抽掉,全是满员组(4×4,抽掉 1 人) | 必须满员 / 必须配对 |
什么时候用”抽掉”?当”不满员就没法玩”的时候:Secret Santa 必须两两配对(奇数就得抽掉一人或自己补位)、淘汰赛抽签必须每组满员。其余日常场景一般”均匀分配”最自然。
三种典型场景速查
| 场景 | 模式 | 余数 | 属性均衡 | 约束 |
|---|---|---|---|---|
| 团建分桌 50 人 / 10 桌 | 按组数 = 10 | 均匀分配 | 按”部门” | 必同组:夫妻;禁同组:上下级 |
| 班级分组 30 人 / 每组 5 | 按每组人数 = 5 | 均匀分配 | 按”能力”(A/B/C) | — |
| Secret Santa 24 人 / 两两配对 | 按每组人数 = 2 | 抽掉(奇数时) | — | 禁同组:所有伴侣对 |
算法是怎么跑的、为什么每次不一样
理解了流程,就知道”重新洗牌”在干嘛:
- 必同组合并——并查集把所有”必须同组”的人合并成”单元”,单元内成员永远绑在一起移动。
- 重复随机分配——把单元随机洗牌,按组大小递减逐个填进还有空位的组,遇到禁同组冲突就跳过该组找下一个。
- 打分保最优——每次成功分配后算”指定属性的不平衡度”,跑满 300 次,保留分数最低的那次。
第 1 步洗牌的随机种子是 Math.random(),浏览器每次给不同种子,所以每次重洗探索到的解不同,结果自然不一样。只有当约束极紧、可行解寥寥时,才会反复落到同样的少数解上——那说明你已经摸到约束允许的最优了,再洗也变不出花。
导出与数据安全
分好后两种导出:
- 复制:按”第 N 组(X 人)“排版的纯文本,直接粘到微信 / 飞书 / 钉钉群,对方原样看到。
- CSV:带 UTF-8 BOM,Excel / WPS / Numbers 双击中文不乱码,列是组号 / 姓名 / 属性,可打印或继续加签到、菜品等列。
没有自带海报导出——要做分桌牌、签到墙,把 CSV 拿去 Canva 等工具排版即可。
数据全程不上传:名单、属性、约束只存在浏览器 localStorage 和当前页面,关标签页或清缓存即清除,刷新会自动恢复上次输入。处理团队真实名单、班级真实学生信息都不用担心泄露。性能上 500 人内毫秒返回,约束太紧会明确提示,放宽约束或加组数即可。
需要的是”挑几个人出来”而不是”全员分组”?那用 随机抽签 或 做个决定 更顺手。分组工具专攻的是带约束、要均衡、要满覆盖这三件随机洗牌做不到的事。