⭐ 觉得好用?收藏备用,下次直接打开
1 名单
1
*张三 标为队长候选,算法保证每组分到一个 · 张三,部门=研发 后续可按部门均衡
2 分组设置
分组方式
余数处理
按属性均衡
名单加 k=v 属性后可勾选多项
3 分组结果
把名单粘进 ① → 点"开始分组",结果会出现在这里

活动分组 是一个面向”团建分桌 / 班级分小组 / 比赛分组 / Secret Santa”的随机分组工具——粘贴名单、选好分组模式(固定组数 或 固定每组人数)、加上必要的约束(禁同组 / 必同组 / 按属性均衡),一键得到一份满足约束的合理分配。

它解决的问题

普通”随机洗牌再切片”做不到的几件事:

  • 禁止某两个人同组(情侣不分一桌、闹矛盾的两位避免凑一桌)
  • 要求某几个人必须同组(搭档一起、夫妻坐一起、同部门组团)
  • 按属性均衡(每组研发 / 产品 / 设计比例一致、男女比例一致、能力高低搭配)
  • 余数处理(17 人按每组 4 → 是放进 4 组里、还是 4 组 + 单独 1 人、还是抽掉 1 个?)

把这些条件一股脑塞进算法,工具会自动跑最多 300 次随机分配,挑出”既满足约束、又把属性分布最均衡”的那一次。

三种典型用法

场景模式余数属性约束
团建分桌 50 人 / 10 桌按组数 = 10均匀分配按 “部门” 均衡必同组:夫妻;禁同组:上下级
班级分小组 30 人 / 每组 5按每组人数 = 5均匀分配按 “能力” 均衡(A/B/C)
Secret Santa 24 人 / 两两配对按每组人数 = 2抽掉(如果是奇数)禁同组:所有伴侣对

数据安全

所有名单、属性、约束都只在浏览器本地处理:

  • 不发起任何网络请求
  • localStorage 存储当前输入,刷新页面自动恢复
  • 关闭标签页或清浏览器数据即彻底清除
  • 适合处理团队真实名单、班级真实学生信息,不用担心泄露

📍使用场景

  • 公司团建分桌50 人晚宴 10 桌,按"部门均衡"避免研发抱团;用"禁同组"把闹矛盾的两位错开、用"必同组"让夫妻 / 同部门搭档坐一起。
  • 班级分小组做项目30 人按 6 组分,按"能力=A/B/C"或"性别"均衡,每组高低搭配;老师粘名单 + 一栏属性,一键出方案。
  • 比赛 / 抽签分组16 队按 4 组分小组赛,"按协会均衡"避免同协会同组;不满意一键重洗,直到合理为止。
  • Secret Santa / 互助配对每两人一组互送礼物 → 选"按每组人数=2",用"禁同组"把伴侣 / 直系亲属屏蔽,避免抽到自己人。

常见问题

跟"随机抽签"有什么区别?这个非用不可的场景是什么?

"随机抽签"是从 N 里挑 K 个,本工具是把 N 个全部分成 K 组——目标完全不同。必须用本工具的场景:(1) 有约束——禁同组(情侣不分一桌 / 同部门避免抱团)、必同组(搭档要一起);(2) 要均衡——按部门 / 性别 / 能力均匀分布到每组;(3) 要满覆盖——所有人都得在某个组里,不是抽 5 个出来。用随机抽签就够的场景:班级随机点 3 个人答题、年会抽奖、做选择题——这些都是"挑出来"而不是"分组"。两者互补,工具页底部"相关工具"互相链接。

名字后面的属性怎么写?工具识别哪些格式?

两种写法都识别:(1) 名字,k=v,k=v 格式——张三,部门=研发,性别=男李四,部门=产品,能力=A,工具会自动收集所有出现过的属性键作为"按属性均衡"下拉选项;(2) 名字,标签 格式——张三,研发李四,产品,名字后面任何不带等号的内容都会归到统一的"标签"属性下。分隔符:英文 , 和中文 都识别,等号 = 和中文 都识别。何时填属性:只在需要"按属性均衡"时填——比如想保证每组研发 / 产品比例一致;纯随机分组不需要任何属性。

"必同组"和"禁同组"怎么写?支持多人吗?

每行一对或一组,逗号分隔必同组张三,李四 表示这两个人必须在同一组;写 王五,赵六,孙七 表示这三个人必须在同一组(工具用并查集把多条"必同组"传递合并——A,BB,C 会让 A/B/C 都成为同一单元)。禁同组张三,李四 表示这两个人不能在同一组;写 周八,吴九,郑十 表示这三个人两两都不能同组。冲突检测:如果同两个人既在"必同组"又在"禁同组",工具会直接报"约束冲突";如果某个必同组单元的人数超过你设的最大组容量(比如 5 人必同组但每组只能 4 人),也会立刻提示。

"按属性均衡"是硬约束还是软约束?能保证每组属性一模一样吗?

软约束——尽量均匀,不保证完全一致。算法会跑最多 300 次随机分配,每次计算"该属性在各组的分布方差",保留方差最小的那次。完美均衡的前提:(1) 该属性的每个值的总人数能被组数整除(如 8 男 8 女分 4 组每组 2 男 2 女);(2) 没有其他约束冲突。做不到完美的情况:(a) 总人数除不尽(7 男 5 女分 4 组,肯定有两组 2 男 1 女、两组 1 男 2 女);(b) "禁同组"约束把同属性的人锁死在不同组;(c) "必同组"单元里就已经属性单一(3 男必同组 → 那一组必然男生扎堆)。结果区会显示"不平衡度 X.X"——0 是完美,越大越不平衡,可以多点几次"重新洗牌"看能否更低。

"余数处理"三个选项怎么选?什么时候用"抽掉"?

只在"按每组人数"模式下,并且总人数不能整除每组人数时才有区别均匀分配(默认):余数分散到几个组里,每组最多差 1 人。例 17 人按每组 4 → 17 = 4+4+4+5,4 组里有一组 5 人;或者 17 人按每组 5 → 17 = 5+5+4+3 → 实际"均匀"算法会算成 17/⌈17/5⌉=17/4 → 4+4+4+5 + 没用上"每组 5 人"。单独一组:前几组按你指定的人数装满,剩余的不管几个都自成一组。例 17 人按每组 4 → 4+4+4+4+1(最后一组只有 1 人)。抽掉:仅在"按每组人数"模式可选——直接把不够凑一组的人随机抽掉,输出全是满员组。例 17 人按每组 4 → 4 组 × 4 人 + 抽掉 1 人。Secret Santa(必须两两配对)、淘汰赛抽签(必须满员)用"抽掉";课堂分组一般用"均匀分配";要明显区分"主组 + 散户"用"单独一组"。

数据会上传吗?最多支持多少人?

完全不上传,全部在浏览器本地运行。名单、属性、约束条件都只存在浏览器 localStorage 和当前页面 DOM 里,关掉标签页或清浏览器数据就消失,刷新页面会自动恢复上次的输入。性能上限:算法每次最多跑 300 轮随机分配,500 人内毫秒级返回;超过 1000 人但约束很松也能跑(< 1 秒);如果约束极紧(很多必同组 + 禁同组互相牵制),可能跑满 300 轮也找不到完美方案,会在警告区提示"约束太紧"——这时手动放宽几条约束、或者增加组数 / 每组人数即可。

怎么导出分组结果?能直接打印或发群里吗?

两个导出选项:(1) 复制按钮——按"第 N 组(X 人)"格式排版的纯文本,粘到微信群 / 飞书 / 钉钉,对方原样看到完整分组;(2) CSV 按钮——下载带 UTF-8 BOM 的 CSV 文件,Excel / WPS / Numbers 双击打开中文不乱码,列是"组号 / 姓名 / 属性...",可以直接打印或继续在表格里二次处理(加备注、加菜品安排、加签到列等)。没有自带海报导出——如果要做分桌牌、签到墙,把 CSV 拿去 Canva / 美图秀秀 / 微信公众号"图文消息"里排版即可。

算法是怎么工作的?为什么"重新洗牌"每次结果都不一样?

核心三步:(1) 必同组合并——用并查集把所有"必须同组"的人合并成"单元",单元内成员永远绑在一起移动;(2) 重复随机分配——把单元随机洗牌,按"组大小递减"逐个填进还有空位的组里,遇到禁同组冲突就跳过该组找下一个;(3) 打分保最优——每次成功分配后计算"按指定属性的不平衡度",跑最多 300 次保留最低分的那次。为什么每次不一样:第 (1) 步的洗牌种子是 Math.random(),浏览器每次会给不同种子;只有在约束极紧时才会反复探索同样的少数解,那时多次重洗会看到完全相同的结果。