数据结构与算法 第11天 (查找)

news2025/3/14 14:40:05

一、概念

查找表

查找表是一个集合

静态查找表:查找完没变化

动态查找表:进行插入删除操作

主关键字       

类似主键能唯一确定一个元素

平均查找长度ASL

average search length

评价查找算法的指标

查找目的

1、查询某个“特定的”数据元素是否在查找表中;
2、检索某个“特定的”数据元素的各种属性;

3、在查找表中插入一个数据元素;
4、删除查找表中的某个数据元素

二、线性表的查找

1.顺序查找(线性查找)

按照顺序一个一个查找,每次查找要比较两次,一次比较值,一次比较是否越界

可以在数组最前面加一个哨兵,优化

这样每次循环只需要比较一次

特点

优点:算法简单,逻辑次序无要求,且不同存储结构均适用。
缺点:ASL太长,时间效率太低。

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

找一次缩小一半区域        但是要求有序

循环算法

递归算法

判定树

把表中的元素,根据需要查找的次数,化成二叉树

特点

优点:效率比顺序查找高。

缺点:只适用于有序表,且限于顺序存储结构(对线性链表无效)

3.分块查找(索引顺序查找)

把所有元素分块,加索引

性能分析

特点

优点:插入和删除比较容易,无需进行大量移动。
缺点:要增加一个索引表的存储空间并对初始索引表进行排序运算。

适用情况:如果线性表既要快速查找又经常动态变化,则可采用分块查找

三、树表的查找

二叉排序树

定义
左子树小于根节点,右子树大于根节点

中序遍历二叉排序树        是一个递增有序序列

查找值小于根节点,查找左子树

大于根节点,查找右子树

存储

算法

插入

插入值跟根节点比较,小往左走,大往右走

生成二叉树,就是将节点依次插入,该过程就是把一个无序序列变成有序序列

删除

1.删除叶子节点,直接删除就可以

2.要删除的节点只有左子树或者只有右子树,用孩子替换其位置就行

3.删除的节点由左右孩子,

以其中序前趋值替换之(值替换),然后再删除该前趋结点。前趋是左子树中最大的结点。

也可以用其后继替换之,然后再删除该后继结点。后继是右子树中最小的结点。

平衡二叉树

让不平衡的二叉树保持均衡,提高查找效率

定义

首先要是二叉排序树,左右子树高度差小于1

调整方法    

首先降低高度,把中间值变成节点

LL型  

RR型

LR型 

 ​​​​​RL型    

还有B树以后学

四、散列表的查找

又叫哈希表

概念

利用要存数据的某种规律确定存储位置

散列方法

散列函数

散列方法中使用的转换函数

散列表

按照上述方法构成的表

冲突

两个不同的元素,经过散列函数计算,存在一个地址

同义词

具有相同函数值的多个关键字

如何构造好的散列函数?

(a)所选函数尽可能简单,以便提高转换速度,

(b)所选函数对关键码计算出的地址,应在散列地址集中致均匀分布,以减少空间浪费。

构造需要考虑的因素

执行速度(即计算散列函数所需时间);

关键字的长度;:
散列表的大小;
关键字的分布情况;
查找频率。

例子

特点

查找效率很高,但是空间效率低

散列函数构造方法

直接定址法

除留余数法

关键是如何选取被除数



解决冲突方法

开放定址法

探测方法

一旦发生冲突,寻找下一个地址,找到空地址存入

二次探测法

伪随机探测法

链地址法

思想

相同散列地址的记录链成一单链表
m个散列地址就设m个单链表,

然后用一个数组将m个单链表的表头指针

步骤

特点

非同义词不会冲突,无“聚集”现象

链表上结点空间动态申请,更适合子表长不确定的情况

散列表的查找

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

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

相关文章

Ifream实现微前端效果

记得有人曾问过我,老旧的项目内容很多,项目卡,想要改造成类似微前端,领导想要快速,又不想系统重构、而且是不同子系统的协同,要怎么做?对方不想做太大的改造,所以想用ifream的方式动…

图片隐写方法

1、常规隐写 思路: 1、文件头部被破坏;修复文件头部 2、16进制异或(1E) 3、宽高被修改;修复宽高;使用python脚本获取宽高或者使用tweakpng工具获取宽高 4、图片转化成base编码;让你还原图片 5、…

MySQL数据库的基本使用

目录 1.MySQL数据库中的用户管理与登录 1.1用户管理 root用户 其他用户 1.2MySQL数据库的登录 2.使用MySQL的前置知识 2.1SQL语言 SQL语言简介 SQL语句的分类 2.2编码集的认识 字符集 校验集 字符集和校验集的关系 如何查看和修改字符集与校验集 3.MySQL数据库的…

【Pyhton报错已解决】`AttributeError: ‘list‘ object has no attribute ‘text‘`

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引言:一、问题描述:1.1 报错示例:1.2 报错分析:1.3 解决思路&#xff…

2024 年,数据中台引领企业走向何方?

2024 年,数据中台引领企业走向何方? 前言数据中台引领企业走向何方 前言 在当今数字化时代,数据已成为企业发展的核心资产。随着企业业务的不断扩展和数据量的急剧增长,如何有效地管理和利用数据,成为企业面临的重要挑…

计算机论文七种流程图画法,详细教程来袭!(导师都说我图画的标准)

我 | 在这里 ⭐ 全栈开发攻城狮、全网10W粉丝、2022博客之星后端领域Top1、专家博主。 🎓擅长 指导毕设 | 论文指导 | 系统开发 | 毕业答辩 | 系统讲解等。已指导60位同学顺利毕业 ✈️个人公众号:热爱技术的小郑。回复 Java全套视频教程 或 前端全套视频…

Linux学习~树莓派gpio控制(1)

git clone git://git.drogon.net/wiringPi cd wiringPi ./build build 脚本会帮助你编译和安装 wiringPi。 方案B——直接下载 tar xfz wiringPi-xx.tar.gz cd wiringPi-xx ./build wiringPi 包括一套 gpio 命令,使用 gpio 命令可以控制树莓派上的各种接口&…

【物理密度计工作原理图】密度大小与密度计浸没深度关系图

密度大小与密度计浸没深度关系图 绘制图像的好处: 直观展示数据:图形可以直观地展示数据之间的关系,使得理解和分析数据变得更加容易。 便于比较:通过图形可以快速比较不同液体密度下密度计的浸没深度变化。 科学验证&#xff…

我的私人助理 | 办公小浣熊

我的私人助理 | 办公小浣熊 办公小浣熊上手实操业务场景分析一(数据处理)demo 本地数据库操作业务场景分析二(数据处理)Excel 本地文件操作业务场景分析三(数据可视化)业务场景分析四(趋势判断&…

【B题第二套完整论文已出】2024数模国赛B题第二套完整论文+可运行代码参考(无偿分享)

2024数模国赛B题完整论文 摘要: 随着电子产品制造业的快速发展,质量控制与成本优化问题成为生产过程中亟待解决的核心挑战。为应对生产环节中的质量不确定性及成本控制需求,本文结合抽样检测理论和成本效益分析,通过构建数学模型…

Leetcode面试经典150题-128.最长连续序列-递归版本另解

之前写过一篇这个题的,但是可能代码比较复杂,这回来个简洁版的,这个是递归版本 可以看看之前的版本,两个版本面试用哪个都保过 解法都在代码里,不懂就留言或者私信 class Solution {/**对于之前的解法,我…

【vulhub】thinkphp5 2-rce 5.0.23-rce 5-rce 漏洞复现

2-rec 1.启动环境 cd /.../vulhub/thinkphp/2-rce # cd进入2-rce靶场文件环境下 docker-compose up -d # docker-compose启动靶场 docker ps -a # 查看开启的靶场信息2.访问192.168.146.136:8080网页 3.构造payload http://192.168.146.136:80…

Openharmony 下载到rk3568实现横屏

前言: Openharmony 源码版本4.1 release 板子:rk3568 1.修改“abilities”中的“orientation”实现横竖屏 entyr->src->module.json5文件里面添加 "orientation": "landscape", 2.修改系统源码属性实现横竖屏切换 通过这…

IDEA取消自动选择光标所在行

今天出现了一个怪事: 当我使用IDEA编写代码的时候,单击下一行或者上一行的时候,莫名其妙它会自己选中一行,导致我要么是回车代码直接没了,要么是代码直接给我搞错位了,还得按ctrlz返回,十分的恶…

【C++】:模板初阶—函数模板|类模板

✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山岗! 💫 欢迎来到我的学习笔记! 本文参考博客:一同感受C模版的所带来的魅力 一、泛型编程思想 首先…

代码随想录算法训练营第五十一天 | 99.岛屿数量-深搜 ,99.岛屿数量-广搜 ,100.岛屿的最大面积

目录 99.岛屿数量-深搜 思路 方法一: 深度优先搜索-先判断 方法二:深度优先搜索-终止条件 心得收获 99.岛屿数量-广搜 思路 广度优先搜索 方法一:广度优先搜索 100.岛屿的最大面积 思路 深度优先搜索 广度优先搜索 方法一&am…

c语言——用一维数组输出杨辉三角形

一.代码 #include <stdio.h> int Num[100]; int Hang; int Lie; int a; int Flag; int main() {Lie 1;Hang 1;a 0;while (1) {//列1为1if (Lie 1) {Num[1] 1;Lie;}//数据存到数组里面while (Hang > Lie && Hang ! 2) { if (Hang!Lie) {Flag Num[Lie] …

解锁Web3.0——Scaffold-eth打造以太坊DApp的终极指南

&#x1f680;本系列文章为个人学习笔记&#xff0c;目的是巩固知识并记录我的学习过程及理解。文笔和排版可能拙劣&#xff0c;望见谅。 目录 前言 一、快速部署 1、前期准备&#xff1a; 2、安装项目&#xff1a; ​ 二、配置部署运行环境 1、初始化本地链&#xff1a;…

Qt-QWidget的windowOpacity属性(16)

目录 描述 相关API 使用 设置槽函数 两个问题 第一个问题&#xff1a;浮点数精确度问题 第二个问题&#xff1a;防御性编程 描述 这个属性就是用来设置窗口的不透明度的 相关API 使用 我们创建一个新的项目来进行测试 如下&#xff0c;我们再把这两个按钮设置一下名…

改进YOLOv8系列:加入多尺度卷积注意力MSCA注意力: ,即插即用,助力小目标检测

改进YOLOv8系列:加入非对称卷积块ACNet,加强CNN 的内核骨架 论文研究概括MSCA模块介绍需要修改的代码MSCA代码创建yaml文件测试是否创建成功本文提供了改进 YOLOv8注意力系列包含不同的注意力机制以及多种加入方式,在本文中具有完整的代码和包含多种更有效加入YOLOv8中的ya…