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. 说明结对编程情况

学习过程中会遇到一些问题,在同伴的耐心解答下能够更快地解决。

posted on 2020-11-01 10:27  wusitao  阅读(109)  评论(0编辑  收藏  举报