算法
把想要的快快找到
在字典里查词,不会从第一页一张张翻。翻开中间,定一下“在前还是在后”。排好了队,一半一半地切,能快得多地找到。
01
从头一个个来
最简单的找法
是从头一个个看。
“是这个吗? 不是。
下一个? 不是。”
一直翻到
对上为止。
是稳,可
在后头的话,
挺费时间。
2
5
8
11
13
17
21
25
从前面一格格确认。要找的越在后头,越费时间。
从前面一个个。(要找 13 · 从前面一格格确认)
格子没几个
还行。
可要是几千、几万个呢?
一个个看
得看老半天。
有更好的法子。
排好队时用的
聪明法子。
02
翻开中间看看
排好了队
就这么做。
翻开中间看。
要找的比它大,
前一半就扔。
比它小,就扔后一半。
每看一次,
一半就没了。
2
5
8
11
13
17
21
25
跟中间的值比,把没有要找的那一半整个扔掉。
看中间,扔掉一半。(要找 13 · 把没有它的那一半整个扔掉)
一次扔一半,
剩下的猛地少。
8 格到 4 格,
4 格到 2 格,
2 格到 1 格。
没几下
就缩到一格。
03
一个个 vs 一半一半
把两个并着,
找同一个值。
一个个
碰上在后头的值
得看好多次。
一半一半
没几下就完。
答案一样,
步数差好多。
一个个慢
2
5
8
11
13
17
21
25
一半一半快
2
5
8
11
13
17
21
25
一半一半地切,用少得多的步数找到同一个值。
找同一个值(13),比步数。(一个个 = 慢 · 一半一半 = 快)
格子越多,
差得越开。
一千个一个个
最多看一千次,
一半一半十次就够。
这差距,
在大数据里,
大得吓人。
04
为什么先排序
一半一半地切
有个条件。
得排好队。
排好了
“比中间大就扔前面”
才成立。
乱七八糟的话,
就扔不掉一半。
2
5
8
11
13
17
21
25
队排好了。能以中间为准扔掉一半。
上一课排好的队,在这儿接上了快速查找。
只有排好队,一半一半才行得通。(排好 → 成立 · 乱七八糟 → 不行)
所以排序和查找
是搭档。
排一次队,
往后查找
就一直快。
收拾的工夫,
往后一回回都值。
05
走到这儿了
查找一直在身边。
字典、电话簿、
搜索框里打的一个词。
在它背后,
像“一半一半地切”的法子
快快找出答案。
顺序、排序、查找,
现在连成了一条线。
查找 = 把想要的快快拈出来
一个个慢 · 排好就一半一半 · 快得多。
顺序
定好的步骤
排序
排成一列
查找
快快拈出
算法的三个基本步子,你都走过了。下一个领域里走得更深。
顺序 → 排序 → 查找,到这儿。(查找 = 把想要的快快拈出来)
算法
没什么了不起的,
现在该明白了。
定个顺序,
收拾整齐,
聪明地找。
小巧聚起来,
就办成了大事。
一句话总结查找是把想要的拈出来。一个个看慢,可排好了队就一半一半地切,快得多地找到。一半一半地切,只有排好队才行得通。所以排序和查找是搭档。排一次队,往后一直快。
← 算法