算法第三章作业

1. 挖地雷

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

首先我们设有n个地窖,用数组w[ ]记录每个地窖地雷数,a[i][j]记录i,j地窖之间是否有通路,f[i]记录从第i个地窖开始挖可以最多挖的地雷数量,f[n]=w[n];

递归方程式:f[ i ]=max(w[i]+f[j]) (i<j<=n,a[i][j]!=0)

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

维度:一维表,填表范围:1~n,填表顺序:从右到左。

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

时间复杂度:0(n^2),空间复杂度:0(n^2)

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

动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划法的基本思路。具体的动态规划算法多种多样,但它们具有相同的填表格式

动态规划算法要注意考虑重叠子问题,一般会用填表的方式解决问题。动态规划算法适用于最优化问题,通常有四个步骤:1.找出最优解的性质,并刻画其结构特征 2.列出递归方程 3.找出其子问题联系并填表 4.得出问题的最优解

3. 说明结对编程情况

我的搭档是伍昕童同学,在之前的算法实验课上基本都是她打代码,我负责在旁边看,而这一次是由我打代码,她在旁边负责指导。

一开始拿到这道题目时,其实我们俩都有一些思路,但是当实现到代码时就不知道怎么办了,我们俩讨论了一会仍然没有结果,于是就向后面的同学请教了一下,发现我们只是大概的想了想,并没有吧一些特殊情况写出来,于是我们把递归方程写出来,考虑了特殊情况后,就实现了代码。

在本次结对编程过程中,我有了实际操作的经验,也有积极与同学讨论,那节课是我开学以来上的最开心的算课法了!希望之后也能像那样!

posted @ 2020-11-01 00:41  Ravera  阅读(101)  评论(0)    收藏  举报