分治法
来源:互联网 发布:淘宝直通车搜索 编辑:程序博客网 时间:2024/04/29 02:00
分治法在每一层递归上都有三个步骤:
分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;
解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题;
合并:将各个子问题的解合并为原问题的解。
它的一般的算法设计模式如下:
Divide-and-Conquer(P)
1. if |P|≤n0
2. then return(ADHOC(P))
3. 将P分解为较小的子问题 P1 ,P2 ,...,Pk
4. for i←1 to k
5. do yi ← Divide-and-Conquer(Pi) △ 递归解决Pi
6. T ← MERGE(y1,y2,...,yk) △ 合并子问题
分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;
解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题;
合并:将各个子问题的解合并为原问题的解。
它的一般的算法设计模式如下:
Divide-and-Conquer(P)
1. if |P|≤n0
2. then return(ADHOC(P))
3. 将P分解为较小的子问题 P1 ,P2 ,...,Pk
4. for i←1 to k
5. do yi ← Divide-and-Conquer(Pi) △ 递归解决Pi
6. T ← MERGE(y1,y2,...,yk) △ 合并子问题
7. return(T)
1、给定一个顺序表,编写一个求出其最大值和最小值的分治算法。
void PartionGet(int s,int e,int *meter,int *max,int *min)
{
if(e-s <= 1) do_sth, return;
i = s + (e-s)/2; /* 不是子问题继续分治,这里使用了二分,也可以是其它 */
PartionGet(s,i,meter,max,min);
PartionGet(i+1,e,meter,max,min);
}
2、合并排序
3、快速排序
4、折半查找
5、二叉遍历树
todo: 大整数乘法,矩阵乘法的分治策略,最近点对,凸包问题
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- [解释]Super(true)和destroyApp(参数)到底是什么意思?其他小问题
- 外部用户操作系统验证学习
- 记录一些喜欢听的歌, 可以吗?
- android lib 第三方 库的使用
- 深入理解CLDC和MIDP
- 分治法
- SharePoint 数据库管理-PowerShell
- C 易错知识点
- 使用eclipse创建Maven项目
- Windows下MySql数据库忘记root密码的处理方法
- fragment的简单介绍
- qq2012关闭升级提示方法
- Makefile编译目录下多个文件
- 多个操作语句的触发器为什么在执行时,只执行了第一句?