【第22期】观点:IT 行业加班,到底有没有价值?

递归与分治策略

原创 2017年01月02日 15:37:48

一.分治法和递归的关系

分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。


直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数

由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。

二.分治法的使用条件

(1)n该问题的规模缩小到一定的程度就可以容易地解决;

(2)n该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质

(3)n利用该问题分解出的子问题的解可以合并为该问题的解;

(4)该问题所分解出的各个子问题是相互独立的,这条特征是应用分治法的前提,它也是大多数问题可以满足的,此特征反映了递归思想的应用.

能否利用分治法完全取决于问题是否具有这条特征,如果具备了前两条特征,而不具备第三条特征,则可以考虑贪心算法动态规划


快速排序:在快速排序中,记录的比较和交换是从两端向中间进行的,关键字较大的记录一次就能交换到后面单

元,关键字较小的记录一次就能交换到前面单元,记录每次移动的距离较大,因而总的比较和移动次数较少。


template<class Type>

void QuickSort(Type a[], int p, int r)

{

      if (p<r) {

        int q=Partition(a,p,r);

        QuickSort (a,p,q-1); //对左半段排序

        QuickSort(a,q+1,r); //对右半段排序

        }

}








版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

函数的递归调用与分治策略

函数的递归调用与分治策略  递归方法是算法和程序设计中的一种重要技术。递归方法即通过函数或过程调用自身将问题转化为本质相同但规模较小的子问题。递归方法具有易于描述和理解、证明简单等优点,在动态规划、贪...

递归与分治策略(一):推卸责任是不对的

引言:据说一群在毕达哥拉斯领导下工作的古希腊数学家,发现了数字系列1,3,6,10,15,21... 中有一种奇特的联系。你能知道这个数字的系列的下一个数字是什么吗? 给你一点思考的时间,在这里停下来得出你自己的想法并验证你的结论,别往下偷看哦。 当我看到这个数字系列时我想起了中学时找通项公式...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

算法思想之分治递归策略

摘自 邹恒明《算法之道》     采取分治策略解决问题有三个步骤: (1) 将问题分解为若干个小的子问题。每个子问题和大问题同型,但规模更小。 (2) 递归解决这些问题。 (3) 将子问题...

算法复习-递归与分治策略

分治(divide and conquer)策略的基本思想: 将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归地解这些子问题,然后将各子问题的解合并得到原问题的解。 大致可以通过如下模式来描述: divide_and_conquer( P ){ i...

递归与分治策略

任何可以用计算机求解的问题所需要的计算时间都与问题的规模相关。规模越小,求解时间往往越短,也容易处理。要想解决一个规模较大的问题,有时会很困难。分治策略是将一个难以解决的问题分割成一些规模较小的问题,...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)