数据结构与算法基础(七)查找


一、查找的基本概念
在那里查找? 什么查找?查找是否成功?查找目的?查找分类?评价查找算法?







二、线性表的查找
1.顺序查找
1.1应用范围
- 顺序表、线性链表 表示的静态查找表
- 元素无序
1.2 数据表的数据元素类型定义

1.3查找值为key的数据元素


改进:增加监视哨,就不用判断越界了


监视哨:将关键字放入0号位置,从后向前查找


时间效率:



2.折半查找(对分查找)





return search bin(st.key,low,mid-1);
2.1 判定树

2.2 平均查找长度


2.3 折半查找性能分析

折半查找 的效率--对数级 O(lg n)
3.分块查找
3.1 (索引查找)

3.2 查找效率



3.3 性能分析


三、树表的查找
动态的查找表—几种特殊的树

1. 二叉排序树
1.1 二叉排序树的定义


递归的定义

注意定义:
必须是根结点的左子树 里的***所有***结点值都小于根结点值;
根结点的右子树 里的***所有***结点值都大于根结点

1.2 性质
中序 LDR 左根右

二叉排序树的性质:中序遍历非空的二叉排序树所得到的数据元素序列是一个按关键字排列的递增有序序列
1.3 查找

1.3.1 二叉排序树的存储结构

1.3.2 查找算法


1.3.3 平均查找长度
查找次数和 结点位置有关
查找过程其实就是走了一条从根到该结点的路径
比较的次数=此时结点所在层数
最多的比较次数=树的深度


平均查找长度 和 树的高度有关,越高,越长


1.4 插入


1.5 生成

1.无序-->有序
2. 插入的结点均为叶子结点,无需移动其他结点
3. 关键字的输入顺序不同,建立的不同二叉排序树

1.6 删除





用右子树的最小值替换要删除的结点
删除78,用81替换78,88替换81

2.平衡二叉树



所有结点 平衡因子都
2.1 调整




把大小 处于中间的放在根结点上
2.1.1 LL型


2.1.2 RR型




2.1.3 LR型

BC在A的左子树,都比A小
C>B



为LR失衡
2.1.4 RL型

A最小
C<B



2.2 例题





四、散列表的查找
1. 基本概念




2. 术语




3. 散列函数的构造方法



3.1 直接定址法

3.2 除留余数法

4. 解决冲突
-开放地址法


4.1 线性探测法



4.2 二次探测法

4.3 伪随机探测法

-链地址法



5. 散列表的查找








本文深入讲解查找算法的基础知识,包括顺序查找、折半查找及分块查找等线性表查找方法,探讨二叉排序树、平衡二叉树等树表查找技术,并介绍散列表的构造与冲突解决策略。
372

被折叠的 条评论
为什么被折叠?



