盛安
信不信你从1~100中选一个数字,我七次就可以猜出它是什么?
大家有没有兴趣跟父母或者同学做一个游戏?让他们在1~100这100个数字中任选一个写在纸上,但不要说出来,然后你们来猜。每次猜完,他们要告诉你们猜的数字是大了还是小了,然后继续猜,我保证七次之内你们就可以猜到这个数字,你们信不信呢?
这看起来可能有点儿不可思议,毕竟有100个数字呢,只猜七次,是不是太少了点儿?但实际上是可以做到的。
下面就让我们来亲自体验一下这个游戏。比如我选了一个数字83并且把它秘密地写在了一张纸上,然后你就可以猜了。
第一次:一定要猜这100个数字最中间的那个,所以有两个候选者:50和51。我们可以任意选一个,就选50吧。好,现在我告诉你,你猜的数字小了。
第二次:你要找出51~100最中间的那个数字,依然有两个候选者:75和76。我们就选75吧。我告诉你,还是小了。
第三次:这次需要找出76~100最中间的数字,那就是88了。这时我会说,啊,大了。
第四次:你猜一下这次需要怎么选呢?对,就是要找出76~87最中間的那个数,我们依然有两个候选者:81和82。我们选81吧。这时候我说,哎呀,它又小了。
第五次:我相信你已经知道了方法,就是找出82~87最中间的数字,依然有两个候选者:84跟85。我们选84好了。我说这次又大了。
第六次:你肯定知道,这次是要在82和83之间选一个啊,我们选82吧。我说,小了!
第七次:我相信你肯定猜出来了!因为82你猜过,它小了,84你也猜过,它大了,所以还用想吗?肯定是83啊!
看,是不是七次我们就猜出来了?
那你们看懂这个方法了吗?它就是不停地缩小范围,然后找最中间的那个数字,而这种方法,叫作二分法查找。
二分法查找可以快速找出我们要找的那个数字,是计算机算法中应用非常广泛的一种方法,它只有一个要求:就是我们查找的这个东西,必须是已经排列好的。就像1~100这100个数字,它们就是从小到大排列好的。
而且二分法查找不止可以查找连续的数字哟,只要查找的东西是已经排列好的,哪怕数字不连续,也一样可以用二分法。
至于一个数列要几次才能找到我们想要的数字,我们可以这么算:比如100个数字的话,100÷2=50,这是一次。50÷2=25,这是第二次。25÷2= 12.5,四舍五入为13,这是第三次。13÷2=6.5,四舍五入为7,这是第四次。7÷2=3.5,四舍五入为4,这是第五次。4÷2=2,这是第六次。2÷2=1,这是第七次。所以说用这个数列的数的个数一直除以2,直到最后得到1或者比1小的数,看看除了几次,那就是需要的次数。
你学会了吗?可以去跟爸爸妈妈或者同学玩了,一定会让他们吃惊的!