策略**
1、将原问题划分或转化为规模较小的子问题
2、递归或迭代求解每个子问题
3、将子问题的解综合得到原问题的解
注意
1、子问题的性质与原问题的性质一样
2、子问题之间可以独立的求解
3、递归停止时,子问题足够的小,可直接求解
二分检索
查看在数组T,是否有元素x的存在
把x与中间m处进行比较,
若x=m,那么m就是x在t中的位置
若x<m,那么将x与前面m-1的部分比较
若x>m,将x与后面的m-1进行比较
二分检索算法的设计思想
1、将x与中位数进行比较,将原问题转化为规模减半的子问题,
如果x小于中位数,则子问题由小于中位数的问题构成,
若x大于中位数,则x由大于中位数的问题构成
2、对子问题进行二分检索
3、当x的规模为1时,直接将x与T(M)进行比较,若相等的则返回m,若不等则返回0
二分检索算法时间复杂度的分析
二分归并排序
二分归并排序的设计思想
1、将原问题归结为规模为n/2的两个子问题,
2、继续划分,将原问题换分为规模为n/4的四个子问题,继续,当子问题的规模划分为1时,结束划分
3、从规模1到1/2*n,继续归并排好序的两个子数组,每归并一次,数组规模扩大一倍,直到原始数组。
二分归并排序设计时间复杂度的分析
子问题的合并次数为n-1次
汉诺塔的递归算法
把原始n个盘子的问题归结为n-1的两个盘子的子问题,f(n)=1,代表一个盘子从A移到C的问题,子问题是减少1,而不是倍数的减少
算法设计思想
分治算法的特点