读书笔记——数据结构(2)运行时间中的对数

来源:互联网 发布:最新网络投资产品 编辑:程序博客网 时间:2024/05/18 18:52

某些分支算法将以O(logN)时间运行。

一般法则:

如果一个算法用常数时间(O(1))将问题的大小削减为其一部分(通常是1/2),那么该算法就是O(logN)。

另一方面,如果使用常数时间知识吧问题减少一个常数(如将问题减少1),那么这种算法就是O(N)的。


三个例子:

1.对分查找(二分查找)

给定一个整数X和整数A0,A1,……,AN-1,后者已经预先排序并在内存中,求使得Ai=X的下表i,如果X不在数据中,则返回i=-1。

int BinarySearch(const ElementType A[],ElementType X,int N){int Low,Mid,High;Low=0;High=N-1;while(Low<=High){Mid=(Low+High)/2;if(A[Mid]<X){Low=Mid+1;}else if(A[Mid]>X){High=Mid-1;}else{return Mid;}}return -1;}
2.欧几里德算法

计算最大公约数的欧几里德算法。

unsigned int Gcd(unsigned int M,unsigned int N){unsigned int Rem;while(N>0){Rem=M%N;M=N;N=Rem;}return M;}
3.幂运算

计算一个整数的N次幂

long int Pow(long int X,unsigned int N){if(N==0){return 1;}if(N==1){return X;}if(IsEven(N)){return Pow(X*X,N/2);}else{return Pow(X*X,N/2)*X;}}


原创粉丝点击