算法导论之动态规划(最长公共子序列和最优二叉查找树)

动态规划师通过组合子问题的解而解决整个问题,将问题划分成子问题,递归地求解各子问题,然后合并子问题的解而得到原问题的解。和分治算法思想一致,不同的是分治算法适合独立的子问题,而对于非独立的子问题,即各子问题中包含公共的子子问题,若采用分治法会重复求解,动态规划将子问题结果保存在一张表中,避免重复子问题重复求解。

动态规划在多值中选择一个最优解,其算法设计一般分为4个步骤:描述最优解的结构;递归定义最优解的值;按自底向上的方式计算最优解的值;由计算出的结果构造一个最优解。

1)装配线调度

求解最快通过工厂装配线路线的问题,问题描述:有两条装配线,用于安装汽车底盘的零件,建造时间不同采用技术有差异导致安装时间有快慢;每条装配线有n个装配站,装配线i的第j个装配站表示为Sij,相应装配时间为aij,每条装配线上一样编号的装配站执行相同的功能,如S1j和S2j

三个时间点说明:

进入时间:一个汽车地盘进入装配线(i为1或2),花费时间为ei

移动时间:在同一条装配线上的相邻装配站(从j到j+1)移动没有时间开销,但如果从一条装配线的装配站Sij移动到另一条装配线上,移动需花费时间tij

离开时间:在完成一条装配线n个装配站后,花费xi时间离开装配线。

要求解的问题是:求解分别通过装配线1的几个站和装配线2的几个站,才能使汽车底盘零件完成安装的时间最小。

如果已知一个序列的,在装配线1使用那些站,在装配线2使用那些站,则可以在线性时间内得出一个底盘通过工厂装配线要花的时间。但要知道那条路线是时间花费最小,却有2n中可能,一条装配线所使用的装配站可以看成是{1,2,…,n}的子集。动态规划法就是从2n中可能发现最优解,我们按照动态规划法四个步骤来说明:

第一步骤:描述最优解的结构

这一步其实就是找到最优解的特征,从而能够将问题转化为若干个子问题来求解。对于装配线调度花费时间最小问题,要描述其最优解,要从一个最基本的假设出发。假设通过装配站S1j的最快路线通过装配站S1j-1,那么底盘是利用了最快的路线从开始点到装配站S1j-1,如果不是,就是存在另一个条从开始点到装配站S1j-1的更快路线,这就形成矛盾。这个思路理解起来很简单,就是假设你是最快的途经点,那么该点前面的路线也一定是最快,否则就不会经过该店。

照此,找出通过装配站S1j的最快路线的问题最优解,可以转化为寻找S1j-1或S2j-1最快路线的子问题的最优解。这个就是:要寻找该点的最快,那么就找出该点前面必经的点的最快

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值