算法第三章作业
1. “单调递增最长子序列”分析
1.1 根据最优子结构性质,列出递归方程式:
数组a[ n ],从a[ 0 ]到a[ i ](0 <= i < n)的最长递增子序列长度为L( i ),
则L( i )={ max( L( j ) ) + 1, j < i }, 1 <= j < i
1.2 给出填表法中表的维度、填表范围和填表顺序:
表的维度:一维
填表范围:[1, n]
填表顺序:从左到右
1.3 该算法的时间和空间复杂度:
时间复杂度:从左到右填表遍历数组,填表后又要遍历比较,所以时间复杂度为 O(n^2)
空间复杂度:填表法,一维数组的辅助空间为表长n,所以空间复杂度为O(n)
2. 你对动态规划算法的理解
动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。
动规解题的一般思路:
- 将原问题分解为子问题(注意:①子问题与原问题形式相同或类似,只是问题规模变小了,从而变简单了; ②子问题一旦求出就要保存下来,保证每个子问题只求解一遍);
- 确定状态(将和子问题相关的各个变量的一组取值,称之为一个"状态",一个状态对应一个或多个子问题所谓的在某个状态的值,这个就是状态所对应的子问题的解,所有状态的集合称为"状态空间"。我的理解就是状态就是某个问题某组变量,状态空间就是该问题的所有组变量);
- 确定一些初始状态(边界条件)的值;
- 确定状态转移方程 (关键,由已知推未知)。
适合使用动规求解的问题:
1. 问题具有最优子结构;
2. 无后效性(一般遇到求最优解问题都适用动态规划)。
3. 说明结对编程情况
上周的结对编程我们俩先是自己看题思考,再尝试编程,出现疑问后再互相讨论,分享各自的看法和解题思路,过程还算顺利。

浙公网安备 33010602011771号