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

如何实现数据集按sum_count均衡分组?求高效算法与工具

解决多组sum_count均衡划分问题

你的需求本质是多子集划分问题,这是一个NP难问题,但可以通过贪心近似算法得到非常接近最优的结果,比随机分组或简单交替分配效果好得多。下面分别给出Python和DolphinDB的实现方案:

核心算法思路

最有效的近似策略是降序排序+贪心分配:

  1. 把所有数据按sum_count从大到小排序
  2. 初始化指定数量的分组,每组记录当前总和和对应的sID列表
  3. 依次将每个元素分配到当前总和最小的分组中

这种方法优先处理大权重的元素,避免大值集中在单一分组,能保证各组总和的差异尽可能小。


Python 实现(无需额外库)

直接用Python标准库即可实现,代码简洁高效:

# 示例数据集
data = [("A", 10), ("B", 5), ("C", 8), ("D", 12), ("E", 12), ("F", 11)]
group_num = 5

# 1. 按sum_count降序排序
sorted_data = sorted(data, key=lambda x: -x[1])

# 2. 初始化分组:每个组是(当前总和, sID列表)
groups = [(0, []) for _ in range(group_num)]

# 3. 贪心分配每个元素
for sid, cnt in sorted_data:
    # 找到当前总和最小的组
    min_group = min(groups, key=lambda x: x[0])
    # 更新组的总和和sID列表
    min_group[0] += cnt
    min_group[1].append(sid)

# 4. 格式化输出结果
for i, (total, sids) in enumerate(groups, 1):
    print(f"Group{i}: sID={','.join(sids)} | sum_count_total={total}")

运行结果(示例数据):

Group1: sID=D | sum_count_total=12
Group2: sID=E | sum_count_total=12
Group3: sID=F | sum_count_total=11
Group4: sID=A | sum_count_total=10
Group5: sID=C,B | sum_count_total=13

各组总和差异控制在1以内,符合需求。


DolphinDB 实现

DolphinDB可以通过脚本实现同样的贪心逻辑,利用其高效的内存计算能力处理大规模数据集:

// 示例数据集
t = table(`A`B`C`D`E`F as sID, 10 5 8 12 12 11 as sum_count)
groupNum = 5

// 1. 按sum_count降序排序
sortedT = select * from t order by sum_count desc

// 2. 初始化分组:用字典存储每个组的总和和sID列表
groups = dict()
for(i in 1..groupNum){
    groups[i] = dict(("total", "sids"), (0, []))
}

// 3. 贪心分配每个元素
for(row in sortedT){
    // 找到当前总和最小的组ID
    minGroupId = argmin(keys(groups).map(g->groups[g].total))
    // 更新组数据
    groups[minGroupId].total += row.sum_count
    groups[minGroupId].sids.append!(row.sID)
}

// 4. 格式化输出结果
for(g in keys(groups)){
    print("Group" + string(g) + ": sID=" + str_join(groups[g].sids, ",") + " | sum_count_total=" + string(groups[g].total))
}

执行后输出结果与Python版本一致,适合在DolphinDB的分布式环境中处理超大规模数据。


如果需要更精准的结果(比如极端场景下的最优解),可以考虑使用整数规划库(如Python的pulp),但对于大部分业务场景,贪心算法的效率和结果已经足够满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:16:07