摘要: 计算X^N的常见算法是使用N-1次乘法自乘,时间复杂度为O(n)。使用下面的递归算法更好,时间复杂度为O(logn):template<class T> T Pow(T x, unsigned int N) { if (0==N) { return 1; } else if (1==N) { return x; } else if (0==N%2) { return Pow(x*x, N/2); } else { return Pow(x*x, N/2)*x; } } 阅读全文
posted @ 2012-02-28 15:21 刘军newhand_liu 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 求两个数的最大公因数,如gcd(50, 15)=5时间复杂度:O(logn)unsigned int Gcd(unsigned int M, unsigned int N) { unsigned int temp; //令M>=N if (M<N) { temp = M; M = N; N = temp; } while(N>0) { temp = M % N; M = N; N = temp; } return M; } 阅读全文
posted @ 2012-02-28 14:49 刘军newhand_liu 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 问题说明:给定整数(可能有负数),求的最大值(为方便起见,如果所有整数均为负数,则最大子序列和为 0 )。三种实现方法:方法一:O(n^2)template<class T> T MaxSubSequenceSum_1(const T A[], int length) { T thisSum = 0; T maxSum = 0; for(int i=0; i<length; ++i) { thisSum = 0; for(int j=i; j<length; ++j) { thisSum += A[j]; if (thisSum>maxSum) { ... 阅读全文
posted @ 2012-02-28 14:29 刘军newhand_liu 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 定义:一个函数用它自己来定义时就称为递归递归的四条基本法则:1.基准情形(base case):必须总要有某些基准的情形,它们不用递归就能进行求解2.不断推进(making progress):对于那些需要递归求解的情形,递归调用必须总能够朝着产生基准情形的方向推进3.设计法则(design rule):假设所有的递归调用都能运行4.合成效益法则(compound interest rule):在求解一个问题的同一个实例时,切勿在不同的递归调用中做重复性的工作例如,用递归计算斐波那契数就违反了第四条法则:Fib(int n) { if(n<=1) return 1; ... 阅读全文
posted @ 2012-02-28 12:37 刘军newhand_liu 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 静态查找算法:对表中的记录只进行查找操作顺序查找:时间复杂度:O(n)优点:对数据集合中元素的有序性、存储结构都没有任何要求缺点:查找效率低二分查找:时间复杂度:O(logn)优点:查找效率高缺点:要求数据集合中的元素是顺序存储且有序的分块查找:将主表分成若干个子表,为每个子表建立一个索引值,组成一个索引表,索引表要求是有序的。查找分为两个过程:首先对索引表进行二分查找,然后对子表进行顺序查找“分块有序”:主表中的前一个子表中的最大关键字必须小于后一个子表中的最小关键字动态查找算法:对表中的记录进行查找、插入、删除操作二叉排序树:或者是一棵空树;或者:若它的左子树不为空,则左子树上所有结点的值 阅读全文
posted @ 2012-02-28 12:28 刘军newhand_liu 阅读(182) 评论(0) 推荐(0) 编辑