one 查找概念 线性结构
大纲总体上就是一个基本概念和五种查找方法
查找表分为静态查找表和动态查找表
-静态查找表 只涉及查找操作(顺序查找 折半查找 散列查找)
-动态查找表 动态插入或删除(二叉排序树查找 散列查找)
对于关键概念 关键字和平均查找长度(假设总左往右一一查询)
例如找关键字为4 需要比较 10 2 4 三次
顺序查找【线性查找】(顺序表和链表)
一般线性表的顺序查找(无序)
有序线性表的顺序查找
随后再详细写解平均查找长度的算法
还有注意前提是表中每个元素的查找概率都一样
看一个查找概率不同的题目
对长度为3的顺序表进行查找 若查找第一个元素的概率为1/2 查找第二个元素的概率为1/3 第三个元素概率1/6 则查找任意一个元素的平均查找长度为多少
11/2+21/3+3*1/6=5/3
折半查找【二分查找】(有序顺序表)
如果C编程或Java编程都会涉及到折半查找 效率高 时间复杂度O(log2为底n)
可以观察到找中间结点的时候 采取的是向下取整 注意随后的都要采取向下取整
- 查找成功的查找长度为从根节点到目的结点的路径上的结点数
- 查找失败的查找长度为从根节点到对应失败结点的父结点的路径上的结点数
- 特性每个结点值均大于左子结点值其均小于右子节点值
- 折半查找的判别树是一颗平衡二叉树(左子树小于右子树 左右子树高度之差不超过1)
- 判别树高为=log2为底(n+1)向上取整
下面几点好理解 最重要的就是前两条
具有12个关键字的有序表中 每个关键字的查找概率相同 折半查找算法查找成功的平均查找长度 折半查找失败的平均查找长度
最直接易理解的方法就是画出该图
easy题 有序表{b,c,d,e,f,g,q,r,s,t}二分查找关键字b 进行比较的关键字依次是
还有一个坑 简单上来就框框一顿做 首先给你的元素并非有序排列
对于折半查找必须是有序顺序表
所有你要先有序排列后再进行对应查找
已知一个长度为16的顺序表 其元素按关键字有序排列 采用折半查找法查找一个不存在的元素 比较的次数至少多少次 至多多少次
分块查找【索引顺序查找】
- 块内元素无序 块间元素有序
- 索引表中的每个元素含有各块的最大关键字和各块中的第一个元素的地址
- 查找步骤两步 一索引表中确定待查记录所在的块 二块内顺序查找
- 当s=√n 平均查找长度最小值√n+1
基本是一些基本概念的考察简单看道题
为了提高查找效率 对有65025个元素的有序顺序表建立索引顺序结构 最好情况下查找到表中已有元素最多需要执行多少次关键字比较
two 树形结构(二叉排序树)
二叉排序树目的是为了提高查找插入删除关键字的速度
2020统考真题 给定关键字输入序列中不能生成该二叉排序树的是
因为我这考试不注重考察过多所以至此打住
three 散列表(哈希表)
- 散列表 关键字和存储地址之间的一种直接映射关系
- 散列函数 一个把查找表中的关键字映射成该关键字对应的地址的函数
- 冲突 不同关键字映射到同一地址
- 同义词 发生冲突的不同关键字
散列函数的构造方法
- 直接定址法
- 除留余数法
- 数字分析法
- 平方取中法
处理冲突的方法
- 开放定址法
- 线性探测法(线性探查 再散列)
- 平方探测法(二次探测法)
- 双散列法
- 伪随机序列法
- 拉链法
不一一介绍而是用考题来看重点的方法
假定K个关键字互为同义词 线性探测法把K个关键字填入散列表 至少要进行多少次探测
都有冲突 只有第一个放进去后依次往后 K(k+1)/2
散列表长m=14 散列函数H(key)=key%11 表中四个结点H(15)=4 H(38)=5 H(61)=6 H(84)=7 采用线性探测法处理冲突 关键字49的结点地址是
现长度17 初始为空的散列表 散列函数H(key)=key%17 平方探测法解决冲突 关键字序列 6 22 7 26 9 23依次插入 则关键字23存放在散列表中的位置是
2019统考真题 长度11初始为空的散列表 散列函数H(key)=key%7 采用线性探测再散列法解决冲突 将关键字序列 87 40 30 6 11 22 98 20依次插入 查找失败的平均长度
2023统考真题 长度为5初始为空的散列表 散列函数H(k)=(k+4)%5 线性探查再散列法解决冲突 关键字序列 2022 12 25依次插入 删除关键字25 查找失败的平均查找长度为
关于散列表查找效率 装填因子参考蚊香一眼
over!!!
标签:折半,结点,---,关键字,查找,66,长度,散列,ds From: https://www.cnblogs.com/gaodiyuanjin/p/18504021