搜索算法 怎么工作
在字典里查词时,不会从第一页一页一页地翻。而是翻到中间,判断要找的词在前面还是后面。只要排好了顺序,像这样一半一半地切下去,就能快得多地找到。
从头依次找
最简单的找法,是从头一个个看。
“是这个吗?不是。下一个呢?不是。”一直翻到找到为止。
虽然稳妥,可要找的值在后面的话,就要花很久。
按“逐个查找”,就从前往后一格一格检查。要找的值是13。
格子不多的话,这样也没问题。
可要是有几千、几万个,一个个看就得花上好久。
还有更好的办法,是排好顺序时才能用的聪明办法。
翻到中间
排好了顺序,就这样做:先翻到中间看一看。
要找的值比它大,就扔掉前一半;比它小,就扔掉后一半。
每看一次,就去掉一半。
每按一次“看中间”,就把不可能有目标值的那一半整个扔掉。要找的值是13。
一次扔掉一半,剩下的就一下子少了。
8格变4格,4格变2格,2格变1格。
看几次,就缩到只剩一格了。
逐个 vs 对半
把两种方法并排放着,找同一个值。
逐个找的那一边,要看很多次才能找到后面的值;对半找的那一边,几次就完成了。
答案一样,步数却差得远。
找同一个值(13),比较步数。逐个 = 慢 · 对半 = 快。
格子越多,差距就越大。
一千个东西逐个看,最多要看一千次;对半切,大约十次就够了。
在大数据里,这个差距大得惊人。
为什么要先排序
对半切有一个条件:必须排好顺序。
只有排好了,“比中间大就可以扔掉前面”才成立。
要是乱七八糟,就没法扔掉一半。
只有排好了序,对半切才行得通。排好 → 成立 · 乱七八糟 → 不成立。
所以排序和查找是一对搭档。
一旦排好了队,以后查找就一直很快。
花在整理上的力气,会一次又一次得到回报。
一路走到这里
查找总在我们身边。
字典、电话簿、在搜索框里打的一个词,背后都有对半切这样的方法在飞快地找答案。
顺序、排序、查找,现在连成了一条线。
顺序 → 排序 → 查找,走到了这里。查找 = 快速挑出想要的东西。
现在你应该明白了,算法并不是什么了不起的东西。
定好顺序,整理好,聪明地去找。
小小的巧思聚在一起,就能办成大事。