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

多最低阈值约束下实现人员最多作业分配的最优贪心算法咨询

多阈值约束下作业分配最优贪心算法

核心设计目标

在满足多维度阈值递进要求、单用户最大权重上限J100的前提下,实现分配作业数量最大化,同时自动过滤无法帮助任何用户达到阈值的无效作业。

具体执行步骤

预处理环节

  • 所有待分配作业按从小到大排序(小作业优先分配是最大化作业数量的核心前提,和原有从大到小的排序逻辑相反)
  • 为每个用户初始化4个状态字段:
    • cur_weight:当前累计已分配权重,初始值为0
    • cur_level:已达到的最高阈值等级,初始值为0(未达到任何阈值)
    • next_threshold:下一级待达成阈值,初始值为第一级阈值T1
    • remaining:剩余可分配容量,初始值为J100 - cur_weight

作业分配环节

遍历排序后的每一个作业,按以下规则分配:

  1. 无效作业校验:如果当前作业的大小 > 所有用户的next_threshold - cur_weight,说明分配给任何用户都无法帮助其达成下一级阈值,直接弃置
  2. 筛选合格承接用户,需同时满足两个条件:
    • 剩余容量remaining ≥ 当前作业大小
    • cur_weight + 作业大小 ≤ next_threshold(避免超额占用容量,预留空间给后续小作业凑阈值)
  3. 对合格用户按优先级从高到低排序:
    • 第一优先级:cur_weight + 作业大小 == next_threshold(分配后刚好达成下一级阈值,无容量浪费)
    • 第二优先级:cur_level更低(优先推进低阈值阶段的用户升级,覆盖更多阈值要求)
    • 第三优先级:remaining更小(优先消耗剩余容量少的用户,保留大剩余容量的用户承接后续作业)
  4. 将作业分配给优先级最高的用户,同步更新该用户的4个状态字段。如果用户分配后达到next_threshold,则自动升级cur_level,更新next_threshold为下一级阈值,若已达到最高级阈值则next_threshold设为J100

收尾校验环节

所有作业遍历完成后,清空cur_level = 0用户的所有分配作业,转为弃置(未达到最低阈值要求的分配视为无效)

场景适配验证

原示例验证

示例参数:2名用户A、B,三级阈值为T10、T20、T30,单用户上限J100;待分配作业为[J5,J10,J15,J20]

  • 作业从小到大排序为J5、J10、J15、J20
  • 分配J5:A、B均满足条件,且优先级相同,假设分配给B,B的cur_weight变为5
  • 分配J10:B的cur_weight +10 =15 < next_threshold 20,A的cur_weight +10=10 == next_threshold 10,A优先级更高,分配给A,A等级升级到1,next_threshold变为20
  • 分配J15:A的cur_weight+15=25 ≤ next_threshold 30,B的cur_weight+15=20 == next_threshold 20,B优先级更高,分配给B,B等级升级到2,next_threshold变为30
  • 分配J20:A的cur_weight+20=30 == next_threshold 30,优先级更高,分配给A,A等级升级到2
  • 最终分配结果总作业数为4,和原有逻辑结果一致,满足最多作业要求

无效作业验证

如果仅存在大小为W5的作业,所有用户的next_threshold - cur_weight =10 >5,但没有用户分配后可以刚好达到T10,因此作业直接弃置,符合规则要求。

对比原有逻辑的优势

原有从大到小分配的逻辑,容易出现大作业占用容量导致大量小作业无法分配的问题,极端场景下:阈值T10,作业为[J1*10, J90],原有逻辑先分配J90,总作业数仅1;本算法先分配10个J1刚好达标,总作业数为10,更符合最大化作业数量的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:30:01