计算机算法设计与分析-复习19

计算机算法设计与分析-复习19(分支限界法求带期限的作业排序问题)

问题描述

img
img
注:考试时,需要注意题目要求的状态空间树的表示形式
img
img

FIFOBB

img
做题步骤:

  1. 三元组(pi,di,ti)
    1. 其中pi, 代表作业如果在期限内未完成,会罚款。
    2. 其中di,代表作业i完成期限
    3. 其中ti,代表作业i需要的时间。
  2. 状态空间树(大小可变的元组、大小固定的元组):蓝色节点代表无法在规定时间内完成。(不满足的节点)(罚款值为无穷大)
    1. 圆形节点代表答案节点
    2. 大小固定的状态树,叶子节点就是答案节点
    3. 大小不固定的状态树,所有节点均是答案节点。
  3. 每个节点的成本函数(没有意义):罚款值的求取:哪些点没有选中,将其罚款值相加。(自底向上求)(符号为c)
  4. 引入成本函数估计值(成本函数下界)(最少的罚款值):已经被考虑过但没有被计入J中的作业的罚款合计(成本函数最小值)(罚款的底线)。
  5. 成本函数估计值,从根开始求。(看当前节点之前的节点是否被考虑过,如果考虑过,但是没有选择该作业,那么将罚款值累加)(符号为c横杠)
  6. 成本估计函数上界(最多的罚款值)(u):不管有没有考虑过,只要没有被计入J中的作业的罚款合计
    1. 每产生一个上界,就会跟当前上界进行比较,取较小者。
    2. 如果某节点的下界大于当前上界,将该节点杀死。
  7. 答案就是最小的u(上界)所在的节点向上追溯。
  8. 如果引入(很小的正常数:ε)后:
    1. 令根结点T是当前E-结点;
      对估计成本上界U(整个的上界)和答案解ans赋初值:
      如果T是解结点,U←min(T的成本c(求c), u(T)+ε),ans←T;
      否则U←u(T)+ε, ans←0;
      活结点队列置为空;
    2. 如果ĉ(X)<U,将X加入到队列中,并对X进一步判断:
      1. 如果X是解结点且X的成本<U,U←min(X的成本, u(X)+ ε),ans←X;
      2. u(X)+ε<U, U←u(X)+ε;
    3. 若队列为空,打印当前ans;否则从队列中获取下一个活结点E:若ĉ(E)<U,转到步骤2,否则转到步骤3。
  9. 假定状态空间树T至少包含一个解结点,不可行结点的估计值ĉ(X)=∞;
    1. 可行结点的估计值 ĉ(X)≤c(X)≤u(X)。

例题

img

LCBB

做题步骤:

  1. 采用min-堆保存活结点表
  2. ADD、LEAST过程:
    1. 将结点加入到min-堆或从min-堆中删除。
    2. 其余约定同于FIFO检索
    3. if 不再有活结点 or 下一个E-结点有ĉ>=U then print(“least cost=”,U)
    4. 否则,再取即可。

注:最小堆以ĉ为基准

致谢

    [1] 以上图片来自于中国科学院大学马丙鹏老师计算机算法设计与分析课程
posted @   夏目^_^  阅读(100)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示