算法第三章作业
算法第三章作业
1. 你对动态规划算法的理解(2分)
答:首先对动态规划算法的理解基于分治法,同样是先将问题进行分解,并找到分解的临界条件。对比起分治法,动态规划使程序变得更为高效,体现在时间复杂度的减少。但同时,动态规划也有更高的应用要求,需要问题满足重叠子问题的结构,即是有部分子问题的结果会被反复利用。
那么如何保证解决某一子问题时,所需的数据都能具备呢?这其中又会涉及到动态规划中解决子问题时的方向性。因此,我认为动态规划的要点便在于弄明白最优子结构是什么以及解决问题的次序是怎么样的。
2. 分别列出编程题1、2的递归方程(2分)
编程题1:
递归方程:Rise[i] = max(Rise[k] + 1)(若a[i] > a[k] 且 i > k)
1(Rise数组的默认值)
(Rise为单调递增数组,a数组为输入数组)
编程题2:
递归方程:Min[i] = min(Min[j] + a[j][i] , a[1][i])(j < i)
(Min为租金最小的一维数组,a为储存两点间花费的二维数组)
3. 说明结对编程情况(1分)
结对编程情况良好,通过和伙伴的相互交流学习,让我对题目的理解更深,并且通过讨论可以知道算法还有哪些可以优化的地方,同时锻炼了我写一手可读性强代码的能力。