《算法导论》读书笔记 第十五章 动态规划
一、动态规划-----装配线调度
1.概念:通过组合子问题的解来解决整个问题。
分治算法:将问题划分为一些独立的子问题,递归的求解各个子问题,然后合并子问题的解而得到原问题的解。
动态规划适用于子问题不是独立的情况,就是说每个子问题含有公共子问题。
区别是:(1)分治法是指将问题分为一些独立的子问题,递归的求解各个子问题。
(2)动态规划适用于这些子问题不是独立的情况,也就是说各个子问题包含公共子问题。
动态规划适用于解决最优化问题。动态规划算法的设计分为四个步骤:
1)描述最优解的结构;
2)递归定义最优解的值;
3)按着自底向上的方式计算最优解的值;
4)由计算出来的结果构造一个最优解。
2.装配线问题描述:
一个汽车公司有2条装配线的工厂内生产汽车,每条装配线有n个装配站,不同的装配线上执行的功能相同,但是每个站执行的时间是不同的。在装配汽车的时候,为了提高速度,可以在这两装配线上的装配站中做出选择,即可以将部分完成的汽车在任何装配站上从一条装配下移动到另一条装配线上。
装配过程如下图所示:
装配过程以及时间分配:进入装配线时间e,每个转配线上各个装配站的执行时间a,从一条装配线到另一条装配线的时间t,离开最后一个装配站的时间x。
3.问题解决的步骤:
对于装配线问题,一个问题的(找出通过装配站Sij的最快路线)最优解包含了子问题(找出S1,j-1或者S2,j-1的最快路线)的一个最优解,这就是最优子结构。
观察一条通过装配线S1,j的最快路线,通过装配站的最快路线的可能只有:
1)通过装配线S1,j-1的最快路线,然后直接通过装配站Sij;
2)通过装配站S2,j-2的最快路线,从装配线移动到装配线1,然后通过装配线S1,j。
(1)找到一条装配线上的装配站j的最快路线,需要解决其子问题的,也就是寻找通过两条装配线上的装配站j-1的最快线路。
(2)一个递归问题的解: F* = min(f1[n]+x1, f2[n] + x2);
后续贴出java代码
二、动态规划------钢条切割问题
问题描述:给定定长的钢条和价格表,求切割方案,使得收益最大。如果n英寸的钢条的价格足够大,则不需要切割。
i= 1, 钢条不可以被切割, r[1]=1;
i=2, g钢条被切割成1+1, 价格为2, 若不切割,0+2, 价格为5, 所以r[2]=5;