您的位置:首页 > 理论基础 > 数据结构算法

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

2013-07-20 20:46 218 查看
某些分支算法将以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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: