张~~

 

算法第三章作业

1.单调递增最长子序列

定义一个b[n]数组记录到达第i个位置时的最长单调递增子序列的长度,全部初始化为1,代表至少递增子序列长度为1

1.1递归方程:b[i] = max(b[j] + 1, b[i])

1.2 表的维度是1,填表范围为0—n-1,填表顺序为从左往右

1.3算法中存在2个for循环,所以时间复杂度为O(n^2)

    算法中用到了一个大小为n的数组,所以空间复杂度为O(n)

 

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

动态规划算法与分治算法思想类似,都是将待求解的问题分解为若干个子问题,列出递归方程。用动态规划解决问题时会遇到子问题的重叠,为了减少重复的计算,一般会将子问题不同阶段的不同状态保存在一个二维数组(即一个表)中,根据递归方程确定填表的顺序,实现每个子问题只解一次。前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。

 

3.结对编程情况:

这次结对编程讨论了最低通行费的问题,对动态规划思想还不能很好地理解和掌握,开始时和队友都没什么头绪,然后一起讨论列出了递归方程,慢慢理清了解题思路,但在讨论填表顺序以及边界问题过程中产生了一些分歧,最后通过查阅一些资料以及实验的验证,确定了表自左向右,自上而下的顺序,以及关键点边界初始化的问题,如果边界不进行初始化,设其为无穷大,在进行填边界表格数值时会出现错误,这也是我觉得解此题的关键点以及难点。

posted on 2020-10-31 15:31  张~~  阅读(117)  评论(0编辑  收藏  举报

导航