今日算法学习(动态规划)



题目💖

====

某汽车加工工厂有两条装配线L1、L2,每条装配线的工位数均为n(Sij, i=1或2, j=1,2,…,n)。‘两条装配线对应的工位完成同样的加工工作,但是所需要的时间可能不同(aij, i=1或2, j=1,2,…,n)。汽车底盘开始到进入两条装配线的时间(e1,e2)以及装配后到结束的时间(X1、X2)也可能不相同。从一个工位加工后流到下一个工位需要迁移时间(tij, i=1或2, j=2,3,…,n)。现在要以最快的时间完成一辆汽车的装配,求最优的装配路线

分析该问题,发现问题具有最优子结构。以L1为例,除了第一个工位之外,经过第j个工位的最短时间包含了经过L1的第j-1个工位的最短时间或经过L2的第j-1个工位的最短时间,如式(1).装配后到结束的最短时间包含离开L1的最短时间或离开L2的最短时间,如式(2)

在这里插入图片描述

在这里插入图片描述

(1) 由于在求解经过L1和L2的第j个工位的最短时间均包含了经过L1的第j-1个工位的最短时间或经过L2的第j-1个工位的最短时间,该问题具有重复子问题的性质,故采用迭代方法求解。该问题采用的算法设计策略是____,

A.分治        B.动态规划        C.贪心        D.回溯

(2) 算法的时间复杂度为____,

A. O(lgn)        B. O(n)        C. O(n2)        D. O(nlgn)

(3) 以下是一个装配调度实例,其最短的装配时间为____,

A.21        B.23        C.20        D.26

(4) 装配路线为____

A. S11 → S12 → S13

B. S11 → S22 → S13

C. S21 → S12 → S23

D. S21 → S22 → S23

在这里插入图片描述

题目有些长,而且还有公式,不过,来都来了

等做完这道题,我又是一条好汉<( ̄︶ ̄)↗[GO!]


我们从题目开始一点点解析,如果您已经理解了题目意思,可以直接跳到 流程解析 或者 答题 部分


题目解析💖

======

图示解析🎀🎢


题目中有关装配路线图例的说明有5句话,分别解析如下:

① 某汽车加工工厂有两条装配线L1、L2

解析:

  • 图中有两条总路线L1、L2,均从Begin开始,到End结束;
  • 其中S11、S12、S13为L1装配线,S21、S22、S23为L2装配线;

② 每条装配线的工位数均为n(Sij, i=1或2, j=1,2,…,n)。

解析:

  • “工位”,与后面的"加工"是一个意思,都指代汽车装配的某一个子过程,即图中的S,以圆圈表示
  • S标记的 i 只有两种可能:1或2;i=1代表属于L1装配线,i=2代表属于L2装配线
  • S标记的 j 有多种可能,一条装配线有多少加工数,j的最大值就是多少,本题中最大为3

③ 两条装配线对应的工位完成同样的加工工作,但是所需要的时间可能不同(aij, i=1或2, j=1,2,…,n)

解析:

  • S11和S21、S12和S22、S13和S23完成的结果是一样的
  • 图中圆圈里标明的数字为该"加工"需要的时间,符号标记为a
  • 同S标记一样, i 只有两种可能, j 的取值范围取决于单条装配线的加工数,在本题中,j 有3种可能

④ 汽车底盘开始到进入两条装配线的时间(e1,e2)以及装配后到结束的时间(X1、X2)也可能不相同。

解析:

  • 从Begin开始,分别连到S11、S21的两条路线上标记的数字为"汽车底盘开始到进入装配线的时间"
其中,Begin→S11花费的时间为e1  
Begin→S12花费的时间为e2
  • 装配后到结束的时间X1、X2指的是:S13→end、S23→end消耗的时间

⑤ 从一个工位加工后流到下一个工位需要迁移时间(tij, i=1或2, j=2,3,…,n)。

解析:

  • 除开 Begin→S11、Begin→S12路线上标记的时间,其他箭头上标记的数字均为迁移时间
  • 由于 Begin→S11、Begin→S12路线时间不算作迁移时间,因此,迁移时间中的_j_ 只有2种可能
  • 如果我们要计算总的时间,需要计算"进入两条装配线的时间(e1或e2)"、加工时间(aij)、迁移时间(tij)、从装配线退出的时间(X1或X2)
  • 一辆车从开始装配到装配结束,需要经过3个加工。每个加工可以有两种选择:L1装配线加工S1j 或L2装配线加工S2j
  • 由于S1j和S2l完成的效果一样,同样的效果只需交给一个加工即可,因此,选择S1j就意味着不使用S2j。
  • 我们需要比较各组合时间,选出最短时间作答

将本小节讨论的画进图里,大概是这样(配色稍chou了点 (:з)∠) ):

在这里插入图片描述


公式解析🎀🎢


把公式和解释搬过来,是这样的:

在这里插入图片描述

式(1)的意思是:若选取S1j为第 j 个加工,在 j-1 计算结果的基础上,计算花费的最短时间

如果画图来表达第j-1和S1j,应该是这样的:

在这里插入图片描述

同理,如果是选好了前 j-1个加工,添加的第 j 加工是L2装配线上的,公式应该是这样的:

在这里插入图片描述

min解释:min{ 第j-1加工来自L1线并往S2j方向前进,第j-1加工来自L2线并往S2j方向前进 }

图变成这样:

在这里插入图片描述

结合起来,公式应该是这样的:

在这里插入图片描述

由于 t 的第一个下标 i 是依据第 j-1 个加工所属的装配线来决定的:

  1. 如果 j-1 加工来自L1,ti 下标就是1;

  2. 如果_j-1_ 加工来自L2,t 的_i_ 下标就是2,

因此不一定与a的_i_ 下标一致,这里做个小小的区分:

在这里插入图片描述

总的来说,第j个加工,可能从L1装配线上选择(S1j),也可能从L2上选择(S2j);同样的,第j-1个加工可能来自L1,也可能来自L2,我们需要将这些情况都计算一遍,然后选出最短时间;对应的路线,就是最短路线


流程解析🎀🎢


此处我们根据公式,一步步算出经过某一个加工需要的时间:

  1. 当 j = 1时,代表汽车从底盘开始进入到装配线,在图中是这个位置:

在这里插入图片描述

这时,有两种情况:

① 当 i=1,j=1时:

f11 = e1 + a11 =3 + 4 = 7

② 当 i=2,j=1时:

f21 = e2 + a21 =2 + 7 = 9

公式告诉我们, j = 1的情况是不做min比较的,因此,进入下一part:j = 2

  1. 当 j=2 时,有2种情况,每个情况又可以根据上一轮是L1或L2的再分成两种情况:

① 当 i=1,j=2时:

在这里插入图片描述

当 j=1选取的是L1装配线的:

f12 = f11 + a12 + t12 = 7 + 9 + 0 = 16 ——时间较少

当 j=1选取的是L2装配线的:

f12 = f21 + a12 + t22 = 9 + 9 + 2 = 20

所以,f12 = min( f12, f22 ) = 16

② 当 i=2,j=2时:

在这里插入图片描述

当 j=1选取的是L1装配线的:

f22 = f11 + a22 + t12 = 7 + 5 + 1 = 13 ——时间较少

当 j=1选取的是L2装配线的:

f22 = f21 + a22 + t22 = 9 + 5 + 0 = 14

所以,f22 = min(f12, f22) = 13

因此,当 i=1,j=2时,时间较少的路线是S11→S12,时间16;

当 i=2,j=2时,时间较少的路线是S11→S22,时间13;

  1. 当 j=3 时,有2种情况,每个情况又可以分为两个子情况:

① 当 i=1,j=3时:

在这里插入图片描述

当j=2选取的是L1装配线的:

f13 = f12 + a13 + t13 = 16 + 3 + 0 = 19

当j=2选取的是L2装配线的:

f13 = f22 + a13 + t23 = 13 + 3 + 2 = 18 ——较少

所以,f13 = min(f13, f23) = 18

② 当 i=2,j=3时:

在这里插入图片描述

当 j=2选取的是L1装配线的:

f23 = f12 + a23 + t13 = 16 + 6 + 3 = 25

当 j=2选取的是L2装配线的:

f23 = f22 + a23 + t23 = 13 + 6 + 0 = 19 ——较少

所以,f23 = min( f13, f23) = 19

因此,当 i=1,j=3时,时间较少的路线是S11→S12→S23,时间18;

当 i=2,j=3时,时间较少的路线是S11→S22→S23,时间19;

再加上X1X2,用式(2)计算最后一步

fmin = min{ fmin13+X1, fmin23+X2} = min( 18+3, 19+3) = 21

所以,时间较少的路线是S11→S12→S23,时间 21;

再啰嗦地加一张过程的解释图:

注意min是同 i 下标之间的比较,

同样的颜色代表这两个将进行min比较,一方淘汰,一方保留,参与下一加工的计算,一共5次min比较:

在这里插入图片描述

终于结束烧脑的题目解析了,到了答案环节🤩



答题💖

====

题一✔🏓

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
。**

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-EKNRGYRH-1715812024182)]

[外链图片转存中…(img-8pJRaynM-1715812024182)]

[外链图片转存中…(img-95P2PMjZ-1715812024182)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值