You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两步记录分配问题:将N条记录均匀分配至K组且每组有容量上限M

均匀分配N条记录到K个组的两步解决方案

咱们来拆解这个两步分配问题:核心目标是把N条记录尽可能均匀地分到K个组里,同时还要满足每个组最多容纳M条记录的约束。我结合你给的例子一步步讲清楚:

第一步:无最大容量约束时的基础均匀分配

当没有每个组最多M条的限制时,分配逻辑很直接:

  • 先算每个组的基础分配数:base = N // K(整数除法,取商)
  • 再算需要多分配1条的组数量:remainder = N % K(取余数)
  • 最终分配结果:remainder个组各分base + 1条,剩下的K - remainder个组分base条

比如你提到的例子:N=5,K=3

  • base = 5 // 3 = 1,remainder = 5 % 3 = 2
  • 所以2个组各分2条,1个组分1条,也就是K1=2、K2=2、K3=1(任意两个组多1条都符合均匀要求)

第二步:加入「每个组最多M条」的约束调整

当某个(或某些)组有最大容量M的限制时,我们需要先处理受约束的组,再重新分配剩余记录:

  1. 先给受约束的组分配它的最大容量M(比如你例子里K1最多1条,先给K1分1条)
  2. 计算剩余待分配的记录数:remaining_records = N - M
  3. 计算剩余可分配的组数:remaining_groups = K - 1(因为K1已经分配完成)
  4. 对剩余的记录和组数,重复第一步的均匀分配逻辑

还是用你的例子:N=5,K=3,K1最多1条

  • 先给K1分1条,剩余记录=5-1=4,剩余组数=3-1=2
  • 对4条记录分2个组:base=4//2=2,remainder=0,所以K2和K3各分2条
  • 最终结果就是K1=1、K2=2、K3=2

通用情况补充

如果是所有组都有最大容量M的限制,那首先要先判断:如果N > K * M,那这个问题无解——因为所有组都装满M条也装不下N条记录。如果N ≤ K * M,那先确保每个组的分配数不超过M,要是第一步的base + 1超过M,就先给每个组分配M条,再把剩余的记录(如果有的话)调整到还有空间的组里,保证整体尽可能均匀。

内容的提问来源于stack exchange,提问作者user172839

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:43:49