五大经典算法思想之分治策略
Posted 寻挽歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了五大经典算法思想之分治策略相关的知识,希望对你有一定的参考价值。
分治策略
一、分治策略的基本思想
- 将原始问题划分为规模较小的子问题。
- 迭代或者递归求解每一个子问题。
- 将子问题的解综合得到原问题的解。
注意:
- 子问题与原问题性质一致。
- 子问题相互独立求解。
- 迭代或递归停止时子问题直接求解。
二、二分查找
1、核心用法
算法核心用法:查找一个数x是否在一组数中,下面我们来看一段伪代码:
输入一个数组T,下标从a到b,输入一个数组x,若x在数组T中,输出下表j,否则输出0。
依据分治策略的基本思想,我们需要对T进行划分,使得问题规模变小,因为我们将T对半划分 (a+b)/2 向下取整,得到数组的中位数下标m,如果此时x正好是我们找到的中位数m,则输出下标m,如果x比中位数小,则转变为在前半个数组中查找,否则在后半个数组中查找,一直迭代到查找到数x,则输出对应下标,否则输出0。
2、设计思想
- 将数x与中位数进行比较,将原问题转化为规模减半的子问题,若x小于中位数,则子问题在前半个数组查找,否则在后半个数组中查找。
- 对子问题继续进行二分查找。
- 当子问题规模为1时,直接比较数(x)和T(m),相等则返回值m,否则返回0。
显然,二分查找是一种典型的采用分治策略设计思想的算法。
3、二分查找的时间复杂度分析
最好的情况下:只需进行一次查找就能得到我们想要的结果。
最坏的情况下:
w(n)=w[n/2]+1 可解为:w(n)=[logn]+1(n为log的下标)
三、归并排序
1.核心思想
归并排序:将一组无序的元素按照从小到大进行排序,下面我们来看一段伪代码:
首先将数组对半划分,归结为两个子数组之后进行排序,然后将两个子数组重复划分,排序,最后综合得到一个从小到大排序的数组。
2.设计思想
- 将原问题划分为规模为n/2的两个子问题。
- 继续划分,将原问题划分成规模为n/4的四个子问题,直到子问题规模为1时,划分结束。
- 从规模1到规模n/2,陆续归并排好序的两个子数组,归并一次数组扩大一倍,直到达到原数组规模。
3.归并排序的时间复杂度分析
最好情况数组本来就是按照顺序进行排列的,这时我们不需要进行排序。
w(1)=0
最坏情况下:
w(n)=2w(n/2)+n-1 可解为:w(n)=nlogn-(n+1)
四、总结
- 将原问题规约为规模小的子问题,子问题与原问题具有相同的性质。
- 子问题规模足够小时可直接求解。
- 算法可以递归实现也可以迭代实现。
- 可以使用递推方程式分析算法的时间复杂度。
以上是关于五大经典算法思想之分治策略的主要内容,如果未能解决你的问题,请参考以下文章