因为简单!我的第一本算法书,就被女友抢走了...

因为简单!我的第一本算法书,就被女友抢走了..._第1张图片
普通程序员,不学算法,也可以成为大神吗?对不起,这个,绝对不可以。

可是算法好难啊~~看两页书就想睡觉……所以就不学了吗?就一直当普通程序员吗?

如果有一本算法书,看着很轻松……又有代码示例……又有讲解……

怎么会有那样的书呢?哎呀,最好学了算法人还能变得很萌……

这个……要求是不是太高了呀?哈哈,有的书真的能满足所有这些要求哦!

来,看看这本书有多可爱——

二分查找

假设要在电话簿中找一个名字以K打头的人,(现在谁还用电话簿!)可以从头开始翻页,直到进入以K打头的部分。但你很可能不这样做,而是从中间开始,因为你知道以K打头的名字在电话簿中间。

因为简单!我的第一本算法书,就被女友抢走了..._第2张图片
又假设要在字典中找一个以O打头的单词,你也将从中间附近开始。

现在假设你登录Facebook。当你这样做时,Facebook必须核实你是否有其网站的账户,因此必须在其数据库中查找你的用户名。如果你的用户名为karlmageddon,Facebook可从以A打头的部分开始查找,但更合乎逻辑的做法是从中间开始查找。

这是一个查找问题,在前述所有情况下,都可使用同一种算法来解决问题,这种算法就是二分查找。

因为简单!我的第一本算法书,就被女友抢走了..._第3张图片

二分查找是一种算法,其输入是一个有序的元素列表(必须有序的原因稍后解释)。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回null。

下图是一个例子。

因为简单!我的第一本算法书,就被女友抢走了..._第4张图片

下面的示例说明了二分查找的工作原理。我随便想一个1~100的数字。

因为简单!我的第一本算法书,就被女友抢走了..._第5张图片

你的目标是以最少的次数猜到这个数字。你每次猜测后,我会说小了、大了或对了。

假设你从1开始依次往上猜,猜测过程会是这样。

因为简单!我的第一本算法书,就被女友抢走了..._第6张图片
这是简单查找,更准确的说法是傻找。每次猜测都只能排除一个数字。如果我想的数字是99,你得猜99次才能猜到!

更佳的查找方式
下面是一种更佳的猜法。从50开始。

因为简单!我的第一本算法书,就被女友抢走了..._第7张图片

小了,但排除了一半的数字!至此,你知道1~50都小了。接下来,你猜75。

因为简单!我的第一本算法书,就被女友抢走了..._第8张图片

大了,那余下的数字又排除了一半!使用二分查找时,你猜测的是中间的数字,从而每次都将余下的数字排除一半。接下来,你猜63(50和75中间的数字)。

因为简单!我的第一本算法书,就被女友抢走了..._第9张图片

你可能感兴趣的:(算法,Python,漫画,算法图解,码书)