算法第三章作业

1. 任选作业题”单调递增最长子序列“、”挖地雷“、”编辑距离问题“中的一题分析。

  3-3 挖地雷 

1.1 根据最优子结构性质,列出递归方程式,

  m[i] = max{ a[j] + m[j] }

  其中,m[i] 表示从 地窖i  到 地窖n 挖到最多的地雷数,a[j] 表示 地窖j 拥有的地雷数,i < j <= n  , 并且 地窖i 到 地窖j 有通路。

1.2 给出填表法中表的维度、填表范围和填表顺序。

  ①由于用m[i] 表示从 i 到 n 挖到最多的地雷数,因此表的维度是一维的。

  ②填表范围,即 i 的取值范围是 0 到 n。

  ③填表顺序,由于m[i] 取决于 m[j] 的值,并且 i 与 j 的关系为 i < j <= n,即 j 大于 i,所以应该是从右往左填一维数表,即从大到小填。

  ④填表的边界,当 i = j = n时,m[n] = a[n]。

1.3 分析该算法的时间和空间复杂度

  时间复杂度:计算从 i 到 n 挖到最多的地雷数里,i 的取值是从0到n,而 j 的取值是从 (i+1) 到n。因此时间复杂度为O(n²) 。

  空间复杂度:由于需要存储 “地窖i 到 地窖j 是否存在通路”的情况,在本题中我用了二维数组在存储该信息,因此空间复杂度为O(n²)。

2. 你对动态规划算法的理解

  动态规划算法的两个基本要素:①最优子结构性质决定了算法的正确性,②重叠子问题性质影响了算法的有效性。

  动态规划,其中“如何拆分子问题,分析出最优子结构性质,进而列出递归方程式”这一步是最关键的。接下来根据递归方程式就可以分析出填表法中表的维度、填表范围和填表顺序等。另外,表的边界也需要特别考虑,边界可能要附上初始值。

3. 说明结对编程情况

  刚开始,我和队友都不太熟悉动态规划的分析思路,分析问题结构的逻辑比较混乱、跳跃,常常两个人都忽略了边界情况的考虑。在把算法思想转化为实际代码的过程中,我会犯一些低级错误,队友能够帮我指出来,最后才把题目写出来。在和队友交流动态规划算法思想的过程中,能够进一步地理解它的一个实现过程。

posted @ 2020-10-31 19:49  z-qiong  阅读(111)  评论(0编辑  收藏  举报