算法第三章作业
1.“挖地雷”分析
1.1 根据最优子结构性质,列出递归方程式
f[i]表示记录从i出发能够挖到的最多地雷数量
b[i][j]表示从i到j是否连通
a[i]表示i处的地雷数
则递归方程式:
if(b[i][j]){ f[i]=max(f[i],f[j]+a[i]) }
1.2 给出填表法中表的维度、填表范围和填表顺序。
f[ ]为一维表,填表范围为f[1]~f[n],填表顺序为从后面填起。
1.3 分析该算法的时间和空间复杂度
时间复杂度为0(n^2),空间复杂度为0(n^2)
2.对动态规划算法的理解
动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使问题能够以递推的方式解决。动态规划算法将待求解的问题分解为若干个子问题,按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。
拆分问题、定义问题状态以及状态之间的关系我认为这两步是最重要的。
3.结对编程情况
本次的结对编程我是负责打代码的那一个,对动态规划算法的学习我还是比较陌生,理解的不够,我的搭档就一步一步分析,指导我怎么打,我在打代码和她的讲解过程中一步一步理清思路,也算是有了一点头绪,稍微理解了动态规划算法的分析方法。我认为这次结对编程也让我受益良多。