数据结构-查找

news2024/9/20 20:31:28

数据结构-查找

  • 1 知识框架
  • 2 顺序查找和折半查找
    • 2.1 顺序查找
    • 2.2折半查找
    • 2.3 分块查找
  • 3 树型查找
    • 3.1 二叉排序树
    • 3.2 平衡二叉树
    • 3.3 B树和B+树
      • 3.3.1 B树
      • 3.3.2 B+树
  • 4 散列表
    • 4.1 构造方法
    • 4.2 处理冲突的办法
    • 4.3性能分析

1 知识框架

在这里插入图片描述

2 顺序查找和折半查找

2.1 顺序查找

1.一般线性表的顺序查找
优点:数据存储没有要求,是否有序没有要求
缺点:当n比较大时,平均查找长度较大,效率低。
2.有序表的顺序查找
如果是有序的,不用比较完全表就能返回查找失败信息,能有效降低查找失败的平均查找长度。
例如数据升序排列,第k个数小于key,而k+1个数大于key,即可知道表中没有key元素,查找失败。

2.2折半查找

又称二分查找,只适用有序的顺序表。

int low = 0,high = array,length() - 1,mid;
while(low <= high)
{
	mid = (low + high) / 2;
	if(array[mid] == key)
		return mid;   //  返回查找成功的位置
	else if(array[mid] < key)
		{
			low = mid + 1;
		}
	else 
	{
		high = mid - 1;
	}
}
return -1;   // 查找失败

折半查找过程可用二叉树描述,称判定树。

在这里插入图片描述

在这里插入图片描述

2.3 分块查找

1.把查找表分为若干块,块内无序,块间要就前一块内最大值小于后一块内的所有值
2.构建索引表,含每个块的最大值和第一个元素的地址
在这里插入图片描述
在这里插入图片描述

3 树型查找

3.1 二叉排序树

1.二叉排序树的查找

while(T != NULL&& T -> data != key)
{
	if(key < T -> data)T = T -> lchild;
	else T = T -> rchild;
}

2.二叉排序树的插入

int insert(Tree &T,int key)
{
	if(T == NULL)
		{
			T = new BSTNode;
			T -> data = key;
			T ->lchild = T -> rchild = NULL;
			return 1;   // 插入成功
		}
	else if(k == T -> data) return -1;   //存在相同元素,插入失败
	else if(key < T ->data)
		return insert(T -> lchild,key);
	else if(key > T -> data)
		return insert(T -> rchild,key);
}

3.二叉树的删除
a.叶结点直接删除
b.删除结点有一颗子树,子树直接替代删除结点
c.删除结点有两颗子树,让删除的结点的直接后继或者前驱替代(中序遍历)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.2 平衡二叉树

1.LL
(a)是插入结点前
(b) 插入结点在B结点的左子树
(c)将B右旋
在这里插入图片描述

2.RR
与LL一样
在这里插入图片描述

3.LR
在B结点的右子树插入结点导致不平衡
将B左旋A右旋
在这里插入图片描述
4.RL
与LR一样
在这里插入图片描述

3.3 B树和B+树

3.3.1 B树

定义:
m阶B树是所有结点的平衡因子均等于0的m路平衡查找树
特点
1.每个结点最多m颗子树
2.关键字数范围m/2(向上取整) -1~ m-1
3.所以叶结点在同一层,且不存在,即查找失败的点
在这里插入图片描述

3.3.2 B+树

定义:所有分支结点中只包含子结点的一个最大关键字和指向子结点的指针
在这里插入图片描述

在这里插入图片描述

4 散列表

4.1 构造方法

1.直接定址法

给定函数:

H(key) = key || H(key) = a * key + b

优点:计算简单,不会产生冲突。适合关键字分布连续的。
如果分布不连续,产生的空位较多,会造成空间浪费的情况。

2.除留余数法

H(key) = key % p

关键在选p上,使关键字通过函数转换后映射在不同的地址上,尽可能减少冲突。

3.数字分析法
关键字为r进制数,选取数码分布较为均匀的若干位作为散列地址。
这种方法适合于已知的关键字集合。

4.平方取中法
取关键字的平方值的中间几位作为散列地址。
这种方法适用于关键字的每位取值都不够均匀或者小于散列地址所需的位数。

4.2 处理冲突的办法

1.开放地址法
发生冲突时,用Hi代表下一个找到的地址,通过下面的公式进行探测,知道Hi的地址不再冲突。

Hi = (H(key) + di) % m      // H(key) 为散列函数,di为增长序列,m表示线性表长

di的取法一共有四种

a.线性探测法
	di = 0,1,2,3,......,k   冲突发生时,顺序查看下一个地址是否空闲。
	缺点:
		可能导致第i个散列地址的元素存入第i + 1个地址,本该存在i + 1的存入i  +  2.。。。。。。从而造成元素堆积,大大降低元素查找效率。			
b.平方探测法
	di = 1²,-1²,2²,-2²,......,k²,-k²
	优点:一种较好的处理冲突的办法,可以避免堆积问题。
	缺点:不能探测到散列表上的所有单元,但至少能探测到一半以上。
c.双散列法 		
	di = Hash(key)
d.伪随机序列法
	di = 伪随机数。

2.拉链法
将同义词存在同一个线性链表中,如图所示:
在这里插入图片描述

4.3性能分析

给定函数 H(key) = key % 13
关键字序列为:19,14,23,1,68,20,84,27,55,11,10,79
构造散列表得:
冲突使用线性探测解决
在这里插入图片描述
如果查找1,第一次 H1 = 1 % 13 = 1,1号位是14,则H2 = (1 + 1) % 13 = 2,L[2] = 1,则查找成功,得知查找元素1的次数是2
查找各关键字比较次数:
在这里插入图片描述
则平均查找长度ASL为:
ASL = (1 * 6 + 2 + 3 * 3 + 4 + 9) / 12 = 2.5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/715172.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue 基础入门

目录 vue 简介 vue 的特性 数据驱动视图 双向数据绑定 MVVM vue 的基本使用 vue 的调试工具 vue 的指令 1、内容渲染指令 2、属性绑定指令 3、事件绑定 4、双向绑定指令 v-model 5、 条件渲染指令 6 、列表渲染指令 vue过滤器 定义过滤器基本使用 私有过滤器和全…

web安全php基础_phpstudy pro安装

phpstudy pro是什么 phpstudy是一个php运行环境的集成包&#xff0c;用户不需要去配置运行环境&#xff0c;就可以使用&#xff0c;phpstudy不仅是一款比较好用的php调试环境工具&#xff0c;并且还包括了开发工具和常用手册&#xff0c;对于新手是有很大帮助的 windows下ph…

基于LLAMA-7B的lora中文指令微调

目录 1. 选用工程2. 中文llama-7b预训练模型下载3. 数据准备4. 开始指令微调5. 模型测试 前言&#xff1a; 系统&#xff1a;ubuntu18.04显卡&#xff1a;GTX3090 - 24G &#xff08;惨呀&#xff0c;上次还是A100&#xff0c;现在只有3090了~&#xff09; &#xff08;本文旨在…

I.MX RT1170之FlexSPI(3):NOR Flash手册分析和参数配置详解

在上一节中&#xff0c;我们分析了FlexSPI的相关参数&#xff1a;LUT表格的组成和FlexSPI结构体配置&#xff0c;这一节就以WINBOND的W25Q256JV NOR Flash为例&#xff0c;看一下如何根据这个NOR Flash的数据手册配置FlexSPI接口。 文章目录 1 SDK代码2 NOR Flash配置流程2.1 时…

java.lang.IllegalArgumentException: 找到多个名为spring_web的片段。这是不合法的相对排序。

问题 java.lang.IllegalArgumentException: 找到多个名为spring_web的片段。这是不合法的相对排序。 详细问题 笔者使用ServletJSP技术框架进行项目开发&#xff0c;对于项目进行国际化&#xff08;即i18n&#xff0c;实现中英文页面转换&#xff09;&#xff0c;需要引入 下…

【C语言初阶(9)】函数2

文章目录 1. 函数的嵌套调用和链式访问1.1 嵌套调用1.2 链式访问 2. 函数的声明和定义2.1 函数定义2.2 函数声明2.3 函数的实际应用 3. 函数递归3.1 什么是递归&#xff1f;3.2 递归使用条件3.3 递归的案例3.4 递归的优缺点 4. 递归练习题 1. 函数的嵌套调用和链式访问 函数和函…

悟道·天鹰 Aquila + 天秤 FlagEval,打造大模型能力与评测标准双标杆

为推动大模型在产业落地和技术创新&#xff0c;智源研究院发布“开源商用许可语言大模型系列开放评测平台” 2 大重磅成果&#xff0c;打造“大模型进化流水线”&#xff0c;持续迭代、持续开源开放。 开源商用许可语言大模型系列 悟道天鹰&#xff08;Aquila&#xff09; 语…

教师资格证考试(高中数学)-考什么

目录 考什么 及格线 科一-综合素质 ​编辑 科二-教育知识与能力 科三-学科知识与教学能力(数学) 题型 考什么 及格线 大家要明确3个分数&#xff1a; ✅卷面分数&#xff1a;满分为150分&#xff0c;也就是大家平时拿到的试卷及真题卷面分数。 ✅报告分数&#xff1a;…

React 之 组件化开发

本文主讲解类组件&#xff0c;函数组件会在后续文章中学习 一、组件化开发 1. 概念 组件化是一种分而治之的思想&#xff1a; 如果将一个页面中所有的处理逻辑放在一起&#xff0c;处理起来会变得非常复杂&#xff0c;不利于后续的管理以及扩展 但如果讲一个页面拆分成一个个小…

Web安全-AntSword(中国蚁剑)Webshell管理工具使用

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 工具下载地址02 工具介绍03 使用案例04 参考资料 01 工具下载地址 https://github.com/AntSwordProject/蚂剑工具的下载分为两个部分&#xff0c;一个是项目核心源码antSword&#xff0c;另一个是…

【算法】树形DP ①(树的直径)

文章目录 知识准备例题543. 二叉树的直径124. 二叉树中的最大路径和2246. 相邻字符不同的最长路径 相关题目练习687. 最长同值路径 https://leetcode.cn/problems/longest-univalue-path/solution/shi-pin-che-di-zhang-wo-zhi-jing-dpcong-524j4/1617. 统计子树中城市之间最大…

测试的流程,jira工具的使用

目录&#xff1a; 测试流程价值与体系测试计划业务架构分析思路bug基本概念bug处理流程测试总结业务架构分析工具plantuml测试流程管理jira系统-测试流程定制测试流程管理 jira 系统-Bug管理流程定制 1.测试流程价值与体系 软件测试流程 完成软件测试工作的必要步骤 测试流…

用图计算解密大脑,蚂蚁技术研究院与复旦联手启动类脑研究

大脑为什么会产生意识&#xff1f;我们为什么会失眠&#xff1f;帕金森、阿尔兹海默等神经性疾病如何有效治疗&#xff1f;这一切谜题的背后都绕不开脑科学。可以说脑科学问题是人类面临的基础科学问题之一&#xff0c;是我们解密人类自身的“终极疆域”。 我们的大脑由大约86…

第十二章线程池

文章目录 享元模式手写数据库连接池 为什么需要线程池自定义线程池自定义拒绝策略接口自定义任务队列自定义线程池 JDK中的线程池常用的线程池的类和接口的之间的关系线程池状态构造方法线程池的工作流程拒绝策略 ExecuctorsnewFixedThreadPoolnewCachedThreadPoolnewSingleThr…

【Matlab】智能优化算法_平衡优化器算法EO

【Matlab】智能优化算法_平衡优化器算法EO 1.背景介绍2.数学模型2.1 初始化和功能评估2.2 平衡池和候选者&#xff08;Ceq&#xff09;2.3 指数项&#xff08;F&#xff09;2.3 生成率&#xff08;G&#xff09; 3.文件结构4.伪代码5.详细代码及注释5.1 EO.m5.2 Get_Functions_…

Linux基础服务7——lamp架构

文章目录 一、基本了解二、单机部署LAMP2.1 安装httpd2.2 安装mysql2.3 安装php环境2.4 配置apache 三、分离部署四、脚本单机部署 一、基本了解 LAMP架构介绍&#xff1a; lamp是由LinuxApacheMysql/MariaDBPhp/Perl/Python的一组动态网站或者服务器的开源软件。LAMP指Linux&a…

多元回归预测 | Matlab基于深度置信网络(DBN)回归预测,matlab代码回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab多元回归预测 | Matlab基于深度置信网络(DBN)回归预测,matlab代码回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分…

原来工作18年的企业大佬都是这样自定义企业微信扫码登录的样式

前言 由于企业微信扫码登录都是固定样式和模板&#xff0c;每个公司在前期使用的时候可能会使用原样的模版&#xff0c;随着业务场景的复杂及细分场景优化&#xff0c;这个固定样式的模版满足不了企业的需求&#xff0c;所以需要对模版进行改造&#xff0c;使它更加贴合企业业务…

【elementplus】解决el-table开启show-overflow-tooltip后,tooltip的显示会被表格边框遮挡的问题

如图所示&#xff1a; 原因&#xff1a; 1. el-table没有设置高度&#xff1b;2.就是被遮住了 解决&#xff1a; 方法一&#xff1a;给el-table设置高度 方法二: .el-table {overflow: visible !important;}如果不想给el-table设置高度&#xff0c;就直接使用方法二解决即可

Pycharm使用Anoconda配置虚拟环境

目录 1.Anoconda的介绍 2.Anaconda的作用 3.Anaconda的安装 4.Anaconda的配置 4.1添加镜像源 4.2创建、使用并切换虚拟环境 5.pycharm的集成 1.Anoconda的介绍 Anaconda是一个可用于科学计算的 Python 发行版&#xff0c;可以便捷获取和管理包&#xff0c;同时对环境进行…