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

集合分组优化问题:满足proto-elements约束的最少分组求解

一维装箱问题(你的问题对应此经典NP难问题)

问题定义

给定由有限个不相交有限集合组成的集合C={s₁, s₂, ..., sₙ},每个集合sⱼ的proto-elements数量记为wⱼ(正整数),要求将C划分为最少数量的不相交组{g₁, g₂, ..., gₗ},满足每组内所有sⱼ的wⱼ之和≤给定阈值K。

示例

输入:C={s₁(1), s₂(1), s₃(4), s₄(2)},K=4

  • 非最优分区:3组({s₁,s₂}, {s₃}, {s₄}),各组总数量均≤4,但组数非最少
  • 最优分区:2组({s₁,s₂,s₄}, {s₃}),满足组数最少约束

当前朴素算法的问题

你实现的算法属于**首次适应(First Fit)**的简化版本,存在两处核心缺陷导致无法得到最优解:

  1. 未对集合按wⱼ排序,按原顺序处理容易留下无法填充的空间空隙
  2. 条件判断错误(new_running_count < K),导致刚好等于K的情况也会新建分组,进一步浪费容量

你的朴素算法代码:

1) Initialize the current group to an empty collection
current_group={}
2) Initialize the running count of proto-elements in current_group to 0
running_count=0
3) For each set S in C
3.1) Let count be the number of proto-elements in S
3.2) If count is 0 (S is empty), continue with the next iteration
3.3) new_running_count = running_count + count
3.4) if new_running_count < K {
         add the current set S to current_group
         running_count = new_running_count
     }
3.5) else { /* new_running_count is equal to greater to K */
         print current_group
         running_count = count
         current_group={}
         add the current set S to current_group
     }
4) After the loop ends print current_group if it is not empty

解决思路

实际场景优先:近似启发式算法(接近最优,效率高)

因为装箱问题是NP难问题,大规模数据下无法快速求得最优解,常用以下近似算法:

  • 首次适应递减(First Fit Decreasing, FFD):先将所有集合按wⱼ从大到小排序,再把每个集合放入第一个能容纳它的现有组;若所有组都无法容纳,则新建组。该算法的分组数不会超过最优解的11/9倍+1,多数场景下表现接近最优。
  • 最佳适应递减(Best Fit Decreasing, BFD):同样先按wⱼ降序排序,再把当前集合放入剩余空间最小且能容纳它的组;无符合条件的组则新建。空间利用率通常比FFD更高。

小规模数据:最优解算法

若数据集规模较小,可通过以下方法求得严格最优解:

  • 动态规划:定义状态dp[i][j]表示前i个集合用j个组能否满足约束,逐步推导最小的j值
  • 分支定界:通过剪枝策略减少搜索空间,枚举所有可能的分组方式并找到最优解

相关书籍与文献

  • 《算法导论》:第16章贪心算法部分包含装箱问题的近似算法分析,易懂且权威
  • 《组合优化:理论与算法》:深入覆盖装箱问题的精确算法、近似算法的理论证明与复杂度分析
  • 经典论文:Analysis of the First-Fit Decreasing Bin-Packing Algorithm(Johnson等人,1974),是FFD算法性能分析的奠基性文献

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:35:45