算法第三章作业

1.

单调递增最长子序列

单调递增最长子序列可以从这个找到的这个序列的最后一个数着手。设置一个一维数组m[i],表示以第i个数为结尾的最长序列。m[i]=max{m[j]}+,i>j且a[i]>a[j]。遍历i之前的位置,即0-i-1,找到符合条件的元素。最后再遍历数组m,找到最大值即为所求。

1.1

递归方程式m[i]=max{m[j]}+1且1<=j<i&&a[j]<a[i],(1表示本身)

1.2

填表用到的是一个一维数组。

填表的范围:0~n

填表顺序:自左向右

1.3

该算法的时间复杂度:O(n^2),用到了双重循环

空间复杂度:O(1),用到了一个大小固定的数组

2.对动态规划的理解

动态规划的基本思想是将待求解的问题分成若干个子问题,先求解子问题,再结合这些子问题的解得到原问题的解。但是这些子问题的往往不是独立的,存在重复求解的问题。因此,在动态规划中,为了避免重复计算,会用一个表来记录已经解决的子问题的答案,将其结果填入表中。步骤一般为分析最优解的结构,找到递归方程式,填表。填表的方式有很多种,要针对具体的题目。可以是从上到下,从左往右,按列按行。这个表可以是一维数组二维数组。

3.结对编程

这次结对编程合作写的题目是最低通行费问题。其实这次上机,自己没有做好充分的准备。对动态规划还没有很好地理解,所以特别虚。这次代码成功只要是靠自己的队友。通过讨论,我们很快得出了这道题的递归方程式,已经填表的方式。但是我对于如何下手敲代码还是有点迷茫。在队友的努力下,我们成功通过了pta的测试点。经过她的讲解,我对这个题目的理解更加深刻,知道要怎么去入手,也对动态规划的认识更进一步。所以我很赞同一个人可以走得很快,一群人可以走得很远。在自己没有思路的时候,选择去相信队友,这种学习也是有带动作用的。希望下一次上机的时候自己可以克服这个问题,做好准备。

 

posted @ 2020-10-28 21:02  彭珊珊  阅读(81)  评论(0编辑  收藏  举报