七大查找算法, 面试考试皆可用
微信公众号:一起学习大数据呀
关注可学习更多奇怪的知识!
前言
本文收集整理常见的七大查找算法,配套 Java 代码和视频短视频教程。
不管你是为了应付考试,还是面试用,希望本文能帮到你,作者水平有限,难免遗漏错误,欢迎读者们留言指正。
算法目录
1、顺序查找
2、二分查找
3、插值查找
4、斐波那契查找
5、树表查找
6、分块查找
7、哈希查找
1、顺序查找
基本思想
这个是最简单的,从头到尾一个个比较(遍历),但效率着实的低。
视频讲解(空降 04:28)
代码实现
2、二分查找
基本思想
二分查找又称折半查找,前提条件:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。
视频讲解
代码实现
3、插值查找
基本思想
基于二分查找算法,将查找点的选择改进为自适应选择,可以提高查找效率。它是二分查找的改进版。
二分查找:
mid = (low+high)/2 , 即 mid = low + 1/2*(high-low);
改进后:
mid = low+(key-a[low]) / (a[high]-a[low])*(high-low);
前提条件:适合表长较大,而关键字分布又比较均匀的查找表。
视频讲解
代码实现
4、斐波那契查找
基本思想
在是二分查找的一种提升算法,通过运用黄金比例的概念在数列中选择查找点进行查找,提高查找效率。注意同时属于一种有序查找算法
视频讲解(空降:05:48)
斐波那契查找
代码实现
5、树表查找(二叉树查找算法)
基本思想
二叉查找树是先对待查找的数据进行生成树,确保树的左分支的值小于右分支的值,然后在就行和每个节点的父节点比较大小,查找最适合的范围。
注意:前提条件要首先创建树。
二叉查找树或者是一棵空树,特点如下:
1)若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
2)若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
3)任意节点的左、右子树也分别为二叉查找树。
视频讲解
代码实现
6、分块查找
基本思想
它是顺序查找的一种改进方法。将n个数据元素 "按块有序" 划分为 m 块(m ≤ n)。每一块中的结点不必有序,但块与块之间必须"按块有序";第 i 块中的每个元素一定比第 i-1 块中的任意元素大(小)。
1) 先选取各块中的最大关键字构成一个索引表;
2) 查找分两个部分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中;然后,在已确定的块中用顺序法进行查找。
视频讲解
代码实现
7、哈希查找
基本思想
如果所有的键都是整数,那么就可以使用一个简单的无序数组来实现:将键作为索引,值即为其对应的值,这样就可以快速访问任意键的值。
注意:
1)用给定的哈希函数构造哈希表;
2)根据选择的冲突处理方法解决地址冲突;
常见的解决冲突的方法:拉链法和线性探测法。
3)在哈希表的基础上执行哈希查找。
视频讲解
代码实现
参考文献
1: 哈希查找(Java)
版权声明: 本文为 InfoQ 作者【我不自豪谁志豪】的原创文章。
原文链接:【http://xie.infoq.cn/article/996cf8899930ae467cc790035】。文章转载请联系作者。
评论