某些分支算法将以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; } }