分治法思想的体会

分治法,顾名思义,就是分开解决问题的不同部分。对于一个大的问题,我们往往能将其分解成几个规模不同的,类型相同的问题来分别处理,降低了问题的规模也让问题可以被更快地解决。

​利用这种思想可以解决很多经典问题,例如最大子序列和问题,就是通过递归不断缩小问题区间,去判断目标序列是否在区间内,最后选出我们想要的结果。另一个经典的排序算法:归并排序,也是使用这个思想的典范。归并排序也是二分排序区间,缩小问题规模,对短序列进行排序后再对有序短序列进行合并得有序长序列,最后完成对整个序列的排序。同理,快速排序也是大致的思路,只是在细节处的排序方法不太一样罢了。找出第k小的数也是用了partition函数,本质也是差不多的。

可以很容易发现,分治思想用的最多的编程方法就是二分和递归,二分用来缩小问题规模,递归用来使得问题上下文连贯,使得小问题的解决可以带动大问题的解决,同时也是问题不断细分的基础。因此,掌握好二分法和递归函数的书写对使用分治法来解决问题十分重要,大多数问题就是在这样的骨架上进行不同的细节处理的。

当遇到可以被分解为规模更小,本质不变的问题时,利用分治思想也许可以更好地理清思路。

结对编程情况

第一次接触这种编程合作模式,其实有点像ACM那种比赛合作模式。2个人一起解决一个问题大部分情况下还是会比一个人要轻松一些。我们组是由我来编写代码,队友来理清算法思路。一开始合作并不顺利,第一题因为自己太久没用C++写代码而出现一些细节问题导致bug,2人沟通时也没有很好地把算法互相确认清楚。第二次情况就好些,当思路清晰时很快可以写出代码雏形,再由另一个同学找出见检查找出细节bug,之后便较快成功AC了。

这种方式有利于思想上的碰撞,加速问题的解决,也锻炼了合作和交流能力,同时也有利于快速发现自己代码的问题,养成更好的编程习惯。

posted on 2020-10-03 22:22  ccqstark  阅读(133)  评论(0)    收藏  举报