查找算法总结
Posted sunsfan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找算法总结相关的知识,希望对你有一定的参考价值。
各查找算法基本思想:1.顺序查找:
基本思想:
遍历整个列表,逐个进行记录的关键字与给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录。如果直到最后一个记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找失败。
2.二分查找(折半查找):
基本思想:
在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到找到为止。
从二分查找的定义我们可以看出,使用二分查找有两个前提条件:
1,待查找的列表必须有序。
2,必须使用线性表的顺序存储结构来存储数据。
二分查找(有序)的时间复杂度为O(LogN)。
3.索引查找(分块查找):
基本思想:
首先查找索引表,可用二分查找或顺序查找,然后在确定的块中进行顺序查找。
分块查找的时间复杂度为O(√n)。
在实现索引查找算法前需要弄清楚以下三个术语。
1,主表。即要查找的对象。
2,索引项。一般我们会将主表分成几个子表,每个子表建立一个索引,这个索引就叫索引项。
3,索引表。即索引项的集合。
同时,索引项包括以下三点。
1,index,即索引指向主表的关键字。
2,start,即index在主表中的位置。
3,length,即子表的区间长度。
4.二叉排序树:
特点:
1,若根节点有左子树,则左子树的所有节点都比根节点小。
2,若根节点有右子树,则右子树的所有节点都比根节点大。
3,根节点的左,右子树也分别为二叉排序树。
插入和查找从根节点开始比较,比根节点关键字大就去右子树递归,比根节点关键字小就去左子树递归。
删除分三种:删除叶子节点,直接删除,不破坏树的结构;
删除单孩子节点,删除后需要将它的孩子节点与它的父节点相连;
删除有左右孩子的节点,利用二叉树的中序遍历,删除后把右节点的左子树的最左孩子节点作为新的父节点。
5.哈希查找:
哈希技术是在记录的存储位置和记录的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。查找时,根据这个确定的对应关系找到给定值的映射f(key),若查找集合中存在这个记录,则必定在f(key)的位置上。哈希技术既是一种存储方法,也是一种查找方法。
各查找算法对比:
1.顺序查找,平均查找长度为:(n+1)/2
2.有序表的查找之折半查找:前提必须是有序表,性能只有在均匀分布的时候才是最优的。
平均查找长度:log2(n+1)-1
当有概率涉及的查找中,将概率高的放在根节点上可以加快查找速度。
3.索引表:建立两层表,第一层采用顺序记录,第二层分块随机排放,查找时第一层使用折半查找,第二层使用顺序查找。
平均查找长度:log2(n/s+1)+(s+1)/2,其中s为每个块内固定的元素个数,每组都能选出一个最大的。
4. 二叉排序树查找:通过一系列的查找和插入过程形成的树。之所以叫做排序树,因为按照中序遍历可得一个有序的序列。
二叉排序树的删除是一个性能瓶颈问题。
树排序的最坏情况是单支树。这时的查找长度是(n+1)/2。和顺序查找相同。
在随机情况下,二叉排序树的平均查找长度是和log2n等数量级的。
平衡二叉树:用来平衡二叉排序树的,当二叉排序树的左右子树的差值的绝对值大于1是就需要平衡。
平衡的二叉树才是真正的log2n数量级的!
5.B-树和B+树
B-树常用于文件系统中。
B+树:区别于B-树,有n棵子树的节点中含有n个关键字。叶子节点按序自动排列。B+树可以按序查找也可以从根结点开始随机查找。
以上是关于查找算法总结的主要内容,如果未能解决你的问题,请参考以下文章
算法总结:左神—利用二分查找思想:完全二叉树节点数,求一个整数k的N次方