关于高效算法设计的递归与分治思想-1

       递归,简单理解是指程序中函数自己调用自己的过程。在此,主要讨论的是直接递归。在高效算法设计当中,递归所起到的作用,是将简化好后的问题带入到递归算法当中,从而求解。其重点是要找到解决问题的核心算法(处理方法)。简单理解,例如:求用户键盘输入值n的阶乘。其核心就是当n!=1时,用n-1调用自身函数,并与原本的n相乘;当n=1时,则直接返回输出相应结果。这是相对简单的例子。

       分治,如其字面意思一般,就是分而治之。首先需要做的,是将原问题规模,合理的划分为两个相对小且相对平均的两个问题规模,再就这两个较小的问题规模进行分析。应用分治思想时,分为三个步骤:首先,将问题规模进行合理的划分,划分成两个相对小的问题规模;其次,是将划分出来的问题规模代入到递归函数当中,递归求解,得出相应划分区间的数据;最后,也是个人认为最关键的一步,将上面划分好的两个问题规模所分别求出来的解进行合并,得到原问题所要求解的答案。就我个人而言,相对比较难的是划分第三个步骤,将所求得得两个问题规模的解,合并到一起。这需要编程者对于题目、需求有充分的认识。

下图为《算法竞赛入门经典》P223最大连续和的算法分析,相对于阶乘的计算要复杂一点点。但能够很充分的体现出归并和分治思想在高效算法设计当中的应用。

posted @ 2020-10-26 00:00  小象JC  阅读(103)  评论(0)    收藏  举报