代码链接:深大算法实验四——车间动态规划代码-C++文档类资源-优快云下载
目录
实验目的与要求:
- 掌握动态规划算法设计思想。
- 掌握流水线问题的动态规划解法。
实验过程及内容:
问题描述:有两条流水线,分别有n个阶段,每个阶段所用时不同。不同流水线的同一阶段时间不同,若要转移流水线则要有相应的转移时间。求怎样分配时间最短。
算法思路:将两条流水线的每个阶段可以看作是两个流水线中二选一。要么选下面一条,要么选择上面一条。可以用0代表选择上面的流水线,1代表选择下面的流水线。可以将输出结果变成一串二进制进行输出。如下面的例子,假设n=5,第一个选择上面的流水线,标号为0,第二个选择下面的流水线,标号为0,以此类推,从图上可以得到最终的结果为01100。
蛮力法:
上面所说的可以将流水线看作为二进制编码,那么若流水线有n个阶段,那么总共有2n中情况,以每一个的二进制形式进行遍历,则不会漏掉解,在每次得出解时与最小的时间进行比较,如果更小则将最小时间赋值为当前解的时间。
关于遍历,假如n=5,则以00000,00001,00010,00011……这样进行遍历。
蛮力法的效率为O2n,效率十分的慢。
动态规划法:
首先,动态规划的适用条件是:①符合最优子结构,②符合重叠子问题。在本题当中是符合的。我们可以将前t个解的最优解视为流水线的一个节点,用这样的节点解t+1时的解,所以是符合最优子结构和重叠子问题的。
明确阶段:前一阶段是上下流水线的前t个的最优解。
动态规划思想: 我们可以先假设当i-1阶段时