算法第二章作业

对分治法的理解认识

我对分治法的理解简单归纳于问题递归分解和合并求解的过程(类似于一句俗语“大事化小,小事化了”)分治法就是将求解的较大规模的问题分割成k个更小规模的子问题。然后对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。进而将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。分治法主要应用于优化大规模问题求解的时间复杂度上,它相对于暴力求解,在减小算法的时间复杂度方面有着极大的优势,它的主要应用方面为归并排序,快速排序以及二分查找,矩阵乘法的运算(strassen算法),最大子数组问题等。如果一个问题可以分解为若干个规模较小的相同问题,而且该问题所分解出的各个子问题是相互独立的,则它就比较适合采用分治法进行问题求解,但如果各子问题是不独立的,则分治法要做许多不必要的工作,重复地解公共的子问题,这样的话则用动态规划比较好。

结队编程感想

在结队编程过程中我与队友的分工主要是我来负责问题分析以及算法设计,队友负责将其以代码的形式实现,其实在这个过程中,我体会到了分工明确在结队编程中的很重要的作用。在结队编程过程中,其实我对于算法的设计思路也会出现漏洞或者舍近求远的不好的地方,这个时候队友可以给我很好的提示,使我们的算法更加优化,同时在大规模问题进行解决时,我可以在一旁看队友将算法思想变成完整的代码形式,在这个过程中,多一个人去关注这个过程也会及时找出代码编写过程中的失误,不至于在后面出现bug,调试又花费很长时间,再者就我个人而言,看队友打代码其实也是对自己平时编程时的又一次代码规范,反省自己是不是也是这样规范地书写代码,也算变相地督促自己养成这样一种良好的习惯吧。目前来讲,我们的配合还是很好的,代码编写效率也有所提高。

你可能感兴趣的:(算法第二章作业)