算法第三章作业

1. 任选作业题”单调递增最长子序列“、”挖地雷“、”编辑距离问题“中的一题分析。

  • 单调递增最长子序列

1.1 根据最优子结构性质,列出递归方程式。

设a1,a2,…,ai是给出的序列,len[i]为a1-ai的最长单调递增子序列的长度, len[1]=1,len[i]=max{len[k]+1},k<i,ak<ai。

1.2 给出填表法中表的维度、填表范围和填表顺序。

表是一维的,len[n],  知道了底才能知道向上的怎么填,所以应该自左而右填表。

1.3 分析该算法的时间和空间复杂度

时间复杂度:每一个len[i]遍历一次数组, O(n^2)

空间复杂度:一维数组 O(n)

2. 你对动态规划算法的理解

动态规划的整体思想和分治法类似,也是将一个复杂问题分解成一个个简单的子问题来解决。动态规划的两个特点是1.满足最优子结构性质 2.很多计算是具有重复性的。

通常动态规划的解题步骤是 1.找出最优解的性质,分析其结构特征 2.递归定义最优解,列出递归方程式 3.计算最优解 构造最优解

在求最优解的时候,我们一般会用自顶向下直接递归,自底向上的填表方式,还有自顶向下的递归+备忘录的方式。

3. 说明结对编程情况

 这段时间的结对编程有进步了,我们在实验课上的编程题也可以自己打出来了。就像最低通行费那道题目,我们一开始为了填表顺序,究竟是自顶向下还是自底向上讨论了很久,最后带入了一个具体例子分析才确定了填表方向。后来又发现了别的特殊情况,可以单独列出来求解。所以递归方程式一定要写正确,考虑到各种情况,特殊情况,否则打代码的时候会乱。我们结对编程现在默契了不少,结对编程还是有给我们两个人带来收获的。

posted @ 2020-11-01 10:27  伍昕童  阅读(98)  评论(0编辑  收藏  举报