算法第二章作业
算法第二章作业
对分治法思想的体会
分治法的基本思想是将大规模的问题分割成更小规模的子问题,分别求解后将答案合并,逐步求解出原来的问题。
好像更贴近我们所说的“自顶向下分析,自底向上实现”
和递归方法的区别在于它没有用到递归,而更多地采用循环解决问题,因此空间上的效率会比较高(不容易产生栈溢出等bug)
而和动态规划相比,它的特点在于子问题是相互独立的,因此将子问题答案合并能得到原问题答案。(子问题不独立也可以用分治法求解但是会产生许多重复运算,所以此时动态规划更加适合)
比较典型的例子是快排和二分查找(但是感觉二分法在分治法里用到的也挺多的)
结对编程情况汇报
首先结对编程在我看来比较新颖所以还是比较有兴趣的,在这里谈谈个人的见解吧
当结对的两个人水平差距明显的时候,其优点是比较突出的。首先分工上比较明确,学习掌握比较好的人敲代码,而另一个人在一旁看着其代码思路,并在最后对代码进行讲解。不仅可以让另一个人学习比自己水平高的人的代码思路、习惯,还可以从实例的角度巩固相关知识。
而对于敲代码的人,在敲代码的同时对另一个人阐述自己的代码作用,能在编写过程中使思路更清晰,减少出错、卡题的情况。(我就经常开个小差然后从头理思路....)能把自己的代码给别人讲懂,那么自己对于代码的理解肯定是更上一层的。
我有时候会卡住或者没有写出高效的代码,我的partner也会和我交流,给我提供新的思路,或者问我“这里为什么不能xxx这样写呢?”,然后很多时候我会发现这种方法确实比我的好哈哈哈哈。
至于缺点,主要是,讲解代码的人缺少了敲代码的机会,毕竟这需要很强的自主性。没有实例代码练手,知识点的记忆始终没有那么深刻,不利于算法的学习掌握吧。