算法导论(三)——分治法
2017-10-22 17:01
211 查看
divide conquer combine分而治之:
例子:
求x的n次方:
a^n传统的做法就是循环相乘n次,算法效率为Θ(n)。但是如果采用分治法的思想,算法效率可以提高到Θ(lgn)
二分查找;归并排序;
快速排序;http://www.cnblogs.com/zhoutaotao/p/3970099.html(快排,随机快排)
斐波那契数列http://www.cnblogs.com/zhoutaotao/p/3964997.html(朴素递归,朴素递归平方,自底向上o(n),平方递归o(logn))
矩阵乘法;电路板的二叉树分布
最大最小问题的非递归解法
【用状态空间法分析,最大最小问题的比较次数的下限,当元素个数为奇数,,当其为偶数时,】
template<class T>
bool maxmin(T a[], int n, int&indexofMax, int& indexofMin) {
//Specialcase
if(n < 1) return false;
if(n == 1) {
indexofMax= indexofMin = 0;
returntrue;
}
//Initialization(Odd and even)
ints = 1;//start index
if(n % 2 == 1) {
indexofMax= indexofMin = 0;
}
else{
s= 2;
if(a[0] >= a[1]) {
indexofMax= 0;
indexofMin= 1;
}
else{
indexofMax= 1;
indexofMin= 0;
}
}
//mainprocess
for(int i = s;i < n;i+=2) {
if(a[i]<a[i+1]){
if(a[i] < a[indexofMin])
indexofMin= i;
if(a[i+1] > a[indexofMax])
indexofMax= i+1;
}
else{
if(a[i+1] < a[indexofMin])
indexofMin= i+1;
if(a[i ] > a[indexofMax])
indexofMax= i;
}
}
returntrue;
}
例子:
求x的n次方:
a^n传统的做法就是循环相乘n次,算法效率为Θ(n)。但是如果采用分治法的思想,算法效率可以提高到Θ(lgn)
二分查找;归并排序;
快速排序;http://www.cnblogs.com/zhoutaotao/p/3970099.html(快排,随机快排)
斐波那契数列http://www.cnblogs.com/zhoutaotao/p/3964997.html(朴素递归,朴素递归平方,自底向上o(n),平方递归o(logn))
矩阵乘法;电路板的二叉树分布
最大最小问题的非递归解法
【用状态空间法分析,最大最小问题的比较次数的下限,当元素个数为奇数,,当其为偶数时,】
template<class T>
bool maxmin(T a[], int n, int&indexofMax, int& indexofMin) {
//Specialcase
if(n < 1) return false;
if(n == 1) {
indexofMax= indexofMin = 0;
returntrue;
}
//Initialization(Odd and even)
ints = 1;//start index
if(n % 2 == 1) {
indexofMax= indexofMin = 0;
}
else{
s= 2;
if(a[0] >= a[1]) {
indexofMax= 0;
indexofMin= 1;
}
else{
indexofMax= 1;
indexofMin= 0;
}
}
//mainprocess
for(int i = s;i < n;i+=2) {
if(a[i]<a[i+1]){
if(a[i] < a[indexofMin])
indexofMin= i;
if(a[i+1] > a[indexofMax])
indexofMax= i+1;
}
else{
if(a[i+1] < a[indexofMin])
indexofMin= i+1;
if(a[i ] > a[indexofMax])
indexofMax= i;
}
}
returntrue;
}
相关文章推荐
- 算法导论第三版第四章 最大子数组和的三种解法(暴力、教材分治法、线性解法)
- 算法导论-分治法-最近点对-HDOJ1007
- 算法导论第三版第四章 最大子数组和的三种解法(暴力、教材分治法、线性解法)
- 算法导论--分治法--P17
- 算法导论第三版第四章 最大子数组和的三种解法(暴力、教材分治法、线性解法)
- 算法导论-分治法-合并排序的Python&C++实现
- 算法导论第三版第四章 最大子数组和的三种解法(暴力、教材分治法、线性解法)
- 算法导论 第三节 分治法
- 算法导论:分治法(1)
- 算法导论第三版第四章 最大子数组和的三种解法(暴力、教材分治法、线性解法)
- 算法导论:分治法(2)
- 《算法导论》读书笔记(二)——分治法
- 算法导论第三版第四章 最大子数组和的三种解法(暴力、教材分治法、线性解法)
- 算法导论第三版第四章 最大子数组和的三种解法(暴力、教材分治法、线性解法)
- 算法导论第2章(4) 分治法的应用 找逆序对 (习题2-4)
- 算法导论——分治法——最大子数组问题
- 算法导论学习1--分治法计算逆序数
- 算法导论 第四章:分治法(二)
- 算法导论-分治法-最近点对-HDOJ1007
- 算法导论学习2.3 分治法 (这个递归终于懂了。。)