不动点问题的O(logn)时间算法
问题描述(2-8):设n个不同的整数排好序后存于T[1:n]中。若存在下标i,1<=i<=n,使得T[i]=i,设计一个有效算法找到这个下标。要求算法在最坏情况下的计算时间为O(logn).
分析与解答:
由于n个整数是不同的,因此对任意1<=i<=n-1有T[i]<=T[i+1]-1
(1)对于1i时,对任意的i<=j
(2)对于1
由(1)和(2)可知,用二分搜索算法可以在O(logn)时间内找到所要的下标。
非递归二分搜索:
int BinarySearch(int T[],int i,int n)
{
int low,high,mid;
low=0;high=n-1;
while(low<=high)
{
mid=(low+high)>>1;
if(i==T[mid])
{
printf("key %d is found,subscript is %d\n",i,mid)
return mid;
}
else if(i>T[mid])
low=mid+1;
else
high=mid+1;
}
}
相关主题