算法【线性表的查找-顺序查找】

线性表的查找-顺序查找

    • 顺序查找
      • 基本思想
      • 应用范围
      • 顺序表的表示
        • 数据元素类型定义
        • 查找算法示例分析
      • 时间效率分析
      • 顺序查找的特点
      • 如何提高查找效率

顺序查找

基本思想

在表的多种结构定义方式中,线性表是最简单的一种。而顺序查找是线性表查找中最简单的一种。
顺序查找的基本思想:
从表的一端开始,顺序扫描线性表,将依次扫描到的结点关键字和给定的K值相比较,若当前扫描到的结点关键字与K相等,则查找成功,若扫描结束后,仍未找到关键字等于 K的结点,则查找失败。

应用范围

顺序表或者线性链式表表示的静态查找表;
表内元素之间无序;

顺序表的表示

数据元素类型定义
typedef struct{keyType key; //关键字域...         //其他域
}ElemType;typedef struct{//顺序表结构类型定义ElemType *R; //表地址int length;   //表长
}SSTable;   //Sequential Search Table
SStable ST;  //定义顺序表ST
查找算法示例分析

在顺序表ST中查找值为key的数据元素
从最后一个元素开始查找:
在这里插入图片描述
其他形式:
在这里插入图片描述
在这里插入图片描述
改进:
把待查找的关键字key存入表头(“哨兵”,“监视哨”)从后往前逐个比较,可以免去查找过程中每一步都要检测是否查找完毕,加快查找速度。
在这里插入图片描述

时间效率分析

在这里插入图片描述
顺序查找需要从头开始不断地按顺序检查数据,因此在数据量大且目标数据靠后或者目标数据不存在的情况下,比较的次数就会更多,并且也更为耗时。若数据量为 n,线性查找的时间复杂度便为 O(n)。
所以虽然顺序查找比较简单,且对表的结构没有任何要求,但是其查询效率较低,所以当n较大时不宜采用顺序查找。

时间复杂度: O(n)
查找成功时的平均查找长度,设表中各记录查找概率相等

ASL(n)=(1+2+ … +n)/=n(n+1)/2

空间复杂度: 一个辅助空间一O(1);

顺序查找的特点

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

需要注意的是,顺序查找是一种简单且广泛使用的查找方法,但它并不适合所有情况。例如,当线性表中的元素分布不均匀,或者元素按关键字有序排列时,顺序查找的性能可能会受到影响。

如何提高查找效率

1、记录的查找概率不相等时如何提高查找效率?
查找表存储记录原则:按查找概率高低存储:
1)查找概率越高,比较次数越少
2)查找概率越低,比较次数较多

2、记录的查找概率无法测定时如何提高查找效率?
方法:按查找概率动态调整记录顺序:
1)在每记录中设一不访问频度域
2)始终保持记录按非递增有序的次序排列
3)每次查找后均将刚查到的记录直接移至表头

参考资料:数据结构与算法基础-王卓老师

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

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

相关文章

Superhuman 邮箱的替代方案是什么?

Superhuman是一个极好的人工智能工具在电子邮件助理领域。根据SimilarWeb的最新统计,它在全球网站排名中排名第21980位,月访问量为1751798。然而市场上还有许多其他优秀的选择。为了帮助您找到最适合您需求的解决方案,我们为您精心挑选了10种…

Python进阶学习:json.dumps()和json.dump()的区别

Python进阶学习:json.dumps()和json.dump()的区别 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 👈 希望得到您…

在Ubuntu上为ARM 8处理器安装Python 3.10.4虚拟环境指南

在Ubuntu上为ARM 8处理器安装Python 3.10.4虚拟环境指南 安装Anaconda或Miniconda: 首先,您需要从官方网站下载适用于ARM架构的Anaconda或Miniconda安装包。下载完成后,在终端中使用bash Anaconda3-2019.10-Linux-armv8.sh(文件…

【JVM】StringTable 字符串常量池

参考:javaGuide 字符串常量池 是 JVM 为了提升性能和减少内存消耗针对字符串(String 类)专门开辟的一块区域,主要目的是为了避免字符串的重复创建 String的不可变性 1.通过字面量的方式(区别于new)给一个…

图像复原天花板!IR开创性新作实现最佳视觉质量,修复更智能、更逼真

图像复原(IR)指在已知图像退化的原因和模型的情况下,通过一系列的逆过程来恢复出原始图像的过程。这是一个长期的低级视觉任务,也是图像处理领域的一个重要课题。 随着深度学习技术的发展,图像复原领域不断出现新的网…

Python算法题集_全排列

Python算法题集_全排列 题46:全排列1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【标记数组递归】2) 改进版一【指针递归】3) 改进版二【高效迭代模块】4) 改进版三【高效迭代模块极简代码】 4. 最优算法5. 相关资源 本文为Python…

STM32F103学习笔记(六) RTC实时时钟(应用篇)

目录 1. RTC 实时时钟的应用场景 2. RTC 的配置与初始化 2.1 设置 RTC 时钟源 2.2 初始化 RTC 寄存器 2.3 中断配置 2.4 备份寄存器配置 2.5 校准 RTC 3. 实例演示代码 4. 总结 1. RTC 实时时钟的应用场景 实时时钟(RTC)在嵌入式系统中具有广泛…

用C#开发Excel插件的强大开源工具

推荐一个开源项目,方便我们使用C#为Excel开发插件。 01 项目简介 Excel-DNA是一个.Net开源项目,为开发者提供了一种便利的方法,可以将.Net代码与Excel集成,能够轻松的为Excel创建自定义函数、图表、表单等,一方面不仅…

VS2022调试技巧(一)

什么是bug? 在1945年,美国科学家Grace Hopper在进行计算机编程时,发现一只小虫子钻进了一个真空管,导致计算机无法正常工作。她取出虫子后,计算机恢复了正常,由此,她首次将“Bug”这个词用来描…

【C语言基础】:操作符详解(二)

文章目录 操作符详解一、上期扩展二、单目操作符三、逗号表达式四、下标访问[]、 函数调用()五、结构成员访问操作符六、操作符的属性:优先级、结合性1. 优先级2. 结合性 操作符详解 上期回顾:【C语言基础】:操作符详解(一) 一、上期扩展 …

https://htmlunit.sourceforge.io/

https://htmlunit.sourceforge.io/ 爬虫 HtmlUnit – Welcome to HtmlUnit HtmlUnit 3.11.0 API https://mvnrepository.com/artifact/net.sourceforge.htmlunit/htmlunit/2.70.0 https://s01.oss.sonatype.org/service/local/repositories/releases/content/org/htmlunit…

进程间通信学习笔记(有名管道和无名管道)

进程间通信方式: 无名管道(pipe)有名管道(fifo)信号(signal)共享内存(mmap)套接字(socket) 无名管道: 在内核里面开辟一片内存,进程1和进程2都可以通过这片内存进行通信 无名管道特点: 只能用于具有亲缘关系的进程之间的通信&am…

YOLOv9图像标注和格式转换

一、软件安装 labelimg安装(anaconda) 方法一、 pip install labelImg 方法二、 pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install lxml -i ht…

系统找不到xinput1_3.dll怎么办?试试这五种解决方法轻松搞定

在计算机系统运行过程中,当我们遭遇“找不到xinput1_3.dll”这一错误提示时,实际上正面临一个软件兼容性、系统组件缺失以及游戏或应用程序无法正常启动的关键问题。深入探究这一现象,我们会发现它可能引发一系列连带问题,例如某些…

linux之前后端项目部署与发布

目录 前言 简介 一、安装Nginx 二、后端部署 2.1多个tomcat负载均衡 2.2 负载均衡 2.3 后端项目部署 三、前端部署 1.解压前端 2.Nginx配置文件修改 3.IP域名映射 4.重启Nginx服务 前言 上篇博主已经讲解过了单机项目的部署linux之JAVA环境配置JDK&Tomcat&a…

车载终端_联发科MTK6762车载平板电脑解决方案

智能车载终端方案搭载了MTK联发科8xARM Cortex-A53(64bit)高速CPU,采用12nm工艺制程,提供更快的数据采集速度和APP响应速度,能够快速满足用户的应用需求。配备3GB RAM32GB ROM的低功耗EMCP一体化存储,性能良好,支持多任…

【LeetCode:2476. 二叉搜索树最近节点查询 + 中序遍历 + 有序表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

python使用winio控制x86工控机的gpio

视频讲解 https://www.bilibili.com/video/BV1Nu4m1w7iv/?vd_source5ba34935b7845cd15c65ef62c64ba82f pywinio库 https://pypi.org/project/pywinio/ 安装库 pip install pywinio寄存器地址 测试代码 import pywinio winio get_winio() # 设置排针2输出1,0x40是bit6置…

嵌入式中逻辑分析仪基本操作方法

前期准备 1.一块能触摸的屏对应的主板机 2.逻辑分析仪对应的软件工具 3.对应的拓展板 4.确定拓展板的引脚分布情况 第一步:逻辑分析仪j基本操作 1.数据捕捉需要先进行对应软件安装,并按照需求进行配置 2.这里以A20为例:此手机使用显示驱动芯片CST148,触摸屏分辨…

插件废土课:打造属于你的“智能笔记”!

哎呀嘞,亲爱的网页冲浪者们,抓紧浮板,我们要继续在Chrome插件的海浪上翻滚啦!上次我们玩了个小把戏,搞了个显示时间的Hello World插件,这次我们要把游戏玩大,准备打造一个能让你在网页上乱涂乱画…