山东莱钢建设有限公司网站,网站建设公司倒闭,西安比较好的直播公司,自己做网站需要做服务器二分查找很简单#xff0c;可是对于一个区间长度为n的数组#xff0c;最大的比较次数为多少呢#xff1f;
对于标准的二分查找#xff0c;我们每次从区间[l,r)中取一个值#xff0c;和中间值mid(lr)1进行比较#xff0c;然后将数组分为[l,mid) [mid1,r)#xf…二分查找很简单可是对于一个区间长度为n的数组最大的比较次数为多少呢
对于标准的二分查找我们每次从区间[l,r)中取一个值和中间值mid(lr)1进行比较然后将数组分为[l,mid) [mid1,r)即每次将区间长度x变为(x-1)1。最大比较次数显然是我们想要查找的数并不在数组中的时候这样的话我们需要将区间长度变为0才能结束比较。这样直接分析有些困难因此我们不妨换一个思路。
如果区间长度为1显然最多比较1次 区间长度为2最多比较2次[0,2) - [0,1) - [0,0) 区间长度为3最多比较2次[0,3) - [0,1) [2,3) 区间长度为4最多比较3次[0,4) - [0,2) - [0,1)
因此我们不难得到规律 如果最多比较x次则区间长度为2^(x-1) ~ 2^x-1 对于区间长度y最多比较logy1次
我们对上述发现的规律进行归纳证明
假设对于区间长度为2^(k-1) ~ 2^k-1的区间最多比较k次 则对于区间长度为2^k ~ 2^(k1)-1的区间假设区间长度为x 如果区间长度为奇数那么第一次比较以后左右两个区间的长度在2^(k-1) ~ 2^k-1之间加上第一次比较最多比较k1次 如果区间长度为偶数那么第一次比较以后较大的区间为长度为偶数的区间此区间的长度仍然在2^(k-1) ~ 2^k-1之间加上第一次比较最多比较k1次
综上对于区间长度为2^(k-1) ~ 2^k-1的区间最多比较k次k1即对于区间长度y最多比较logy1次