盛安
信不信你從1~100中選一個數(shù)字,我七次就可以猜出它是什么?
大家有沒有興趣跟父母或者同學做一個游戲?讓他們在1~100這100個數(shù)字中任選一個寫在紙上,但不要說出來,然后你們來猜。每次猜完,他們要告訴你們猜的數(shù)字是大了還是小了,然后繼續(xù)猜,我保證七次之內(nèi)你們就可以猜到這個數(shù)字,你們信不信呢?
這看起來可能有點兒不可思議,畢竟有100個數(shù)字呢,只猜七次,是不是太少了點兒?但實際上是可以做到的。
下面就讓我們來親自體驗一下這個游戲。比如我選了一個數(shù)字83并且把它秘密地寫在了一張紙上,然后你就可以猜了。
第一次:一定要猜這100個數(shù)字最中間的那個,所以有兩個候選者:50和51。我們可以任意選一個,就選50吧。好,現(xiàn)在我告訴你,你猜的數(shù)字小了。
第二次:你要找出51~100最中間的那個數(shù)字,依然有兩個候選者:75和76。我們就選75吧。我告訴你,還是小了。
第三次:這次需要找出76~100最中間的數(shù)字,那就是88了。這時我會說,啊,大了。
第四次:你猜一下這次需要怎么選呢?對,就是要找出76~87最中間的那個數(shù),我們依然有兩個候選者:81和82。我們選81吧。這時候我說,哎呀,它又小了。
第五次:我相信你已經(jīng)知道了方法,就是找出82~87最中間的數(shù)字,依然有兩個候選者:84跟85。我們選84好了。我說這次又大了。
第六次:你肯定知道,這次是要在82和83之間選一個啊,我們選82吧。我說,小了!
第七次:我相信你肯定猜出來了!因為82你猜過,它小了,84你也猜過,它大了,所以還用想嗎?肯定是83??!
看,是不是七次我們就猜出來了?
那你們看懂這個方法了嗎?它就是不停地縮小范圍,然后找最中間的那個數(shù)字,而這種方法,叫作二分法查找。
二分法查找可以快速找出我們要找的那個數(shù)字,是計算機算法中應用非常廣泛的一種方法,它只有一個要求:就是我們查找的這個東西,必須是已經(jīng)排列好的。就像1~100這100個數(shù)字,它們就是從小到大排列好的。
而且二分法查找不止可以查找連續(xù)的數(shù)字喲,只要查找的東西是已經(jīng)排列好的,哪怕數(shù)字不連續(xù),也一樣可以用二分法。
至于一個數(shù)列要幾次才能找到我們想要的數(shù)字,我們可以這么算:比如100個數(shù)字的話,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,這是第七次。所以說用這個數(shù)列的數(shù)的個數(shù)一直除以2,直到最后得到1或者比1小的數(shù),看看除了幾次,那就是需要的次數(shù)。
你學會了嗎?可以去跟爸爸媽媽或者同學玩了,一定會讓他們吃驚的!