第二章作业与学习总结
学习分治法的感受:
首先回忆一下分治法的使用方法和条件:分治法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题要互相独立且与原问题相同。
分治法虽然有使用条件,但它对解决一些复杂问题的效果是立竿见影的。在学习第二章的过程中,我们遇到了很多有复杂要求的题目,比如说排序、求逆序数等,题目要求虽然很复杂,但通过使用分治法,我们能够将问题分解为许多个相同的小问题,例如通过设置left、right来搜索数组,并不断根据条件改变left与right的值。使用了这种思想后,再运用递归方法,就可以有效地解决在数组中搜索特定值的问题。不过,分治法虽然效果很好,但会拘束于使用条件,同时在使用过程中要分析具体的时间复杂度,不能乱用。
结对编程情况汇报:
第二章作业有5道题目,每道题目都是有挑战性的,因此单凭我个人能力难以解决这五道题目,因此我多次与搭档共同讨论题目,最终解决了第二章作业的大部分题目。尤其是关于求单峰数组的题目,我自己做的时候倾向用递归的方法,但即使思路正确,编译也没有问题,但因为没有考虑到时间复杂度的问题,导致题目没有做对。通过与编程搭档交流后,我得知这道题目是可以用循环即可,因为题目要求的时间复杂度为O(logN),所以使用二分法配合循环即可有效解决这道题目。有些时候,单人编程受限于个人编程风格和习惯,难以单独发现一些思想上与细节上的问题,但通过两人结对编程,两人的头脑风暴与思维碰撞就能够很好地解决问题,同时交流解题和学习心得。