Algorithm 动态规划装配线调度
我正在读Cormen等关于算法的书中关于动态规划的内容。以下是这本书的内容 假设我们有一个汽车工厂,有两条装配线,分别称为1号线和2号线。我们必须确定最快的时间获得底盘的所有方式 最终目标是确定最快的时间获得底盘的所有方式通过工厂,这是我们所表示的Fn。CHASSIS必须一路通过1号线或2号线的n站,然后到达工厂出口。因为这些方法中速度最快的是通过整个工厂的最快的方法,所以我们Algorithm 动态规划装配线调度,algorithm,dynamic-programming,Algorithm,Dynamic Programming,我正在读Cormen等关于算法的书中关于动态规划的内容。以下是这本书的内容 假设我们有一个汽车工厂,有两条装配线,分别称为1号线和2号线。我们必须确定最快的时间获得底盘的所有方式 最终目标是确定最快的时间获得底盘的所有方式通过工厂,这是我们所表示的Fn。CHASSIS必须一路通过1号线或2号线的n站,然后到达工厂出口。因为这些方法中速度最快的是通过整个工厂的最快的方法,所以我们 Fn = min(f1[n] + x1, f2[n]+x2) ---------------- Eq1 Above
Fn = min(f1[n] + x1, f2[n]+x2) ---------------- Eq1
Above x1 and x2 final additional time for comming out from line 1 and line 2
我有下面的递推方程。考虑以下是EQ2. < /P>
f1[j] = e1 + a1,1 if j = 1
min(f1[j-1] + a1,j, f2[j-1] + t2,j-1 + a1,j if j >= 2
f2[j] = e2 + a2,1 if j = 1
min(f2[j-1] + a2,j, f1[j-1] + t1,j-1 + a2,j if j >= 2
设Rij为递归算法中对fi[j]的引用数
从方程R1n=R2n=1
根据上面的方程式2,我们得到
R1(j) = R2(j) = R1(j+1) + R2(j+1) for j = 1, 2, ...n-1
我的问题是作者是如何得到Rn=1的,因为通常我们的基本情况是0而不是n,这里我们将如何在代码中编写递归函数
例如C代码
另一个问题是作者是如何提出R1j和R2j的
谢谢你的帮助。如果你用递归的方法解决这个问题,你会怎么做? 你应该开始计算Fn。Fn会递归地调用f1n-1和f2n-1,直到到达叶f10,f20,对吗 这就是递归解中Fn的引用数为1的原因,因为只需要计算一次f1n和f2n。f1n-1不是这样,在计算f1n和f2n时会引用f1n-1 现在,他是如何得出R1j=R2j=R1j+1+R2j+1的? 用递归的方法计算,每次你需要f1i,你必须计算f1j,f2j,对于区间[0,i-AKA]中每一个小于i的j。 换句话说,f1,2i的值取决于f1,20..i-1的值,所以每次计算f_i时,你都在计算每一个f1,21..i-1,因为它取决于它们的值 因此,计算f_i的次数取决于他上面有多少个f1,2
希望这是清楚的。在上面最后一段的第三行是f1,2i的值取决于f1,20..j的值,也就是说,它应该是j?我说的对吗?不,但应该是f1,21…i-1-编辑答案对不起,我应该更清楚:对于f1i或f2i,这类fi的值取决于f10,f11,f12,…,f1i-1的值,f20,f21,f22,…f2i-1。这只是表示f_i依赖于f1j,f2j的另一种方式,对于区间[0,i-对于小于i的每一个j