算法第三章作业
1. 任选作业题”单调递增最长子序列“、”挖地雷“、”编辑距离问题“中的一题分析。
单调递增最长子序列
设计一个O(n2)时间的算法,找出由n个数组成的序列的最长单调递增子序列。
1.1 根据最优子结构性质,列出递归方程式,
m[i] = max{ m[j]+1 } 其中1<=j<i且a[i]>a[j],
m[i] 表示以第i个数为结尾的最大单调递增子序列,a[i] 表示第i个数字。
1.2 给出填表法中表的维度、填表范围和填表顺序。
表的维度:一维。
填表范围:即 i 的取值范围是 0 到 n。
填表顺序:由于m[i] 取决于 m[j] 的值, i 与 j 的关系为 1<=j<i,所以应该是从左往右填表。
1.3 分析该算法的时间和空间复杂度
时间复杂度:i 的取值是从n到1,而 j 的取值是从 (i-1) 到0,因此时间复杂度为O(n²) 。
空间复杂度:由于用到的是一维数组,因此空间复杂度为O(n²)。
2. 你对动态规划算法的理解
动态规划,其中“拆分子问题,分析最优子结构,列出递归方程式”是最关键的。接下来根据递归方程式就可以分析出填表法中表的维度、填表范围和填表顺序等。另外,表的边界也需要特别考虑,边界可能要附上初始值。
3. 说明结对编程情况
互帮互助。