算法第三章作业
1、单调递增最长子序列
1.1 根据最优子结构性质,列出递归方程式,
最优子结构性质:a数组存放输入的序列,m数组会更新 (设下标为i)最后存放的是下标为i的 将a[i]作为单调递增最长子序列最后的数,也就是作为a[i]作为最大数的最长子序列长度。
递归方程式:
m[i] = max(m[j])+1 a[i]>a[j]&&m[j]<m[i]+1
m[i]=1 i=1
1.2 给出填表法中表的维度、填表范围和填表顺序。
表的维度:一维
填表范围:[1,n]
填表顺序:设置i和j 以j为标准 去用i遍历j前的所有数来更新m数组来找到m[j]作为最大时的最长单调递增子序列的长度,从m[1]到m[n],从左到右。
1.3 分析该算法的时间和空间复杂度
时间复杂度:填表需要遍历j前所有元素 所以时间复杂度是O(n^2)
空间复杂度:一维数组 空间复杂度为O(n)
2. 你对动态规划算法的理解
动态规划算法的算法关键是找到最优子结构,通过列出递归方程式来根据列出的递归方程式编写代码,但是找到最优子结构和列方程的过程很难想到,需要对题目有深刻的理解,找到适合该题目的最优子结构和递归方程式,找到题目的根本,根据构造数组 来保存解一步一步靠近最优解。
3. 说明结对编程情况
我负责打代码部分,我觉得结对编程情况良好,可以将自己的代码解释一遍给要讲解给老师的同学,让自己对代码更加印象深刻,对代码的一些关键部分的理解会更加到位,更加能知道为什么我打这段代码可以达成我要的效果。

浙公网安备 33010602011771号