分治算法
来源:互联网 发布:银行家算法过程详解 编辑:程序博客网 时间:2024/06/03 19:52
分治的思想
简单讲就是,分:大化小,治:以最小划分单元开始,逐个处理,最后整合。大单元计算划分成独立的小单元计算,计算的过程是一样的,比如比较大小,乘除法,最后能整合到一起才行
分治典型方法
递归,递归就是符合分治的思想,根据条件划分成最小单元最后整合,当然也有不利用递归实现的。
为什么要使用分治
提高算法的时间效率
从实例中体验分治算法
归并排序
1、先阅读博文内容:
http://raytaylorlin.com/Tech/algorithm/divide-and-conquer/#2-__u5F52_u5E76_u6392_u5E8F
2、先明确划分的最小单元是什么?注意这里的划分n是2^k。有人问如果n是普通整数怎么办,后面会说。
这个最小单元是含有一个元素的数组,划分的最终结果就是n个一元数组所以划分的条件,也就是递归的终止条件是n=1,递归关键点就是终止条件。
3、划分完后怎么合并?
博文里面给出了一个合并函数,实现的逻辑也讲得很清楚,就是把两个升序数组和并成一个升序数组
4、当n为一般整数怎么办?
整数n有偶数奇数,抓住一点划分结果是n个一元数组,所以可以加个判断,
if(n%2==0){ leftList = mergeSort(data[len(data) / 2]) rightList = mergeSort(data[len(data) / 2])}else{ leftList = mergeSort(data[len(data) -1/ 2 ]) rightList = mergeSort(data[len(data)+1 / 2 ])}
整数幂 m^n
当n非常大时,如果采用简单的循环语句,程序时间复杂度为O(n),采用分治可以为O(logn)
这里介绍递归分治求正整数幂,先看博文
http://blog.csdn.net/zwhlxl/article/details/44086105
1、这划分的最小元就是 底数m,然后合并,比较简单
2、这里也是做了奇偶数判断
非递归的分治求正整数幂,请看上一篇博文快速幂
其他典型案例
阅读全文
0 0
- 分治算法
- 分治算法
- 分治算法?
- 【算法】分治
- 【算法】分治
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 183. Customers Who Never Order
- 安卓一像素Activity保活+动态广播
- ubuntu下安装mysql及卸载mysql方法
- 111
- 文件格式汇总
- 分治算法
- python3内置函数学习
- TJU训练赛—B
- jupyter notebook 学习
- python3学习汇总
- Java中的跳转语句
- 文件格式之gitignore
- git使用和理解之一(不含分支)
- android让滚动视图充满整个屏幕