1. 任选作业题”单调递增最长子序列“、”挖地雷“、”编辑距离问题“中的一题分析。
分析单调递增最长子序列。
设计一个O(n2)时间的算法,找出由n个数组成的序列的最长单调递增子序列。
输入格式:
输入有两行: 第一行:n,代表要输入的数列的个数 第二行:n个数,数字之间用空格格开
输出格式:
最长单调递增子序列的长度
输入样例:
在这里给出一组输入。例如:
5
1 3 5 2 9
输出样例:
在这里给出相应的输出。例如:
4
1.1 根据最优子结构性质,列出递归方程式,
当 i = 0 , f[0][j] = j ;
当j = 0 , f[i][0] = i;
当i != 0 && j !=0 ,f[i][j] = min(f[i][j] , f[i - 1][j - 1] + (a[i] != b[j] ))
1.2 给出填表法中表的维度、填表范围和填表顺序。
维度是二维,填表范围为 0 <= x <= strlen(a), 0 <= y <= strlen(b),顺序是从左上角到右下角。
1.3 分析该算法的时间和空间复杂度
表是一个m*n数组,所以进行m*n次相加,时间复杂度为O(m*n)。
空间复杂度为n*m。
2. 你对动态规划算法的理解
首先根据题目要求确认表的维度,确保表有足够的空间填入。确定了维度后就可以推算递推式,接下来就可以打代码了。
3. 说明结对编程情况
学习过程中会遇到一些问题,在同伴的耐心解答下能够更快地解决。