分治算法(Divide-and-Conquer)

在计算机科学中,分而治之(简称分治法)是基于多分支递归的算法设计范例。分而治之算法的工作原理是将问题递归分解为两个或多个相同或相关类型的子问题,直到这些子问题变得足够简单以至于可以直接解决。然后将子问题的解决方案组合起来,以解决原始问题。

利用分治法解决问题有下面三个步骤:

1、分解:将原问题分解为多个子问题,每个子问题与原问题类型相同,但比原问题规模小。

2、解决:递归求解子问题,如果子问题规模足够小,直接可以求解。

3、合并:合并子问题的解,得到原问题的解。

例子一:下面以一个简单的序列(a0, a1, a2, .....an)求和问题,说明分治算法的应用。

序列可以用Python的list或Go 语言的slice 来保存它。

1、分解:如果序列的n大于1,可以从中间一分为二,分别求出左边的和和右边的和。

2、解决:按照 n / 2 ,分解为左边,右边。左边和右边可以再递归的分解,分解到只剩下单一元素时,直接可以求解了。

3、合并:合并上面递归求的解(左、右的解)

下面请看Python 代码,特别提示,该方案不是最好的解决方法,只是用一个简单的例子来说明分治算法。

例子二: 归并排序

归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为 O(n\log n)(大O符号)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。

采用分治法:

分解:递归地把当前序列平均分割成两半。

合并:在保持元素顺序的同时将上一步得到的子序列集成到一起(归并)。

请看Python 代码。

黄哥:黄哥Python:提醒要转行当程序员的朋友,学习要分先后主次​zhuanlan.zhihu.com黄哥:黄哥Python培训是这样训练学员的​zhuanlan.zhihu.com

python分治算法_黄哥Python:分治算法(Divide-and-Conquer)相关推荐

  1. python换零钱_黄哥Python, 贪心算法解决换零钱问题

    下面的文字来源于维基百科 贪心算法(英语:greedy algorithm) 又称贪婪算法,是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法.比如 ...

  2. python新书 代码_黄哥Python,2018年Python新书推荐

    1.对待学习Python的态度问题. 如果你想在大城市(一线城市就业),通过学习python 学会编程,是比较好的选择之一.当然可以选择Java.PHP等编程语言.如果在三线,四线城市等城市工作,建议 ...

  3. visual studio code Python终端运行_黄哥Python:VS Code 10个Python 插件

    转载自 https://medium.com/issuehunt/10-visual-studio-code-extensions-for-python-development-de0be51bbee ...

  4. python解题思路_黄哥Python: 一道水题“最大唯一数” 解题思路

    有人在**论坛上提问,求解一个数组中最大唯一数. 1.读题,数组中全部是整数,有的数字有重复的,求出不重复的最大整数. 2.解题思路,利用Python 字典去统计每一个整数出现的次数,整数为key,出 ...

  5. python 短进程优先算法_黄哥Python:图深度优先算法(dfs)

    深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法.沿着树的深度遍历树的节点,尽可能深的搜索树的分支.当节点v的所在边都己被探寻过,搜索将回溯到发现 ...

  6. 用python求两个人的平均身高_黄哥Python:分治算法(Divide-and-Conquer)

    分治算法(Divide-and-Conquer) 在计算机科学中,分而治之(简称分治法)是基于多分支递归的算法设计范例.分而治之算法的工作原理是将问题递归分解为两个或多个相同或相关类型的子问题,直到这 ...

  7. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  8. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  9. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

最新文章

  1. 【Android 应用开发】View 与 SurfaceView 区别
  2. 背景图层和普通图层的区别_新手如何在PS中创建图层?不容错过的7种方法,你值得学习...
  3. Docker 制作镜像的方式
  4. ant design 预览图片_AntD框架的upload组件上传图片时遇到的一些坑
  5. ie11加载java插件_IE浏览器中ActiveX插件的使用
  6. linux 批量替换文件内容及查找某目录下所有包含某字符串的文件(批量修改文件内容)
  7. SLAM GMapping(8)重采样
  8. Tomcat发布网站知识集锦
  9. [转载]使用CPU时间戳进行高精度计时
  10. 起底 Windows 35 年发展史
  11. 如何查看文件是否为csv格式_Spark实战第二版(涵盖Spark3.0)第七章 从文件接入数据...
  12. Firefox Focus 9.0 将新增广告拦截插件
  13. Android 计时器Chronometer 使用及源码分析
  14. Ps的一些小知识,还有快捷键
  15. 树莓派安装Homeassistant智能家居
  16. MapXtreme+Asp.net 动态轨迹(请求大神指点)
  17. Linux内核裁剪机制优化(make menuconfig)
  18. 【北京-后厂村】大厂云集,精心筛选了19家公司推荐给你
  19. 【车辆计数】基于matlab GUI背景差分法道路行驶多车辆检测【含Matlab源码 1911期】
  20. 打印机连不上解决方案

热门文章

  1. java抽象类和接口_Java抽象类和接口类
  2. Transformer将在AI领域一统天下?现在下结论还为时过早
  3. 项目独享IP,游戏工作室最佳的选择
  4. 淘宝搜索月饼惊现变形金刚
  5. 关于微服务项目中点赞模块的思考
  6. 数据⽣命周期的六个阶段
  7. 谷歌地图如何将经纬度转换为pixel屏幕像素点
  8. windows系统开启tftp服务器,win7系统怎么开启tftp服务器
  9. php ppt自动播放,ppt如何循环播放,ppt如何添加视频设置自动播放(ppt转换成视频)...
  10. 项目开发团队分配管理(java)