浅谈对二分查找最大次数的理解

首先列出二分查找最大次数的公式 |log2n|+1(|x|为不大于x的最大整数)
接下来谈一谈我的理解:
数组大小 查找的最大次数
1(2^ 0) 1
2(2^1) 2
4(2^2) 3

当数组大小为8时(a[0],a[1]…a[7]),(第一步)对半查找取a[3],之后数组划分为a[0],a[1],a[2]和a[4],a[5],a[6],a[7],因为我们要次数最大,因此自然在后者而不是前者中继续查找(毕竟4比3大)。(第二步)对a[4],a[5],a[6],a[7]这4个数进行对半查找,但是这种情况已在上面列出,对于4个长度的数组,我们最大查找次数为3.
(第三步)将第一步和第二步所进行的次数相加,1+3=4.
因此当数组长度为8时,查找的最大次数为4.

同理,数组长度为16时,对半查找一次后情况如同长度为8的数组,英雌查找的最大次数为4+1=5.
数组大小 查找的最大次数
由此可得 2^n n+1

讨论了基本情况之后,我们来讨论更复杂的情况
假设一个数x,2^n<x,
x<2^(n+1).
同样的操作,(第一步)进行对半查找,划分为两个数组,这是一次操作。(第二步)因为x<2^(n+1),所以划分所得到的两个数组,其中最大的一个数组一定小于
2^(n+1)/2,
即2^n,因此对其进行对半查找所需的操作次数一定小于n+1,因此等于n(此处假设公式 |log2n|+1成立,由公式 |log2n|+1推出次数等于n).
(第三步)将第一步和第二步的次数相加得1+n,所以x查找的最大次数与大小为2^n的数组相同,
可以得到
数组范围 查找的最大次数
2的n次方——2的(n+1)次方-1 n+1

也就是公式 |log2n|+1(|x|为不大于x的最大整数)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值