-
查找表:用于查找的数据集合
-
对查找表的四种操作:
-
查询某特定元素是否在查找表中
-
检索满足条件的某个特定的数据元素的各种属性
-
在查找表中插入一个数据元素
-
删除一个数据元素
-
-
静态查找表:没有插入,删除操作的查找表。查找方法:顺序查找、折半查找、散列查找
-
动态查找表方法:二叉排序树的查找(二叉平衡树、B树)、散列查找
-
平均查找长度:
,n是查找表的长度。P_{i}是查找第i个元素的概率,C_{i}是找到第i个数据所需进行的比较次数,是查找表的长度。是查找第个元素的概率,是找到第个数据所需进行的比较次数
-
顺序查找:
-
一般线性表的顺序查找
-
缺点:当n较大时,平均查找长度较大,效率低
优点:对数据元素存储没有要求
-
有序表的顺序查找
-
-
折半查找:
-
折半查找过程可以用判定树表示。圆形结点是一个记录,值为关键字值。叶节点是方形,表示查找不成功的情况。查找成功时查找长度是根节点到目的结点路径上的结点数;不成功是根节点到失败节点父节点的路径上的结点数。
-
折半查找法查找给定值的比较次数最多不会超过树的高度。
-
折半查找时间复杂度O(log2n)
-
折半查找只适合线性表的顺序存储结构,不适合链式存储,且要求元素按关键字有序
-
-
-
分块查找:
-
查找表分若干子块,块内元素可以无序,但块之间有序。第一个块中关键字小于第二块中所有记录关键字,以此类推。再建立一个索引表,索引表中每个元素含有各块最大关键字和各块第一个元素的地址,索引表按关键字有序排列。
-
-
B树
-
所有结点的孩子结点数的最大值称B树的阶m
-
若根节点不是终端结点,至少2棵子树,1个关键字
-
除根节点外的所有非叶节点至少 天花板(m/2)棵子树,天花板(m/2)-1 个关键字
-
B树是所有结点的平衡因子均等于0的多路查找树
-
一棵包含n个关键字,高度为h,阶数为m的B树:
-
B树插入后小于m则直接插入,插入后大于m-1,则需分裂。(最多m-1——
-
B树删除用到最少天花板(m/2)-1个关键字
-
B树不支持顺序查找
-
每个结点关键字个数范围:
-
B树叶节点个数对应查找失败的情况,n个关键字,失败的可能性n+1种
-
-
B+树
-
每个分支最多m棵子树
-
非根叶节点至少两棵子树,其他至少天花板(m/2)棵子树。
-
结点的子树个数与关键字个数相等
-
B+树支持顺序查找
-
叶节点包含全部关键字及指向相应记录的指针,叶节点中将关键字按大小顺序排列。分支结点只包含它的各个子节点中关键字的最大值和指针。
-
每个结点关键字个数范围:
-
B+树非叶节点不含有关键字对应记录的存储地址
-
B+树中,无论查找成功与否,每次查找都是一条从根节点到叶节点的路径
-
-
散列表
-
散列函数把查找表中的关键字映射成该关键字对应的地址的函数
-
冲突:两个或两个以上的不同关键字映射到同一地址
-
同义词:发生碰撞的关键词
-
散列表:根据关键字直接进行访问的数据结构,查找时间复杂度O(1),与表中元素个数无关
-
常用散列函数:
-
直接定址法
-
除留余数法
-
数字分析法
-
平方取中法
-
折叠法
-
-
处理冲突的方法:
-
开放定址法
-
线性探测法
-
平方探测法
-
再散列法
-
伪随机序列法
-
-
拉链法
-
-
散列表查找效率取决于3个因素:散列函数、处理冲突的方法、装填因子
-
装填因子:
,表中记录树n、散列表长度m
-
散列表的平均查找长度依赖于装填因子α,不直接依赖m或n。α越大,表越满
-
数据结构(6) -- 查找
最新推荐文章于 2022-04-18 18:51:50 发布