一、概念: 在计算机科学中,分治法是建基于多项分支递归的一种很重要的算法范式。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以寄简单的直接求解,原问题的解即子问题的解的合并。

这个技巧是很多高校算法的基础,如排序算法(快速排序、归并排序)、傅立叶转换(快速傅立叶变换)
思路:
1.分解:把原问题分解为若干个规模较小,相对独立,与原问题形式相同的子问题。
2. 解决:若子问题规模较小且易于解决时,则直接解。否则,递归地解决各子问题。
3.合并:讲各子问题的解合并为原问题的解。
分治算法是按照下列方案来工作的:

1)将问题的实例划分为几个较小的实例,最好具有相等的规模(事实上,一般来说就是这样来分的,而且分为2个实例的居多,注意是递归的分!!!)

2)对这些较小的实例求解(一般使用递归的方法,但在问题规模足够小的时候也可以采用采用另一个算法(停止递归))

3)如果有必要的话,合并这些较小问题的解,以得到原始问题的解(事实上,一个分治算法的精华就在于合并解的过程)

不要忽视这三句话!!!它是许多分治算法经验的总结,有助于在分析问题中考虑如何去使用分治算法,提请注意括号里我的注释!!!

形象的表示一下,截张图:

参照:http://www.cnblogs.com/kkgreen/archive/2011/06/10/2077923.html
总结:

1)分治的思想:一般递归来实现,划分子问题,合并子问题的解。

2)主定理,要很熟悉,常见的递推式应该一眼判断其复杂度。

3)合并排序,快速排序,折半查找,二叉遍历树相关特性,这些都是数据结构的经典内容,之前也都写过了,代码参见前面的相关文章。

这里再次复习,从不同的视角来看它们都是如何用用到了分治的策略。这些内容应当非常熟练。

转载于:https://www.cnblogs.com/cphmvp/p/3892184.html

005-算法-分治法相关推荐

  1. 关于算法--分治法--合并排序

    分治法: 1.思想:①将问题的实例划分为同一个问题的几个较小的实例,最好拥有相同的规模:②对于较小的实例进行求解,一般使用递归法,在问题规模足够小的情况下也是用另一个算法:③如果必要的话,合并这些较小 ...

  2. 算法--分治法归并排序 python

    设计算法 我们可以选择使用的算法设计方法有很多,插入排序使用了增量方法:在排序子数组A[1-j-1]后,将单个元素A[ j ]插入子数组的适当位置,产生排序好的子数组A[1-j]. 而这次我们将考查另 ...

  3. C#内功修炼(算法)——分治法(一)

    分治法(递归的解决问题) 分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这 ...

  4. 跟我一起学算法——分治法

    目录 1.定义 2.适用条件分析 3.步骤 应用1:归并排序 步骤 算法 算法分析 应用2:快速排序 基本思想 算法 算法分析 参考 @ 分治法(Divide and Conquer) 1.定义 对于 ...

  5. 五大常用算法——分治法,动态规划,回溯法,分支界限法,贪心算法

    (1) 分治法 将一个难以直接解决的大问题,分割成一些规模较小的相同问题 快速排序 快排也是分治的一个实例,快排每一趟会选定一个数,将比这个数小的放左面,比这个数大的放右面, 然后递归分治求解两个子区 ...

  6. 算法导论-排序算法-分治法

    1.分治法原理 所谓的分治指的就是分而治之,即将大规模的问题分解成几个较小规模的问题.通过对较小规模问题的求解达到对整个问题的的求解.当我们将问题分解成两个较小问题求解时的分治方法就是二分法. 分支的 ...

  7. 算法-分治法-循环赛的日程安排

    问题:设有n=2^k个选手参加循环赛,要求设计一个满足以下要求比赛日程表: 1)每个选手必须与其它n-1个选手各赛一次: 2)每个选手一天只能赛一次. 按照上面的要求,可以将比赛表设计成一个n行n-1 ...

  8. Python算法——分治法查找数组中元素最小最大值

    要求: 给定数组a1,a2,a3,...an,找出数组中最大值和最小值.(数组中两两各不相同) 分析: 算法思想类似于上图,将数组两两分为一组,如果数组元素奇数个,就把最后一个元素单独分为一组,然后分 ...

  9. 循环赛日程表算法——分治法

    一.问题描述: 设有n=2^{k}个选手要进行网球循环赛,要求设计一个满足以下要求的比赛日程表: (1)个选手必须与其他n-1个选手各赛一次: (2)每个选手一天只能赛一次. 按此要求,可将比赛日程表 ...

  10. 深大算法设计与分析实验二——分治法求最近点对问题

    源代码: 深大算法设计与分析实验二--分治法求最近点对问题代码-C/C++文档类资源-CSDN下载 目录 实验问题 一.实验目的: 二.内容: 三.算法思想提示 产生不重复的随机点算法: 蛮力算法: ...

最新文章

  1. 矩阵LU分解分块算法实现
  2. 产线数字化软件源码_数字化工厂规划的十大核心要素
  3. 共同好友推荐java_【开班典礼】初雪迎初见,白色浪漫中,他们选择从此与Java相伴!...
  4. http响应协议分析
  5. python 新手常见问题
  6. io_uring 新异步 IO 机制,性能提升超 150%,堪比 SPDK
  7. m2接口和nvme协议接口_怎么看笔记本的主板是支持加装m2接口和m2协议NVME接口的固态硬盘?两者有什么区别?...
  8. Arcgis 安装教程
  9. 科学家被称为计算机之父,被称为“计算机之父”,他超前的思维揭开计算机处理信息的本质!...
  10. 如何安装 Ubuntu 22.04 LTS 桌面版 ?
  11. 游戏六边形地图的实现
  12. 解决WIN10播放AVI等格式视频黑屏只有声音的问题
  13. NORDIC Thing:52 Android App 学习之一:THINGY 52 节点与手机的蓝牙识别、过滤及通信建立
  14. 手机黑名单,拦截电话和短信,清除通话记录
  15. Electron加载网页失败,监听事件处理
  16. 【linux】centos7 升级gcc版本
  17. 华为服务器视频无法播放视频文件夹,服务器上的视频文件
  18. 大学生中秋节网页作业制作 学生中秋节日网页设计模板 八月十五中秋静态网页成品代码下载 中秋节日网页设计作品
  19. C# 实现寻峰算法的简单优化(包含边峰,最小峰值,峰距)
  20. oracle sga使用率高,Oracle 查看SGA PGA使用率

热门文章

  1. angularjs与后台传值接收值
  2. [Gamma]Scrum Meeting#5
  3. kali渗透-基础篇
  4. matlab从工作区读取一维数组和结构体
  5. bzoj 2109: [Noi2010]Plane 航空管制
  6. 在swt中获取jar包中的文件 uri is not hierarchical
  7. 记录-JQuery日历插件My97DatePicker日期范围限制
  8. Post请求,向服务器发送用户信息
  9. [小故事大道理] -- GoodMorning,Sir!
  10. “我太喜欢你了”——友情的表达方式?