0206:数据结构-查找

发表信息: by Creative Commons Licence

本文依照学习难度,分成入门、进阶两个部分。

入门部分以直观、易于理解为主;进阶部分重点在于概念、推导等。

目录

入门

二分查找要求输入是一个有序的元素列表

通俗来说,是每次一半一半的猜

举个例子:

常见的游戏,随便想一个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 (作者) 袁国忠 (译者)