产品至购物篮的最优分配算法设计技术问询
购物篮分配优化算法(优先最大化单篮产品数)
问题明确
给定一组产品,每个产品对应一个可放置的购物篮集合,需完成以下优先级从高到低的优化目标:
- 最大化单个购物篮中的产品数量
- 在满足目标1的前提下,使用尽可能少的购物篮
算法核心思路
阶段1:最大化单篮产品数量
这一步的核心是优先锁定能容纳最多产品的购物篮,尽可能把所有可选该篮的产品分配进去,确保单篮产品数达到理论最大值:
- 统计每个购物篮的潜在可容纳产品数:遍历所有产品,统计每个篮被多少个产品列为可选放置目标
- 选择潜在可容纳数最多的篮作为「核心篮」;若多个篮并列最多,任选其一即可
- 将所有可选该核心篮的产品全部分配至该篮,并从待分配产品列表中移除这些产品
阶段2:用最少购物篮分配剩余产品
对剩余未分配的产品,采用贪心集合覆盖策略,以最少篮数完成分配:
- 每次选择能覆盖当前未分配产品数量最多的购物篮
- 将该篮可覆盖的所有未分配产品分配至该篮,移除这些产品
- 重复上述步骤,直到所有产品都完成分配
示例验证
以题目给出的案例为例:
产品与可选篮列表:
- 猕猴桃:1、2
- 香蕉:1
- 苹果:1、2
- 菠萝:1、3
- 椰子:2、3
- 李子:3
阶段1执行
统计各篮潜在可容纳数:
- 篮1:猕猴桃、香蕉、苹果、菠萝 → 4个
- 篮2:猕猴桃、苹果、椰子 → 3个
- 篮3:菠萝、椰子、李子 → 3个
选择篮1作为核心篮,将猕猴桃、香蕉、苹果、菠萝全部分配至篮1,剩余待分配产品为椰子、李子。
阶段2执行
剩余产品可选篮:
- 椰子:2、3
- 李子:3
选择能覆盖所有剩余产品的篮3,将椰子、李子分配至篮3,所有产品分配完成。最终仅使用2个购物篮,且最大篮产品数为4,完全匹配最优方案。
算法复杂度分析
- 阶段1:
O(M*N),其中M为购物篮数量,N为产品数量(用于统计各篮潜在可容纳数) - 阶段2:
O(K*M*N),其中K为最终使用的购物篮数量(每次选择篮需遍历所有篮和剩余产品)
对于绝大多数实际场景,该算法效率足够;若处理超大规模数据,可通过预处理产品-篮的映射表优化查询速度。
注意事项
- 若多个篮能达到相同的最大单篮产品数,任选其一即可,最终总篮数差异极小
- 阶段2的贪心集合覆盖是近似算法,能保证得到的篮数不超过最优解的
O(logN)倍,实际表现接近最优
内容的提问来源于stack exchange,提问作者Cookie
相关产品推荐
相关产品推荐

