不动点问题的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=T[i]+j-i>i+j-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;

}

}

相关文档
最新文档