标签:pre code 技术分享 完成 博文 style 例子 分享图片 求和
前言: 分治法 :divide and conquer 又称分而治之,是一种非常有用的算法设计策略,它是将一个难以解决的大问题规模划分为一些规模较小的子问题,分别求解每个子问题的解,然后合并子问题的解。理所当然,设计分治法需要分三个步骤:
(1)divide 划分,把问题规模划分为k个规模较小的子问题,(一般k=2)
(2)conquer 治,即递归(recursive)地解决子问题
(3)combine 合并子问题的解
关于步骤(1)划分问题规模一般k=2是基于平衡子问题的启发式思想,它几乎总是比子问题规模不等的做法好。
在第二步解决子问题我们谈到递归,这也是一个依据,一个问题规模划分到什么程度才能非常方便的求解?这就是递归设计思想中的平凡问题和子问题。当一个问题规模不断划分直到成为一个平凡问题时(也就是递归基),我们可以在O(1)时间内完成该问题的求解。举个例子
1 int sum(int a[],int n) 2 { 3 return (n<1)?0:sum(a,n-1)+a[n-1]; 4 }
没错就是一个简单的数组求和,却蕴含着递归思想,以及分治算法思想
从上面的代码分析和案例分析中,我们看到了分治法的魅力所在,其实在数据结构中,关于内部排序最常用的两个算法 归并排序和快速排序,都是采用了分治法思想设计的,下一篇博文我来讲解一下对此两种算法的认识
标签:pre code 技术分享 完成 博文 style 例子 分享图片 求和
原文地址:https://www.cnblogs.com/gaochaochao/p/8890952.html