算法第三章作业

1、对动态规划算法的理解:

动态规划与其它算法相比,大大减少了计算量,丰富了计算结果,不仅求出了当前状态到目标状态的最优值,而且同时求出了到中间状态的最优值,这对于很多实际问题来说是很有用的。动态规划的思想是将主问题分解成若干个子问题,先求解子问题的解,再通过子问题的解来求出主问题的解,动态规划相比一般算法也存在一定缺点:空间占据过多,动态规划算法是构造和求解最优解的常有方法。动态规划算法没有一个固定的解题模式,技巧性很强。

2、编程题1的递归方程:

dp[1]=1,dp[i] = max( dp[i], dp[j] + 1 )  ( j < i  )&&(a[j]<a[i])

  编程题2的递归方程:

dp[1] = 0,dp[i]=min(min(dp[i],dp[i-1]+a[i-1][i]),dp[j]+a[j][i])

3、结队编程的情况:

我们小组一开始是先从第二题开始做的,看完题后各自说出自己的思路,然后进行尝试,最后我们的思路确定为建立两个数组,一个表示要输入的序列,一个表示序列的字段和,然后进行判断,若前面的子段和大于0则相加,若小于0则不加,循环到最后就是所求。由于我们先做第二题,而第一题的思路和第二题很像,所以我们第一题很快就完成了,但第三题我们一开始讨论出一个思路,但是在转换成代码提交后却只是部分正确,后面发现代码中所用求最长公共子序列的代码只是实现求出最长公共子序列的个数,而第三题还要求排序也要相同,所以第三题做了很久,下课了也还没做完,不过这次的实践课我学到很多东西,由于我打代码的能力一般,所以是我队友打的代码,但在看他打代码的过程学到很多有助于提高我打代码能力的东西。还没上实践课前我自己看了课本里动态规划的内容,但是好多都看不懂,不能理解这些过程的原因,但在上实践课时,由于参与了解题,让我对动态规划的理解加深了一些,收益很大。

posted @ 2018-11-04 19:19  Kdj  阅读(171)  评论(0编辑  收藏  举报