经典查找算法
0、顺序查找
这个不用多说了,一个个比较过去吧。
1、二分查找(Binary search)
二分查找也叫折半查找,可以说是最实用的查找算法之一,前提是查找对象是经过排序的序列。原理也十分简单,每次chec中间的值,如果比我要找的值大,那我就往前找,比我的key小,我就往后找,这样每次折半查找下来,复杂度可以达到 O(logN)。举个栗子,对数列 [1,2,4,5,7,8],key=7,先check4,比7小,那就在 [5,7,8]里找,中值7刚好是,返回index,如果没找到就返回-1。下面是Python的代码实现。
def binSearch(A,lo,hi,key):
if lo > hi:
return -1
mid = lo + (hi - lo) // 2
if A[mid] == key:
return mid
else:
if A[mid] > key:
return binSearch(A,lo,mid-1,key)
else:
return binSearch(A,mid+1,hi,key)
2、哈希查找(Hash map)
我们都知道如果提前存贮了每个值对应的index,就可以一步到位查到这个值吗,类似于查字典的方式,hashmap就是这样,复杂度O(1)。
3、二叉查找树(Binary Search Tree)
二叉查找数是在二叉树的基础上满足:左节点 < 根节点 < 右节点。这样我们就可以通过中序遍历,以一种类似折半的方式去查找key,复杂度也是O(logN)。另外,二叉查找树的平衡性对搜索也有很大影响,最差会变成O(N)。
4、平衡二叉树
AVL树,2-3树,红黑树……使得二叉搜索更加顺利。