多列产品最优组合Algorithm求解方案问询
问题分析
你需要处理固定列数的产品组合筛选问题:给定3列产品(每列含2个带价格的产品),生成所有「第一列选1个 + 第二列选1个 + 第三列选1个」的跨列组合,计算每个组合的总价后找出总价最高的最优组合。
核心算法步骤
1. 数据结构化
先把每列的产品-价格键值对整理成可遍历的集合(比如列表、数组),方便后续操作:
- 列1:
[("label1", price1), ("label4", price4)] - 列2:
[("label2", price2), ("label5", price5)] - 列3:
[("label3", price3), ("label6", price6)]
2. 生成所有合法组合
由于列数固定为3,且每列仅需选1个产品,直接用**三重遍历(笛卡尔积)**生成所有可能的组合即可。总组合数为 2*2*2=8,计算量极小,暴力遍历完全可行。
3. 计算组合总价
对每个生成的组合,取出三个产品的价格求和,将「组合标识」和「总价」关联存储(比如存为元组 (组合列表, 总价))。
4. 筛选最优组合
遍历所有带总价的组合,记录下总价最大的组合;如果存在多个组合总价相同且均为最大值,可选择返回全部或任意一个。
优化说明
当前场景下产品数量极少,暴力遍历是最高效的方案。如果后续列数或每列产品数大幅增加,可改用动态规划优化:先计算前N列的最优组合总价,再逐步和下一列组合计算,避免全量遍历所有组合。
示例伪代码
# 定义各列产品数据(替换为实际价格) column1 = [("label1", 10), ("label4", 15)] column2 = [("label2", 20), ("label5", 25)] column3 = [("label3", 5), ("label6", 8)] max_total = -float('inf') best_combinations = [] # 遍历所有可能的跨列组合 for item1 in column1: for item2 in column2: for item3 in column3: current_total = item1[1] + item2[1] + item3[1] # 更新最优组合 if current_total > max_total: max_total = current_total best_combinations = [[item1[0], item2[0], item3[0]]] elif current_total == max_total: best_combinations.append([item1[0], item2[0], item3[0]]) # 输出结果 print("最高总价:", max_total) print("最优组合:", best_combinations)
内容的提问来源于stack exchange,提问作者ivanovUA
相关产品推荐
相关产品推荐

