什么是搜索
搜索是在一个元素集合中,找到特定的某个元素的过程
搜索相关的算法和数据结构
1.遍历搜索
插入时间复杂度(顺序表): O(N)
删除时间复杂度(顺序表): O(N)
查找时间复杂度: O(N)
2.二分查找(折半查找)
前提条件:元素有序的、支持随机访问的线性结构中
插入时间复杂度(顺序表): O(N)
删除时间复杂度(顺序表): O(N)
查找时间复杂度: O(logN)
3.哈希表
插入时间复杂度: O(1)
删除时间复杂度: O(1)
查找时间复杂度: O(1)
4.搜索树
插入时间复杂度: O(logN)
删除时间复杂度: O(logN)
查找时间复杂度: O(logN)
各自的优缺点及适用场景
遍历查找、二分查找由于其插入\删除时间复杂度较高,所以被分类为"静态的查找算法"
哈希表、搜索树比较适合"动态的查找算法" 集合中的元素经常变更
如:新华字典适用与静态算法,而淘宝购物用户购物车适用于动态算法
遍历查找 vs 二分查找
根据n的大小来决定怎么选用,只要n的大小不远远的大于logN,就选用遍历查找
例:数组中有100个元素,选用遍历查找
哈希表vs平衡搜索树
hash表实现简单、速度快、更容易实现线程安全
平衡搜索树,它维护的key是有序的,不会出现极端情况(如hash冲突)