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;
}