0206:数据结构-查找
本文依照学习难度,分成入门、进阶两个部分。
入门部分以直观、易于理解为主;进阶部分重点在于概念、推导等。
目录
入门
二分查找要求输入是一个有序的元素列表
通俗来说,是每次一半一半的猜
举个例子:
常见的游戏,随便想一个1-100之内的数字,要求你以最少的次数猜测这个数字是什么。
针对每次猜测结果,会告知“猜大了”,“猜小了”,“对啦”
比较笨的猜法是:

这个被称为简单查找
比较聪明的猜法是:

按照最糟糕的情形,
比较笨的猜法需要猜100次,也就是假设他一个一个猜,最后一个才猜中,这种方法大O表示法是O(n)
比较聪明的猜法需要:
|------------+------------+------------+------------|
| 1 | 2 | ... | x |
|------------|:-----------|:-----------|:----------:|
| n/2 | n/2 * 1/2 | ... | n/2^x |
|------------+------------+------------+------------|
令n/2^x=1,得到 n=2^x,得到x=log2n
这种方法得到的大O表示法是O(logn)
由上也可以理解为什么要求输入序列是有序的了。
进阶
[1] 算法图解 Aditya Bhargava (作者) 袁国忠 (译者)