常用查找算法总结

静态查找和动态查找

这是针对查找表而言的
动态表指查找表中有删除和插入操作的表

无序查找和有序查找

无序查找:被查找数列有序无序均可
有序查找:被查找数列必须为有序数列

平均查找长度(Average Search Length,ASL)

顺序查找

适用于存储结构为顺序存储或链接存储、数据量大不的线性表
时间复杂度:O(n)

二分查找

也称为折半查找,这是一种有序查找,不断和中间节点比较
适用于不经常变动而查找频繁的有序列表
mid = (low+high)/2
mid=low+1/2*(high-low)
时间复杂度:O(logn)

插值查找

它是对二分查找的改进,也是一种有序查找,根据关键字在整个有序表中所处的位置,让mid的值更靠近目标位置,间接减少比较次数。
适用于数据量较大,而关键字分布又比较均匀的查找表
mid=low+(value-a[low])/(a[high]-a[low])*(high-low)
时间复杂度:O(logn)

斐波那契查找

随着斐波那契数列的递增,前后两个数的比值会越来越接近0.618,即黄金比例(黄金分割)
它也是对二分查找的改进,根据斐波那契数列的特点对有序表进行分割
如果一个有序表的元素个数n正好是(某个斐波那契数-1)时,才能用该方法。

树表查找

需要先将数组重组成二叉查找树,再从根节点开始查找
时间复杂度:O(logn)

分块查找

将n个数据元素”按块有序”划分为m块(m ≤ n),每一块中的元素不必有序,但块与块之间必须”按块有序”;
即第1块中任一元素都必须小于第2块中任一元素,以此类推
先选取各块中的最大关键字构成一个索引表
再对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中
最后在已确定的块中用顺序法查找

哈希查找

利用哈希表进行查找,如果分布均匀没有冲突,时间复杂度为O(1)
如果发生冲突,则按冲突解决办法找到下一个地址并比较是否相等,如果相等则查找结束
否则继续寻找下一个地址直至找到或者查找结束

参考资料

[Data Structure & Algorithm] 七大查找算法

常用查找算法总结

猜你喜欢

转载自blog.csdn.net/recordGrowth/article/details/80857143
今日推荐