五大常用算法之四:分治法

分治法和动态规划有点像,都是分解成子问题

中科大的张署老师课件很清楚,摘录如下:

1.什么是分治法

     当求解的问题较复杂或规模较大时,不能立刻得到原问题的解,但这些问题本身具有这样的特点,它可以分解为若干个与原问题性质相类似的子问题,而这些子问题较简单可方便得到它们的解,因此通过合并这些子问题的解就可得到原问题的解。

2. 应用分治法的三个基本步骤

①分解问题(divide):把原问题分解为若干个与原问题性质相类似的子问题

②求解子问题(conquer):不断分解子问题直到可方便求出子问题的解为止

③合并子问题的解(combine):合并子问题的解得到原问题的解

做题时的三步(与上面类似)

①divide:把具有n个元素的数组分解为二个n/2大小的子数组

②conquer:递归地分解子数组,直到子数组只包含一个元素为止

③combine:二二合并已排好序的子数组使之成为一个新的排好序的子数组,重复这样二二合并的过程直到得到原问题的解

 

3.分治法适用条件

①原问题可以分解为若干个与原问题性质相类似的子问题

②问题的规模缩小到一定程度后可方便求出解

③子问题的解可以合并得到原问题的解

④分解出的各个子问题应相互独立,即不包含重叠子问题

   如求Fib数问题

 

4.经典例子:

归并排序(Merge Sort) 思想:如果能把原待排序的数组分解成若干个待排序的子数组,而这些子数组可以方便地排好序,并且通过合并这些子数组的解将能得到原问题的解,则整个数组将排好序。

快速排序:

二分查找:一个有序数组,通过均匀二分,每次折半查找,不就是分治法吗!!!

FFT快速傅里叶变换:这是DSP课本里的知识,离散时域信号转换为频域信号,运算量太大,故拆分计算再合并,每部分的处理方式和没拆分时总体的方式一样的,所以符合分治法!!!

 

5.三种常用算法:

替换法,递归树,主方法

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值