算法第三章作业

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. 确定一些初始状态(边界条件)的值;
  4. 确定状态转移方程 (关键,由已知推未知)。

适合使用动规求解的问题:
1. 问题具有最优子结构;
2. 无后效性(一般遇到求最优解问题都适用动态规划)。

3. 说明结对编程情况

上周的结对编程我们俩先是自己看题思考,再尝试编程,出现疑问后再互相讨论,分享各自的看法和解题思路,过程还算顺利。

posted @ 2020-11-01 11:29  杨璇  阅读(103)  评论(0)    收藏  举报