码迷,mamicode.com
首页 > 编程语言 > 详细

算法设计之分治法策略

时间:2018-04-20 16:12:42      阅读:197      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!