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

Oracle PL/SQL实现盒子组合求和筛选容器最优适配方案

Oracle盒子最优适配组合PL/SQL实现方案

需求梳理

  • 基础数据:3个盒子的ID、存储物品数量从自定义记录类型表中获取,示例数据为B101(5)、B102(5)、B103(4)
  • 容器规则:已有固定存量2,总容量为15,所有组合必须包含已有存量
  • 输出要求:筛选出总容量小于容器总容量的所有组合中,总容量最大的最优适配组合

实现代码

DECLARE
    -- 自定义盒子记录类型
    TYPE box_rec IS RECORD (
        box_id     VARCHAR2(10),
        item_count NUMBER
    );
    -- 自定义记录类型表
    TYPE box_tab IS TABLE OF box_rec;
    -- 盒子数据初始化,可根据实际数据源替换
    l_boxes        box_tab := box_tab();
    -- 容器固定参数
    c_exist_count  CONSTANT NUMBER := 2;
    c_total_cap    CONSTANT NUMBER := 15;
    -- 遍历过程变量
    l_current_sum  NUMBER;
    l_current_comb VARCHAR2(200);
    -- 最优结果存储变量
    l_max_sum      NUMBER := 0;
    l_best_comb    VARCHAR2(200);
BEGIN
    -- 加载盒子数据,可替换为从业务表查询赋值逻辑
    l_boxes.EXTEND(3);
    l_boxes(1).box_id := 'B101';
    l_boxes(1).item_count := 5;
    l_boxes(2).box_id := 'B102';
    l_boxes(2).item_count := 5;
    l_boxes(3).box_id := 'B103';
    l_boxes(3).item_count := 4;

    -- 位运算遍历所有非空盒子组合:3个盒子对应二进制001~111,共7种组合
    FOR i IN 1 .. POWER(2, l_boxes.COUNT) - 1 LOOP
        l_current_sum := 0;
        l_current_comb := '';
        -- 逐位判断是否选中对应盒子
        FOR j IN 1 .. l_boxes.COUNT LOOP
            IF BITAND(i, POWER(2, j - 1)) > 0 THEN
                l_current_sum := l_current_sum + l_boxes(j).item_count;
                l_current_comb := l_current_comb || l_boxes(j).box_id || '、';
            END IF;
        END LOOP;
        -- 去掉组合ID末尾多余的顿号
        l_current_comb := RTRIM(l_current_comb, '、');
        -- 叠加已有存量后判断是否符合容量要求,且为当前最优
        IF (l_current_sum + c_exist_count) < c_total_cap 
            AND (l_current_sum + c_exist_count) > l_max_sum THEN
            l_max_sum := l_current_sum + c_exist_count;
            l_best_comb := l_current_comb;
        END IF;
    END LOOP;

    -- 输出最优结果
    DBMS_OUTPUT.PUT_LINE('最优适配组合为:' || l_best_comb);
    DBMS_OUTPUT.PUT_LINE('组合总容量(含已有存量):' || l_max_sum);
END;
/

输出示例

最优适配组合为:B101、B102
组合总容量(含已有存量):12

逻辑说明

  • 位运算遍历所有组合的方式可兼容不同数量的盒子场景,仅需修改盒子初始化部分的数据源即可
  • 遍历过程中实时校验容量规则、更新最优解,无需额外存储中间结果,执行效率高
  • 所有规则参数(已有存量、总容量)均定义为常量,便于后续调整修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 20:06:08