代码改变世界

算法第三章作业

2018-11-13 09:17  灿灿林  阅读(149)  评论(1编辑  收藏  举报

1、你对动态算法的理解(2分)

动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,这些子问题往往有重叠子问题,从求解一个个子问题开始,子问题都求出来之后,原问题也就可以解决了。

可以用一个表来记录所有已经解决的子问题的答案,这样避免了大量重复的计算,同时也是解决重叠子问题的有效方法。动态规划算法往往适用于解最优化问题,首先找出最优解的性质,找出递归方程,同时要注意填表的顺序,自底向上找出最优值以构造最优解。动态规划算法将待求解的问题分解为若干个子问题,按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。

2、分别列出编程题1、2的递归方程(2分)

第一题:设dp[i]为以i为最后一位的最长上升子序列的长度,那么有dp[1]=1,dp[i] = max( dp[i], dp[j] + 1 )  ( j < i  )&&(a[j]<a[i])

第二题:dp[i]为所需最小代价,初始化每个dp为inf,dp[1] = 0,dp[i]=min(min(dp[i],dp[i-1]+a[i-1][i]),dp[j]+a[j][i])

3、说明结对编程情况(1分)

我和同伴现在会约时间一起到图书馆结队编程,在图书馆中我也遇到了班里的一起一些同学,感觉挺ok的。上次作业是我打代码,他负责观察,这次我们交换了一下身份。对于这两道编程题,我们第二道的写出递归方程用的时间比较长一些。