当前位置: 首页 > news >正文

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

线性表的查找-顺序查找

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

顺序查找

基本思想

在表的多种结构定义方式中,线性表是最简单的一种。而顺序查找是线性表查找中最简单的一种。
顺序查找的基本思想:
从表的一端开始,顺序扫描线性表,将依次扫描到的结点关键字和给定的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.lryc.cn/news/306677.html

相关文章:

  • 力扣1143. 最长公共子序列(动态规划)
  • 如何使用群晖NAS中FTP服务开启与使用固定地址远程上传下载本地文件?
  • C语言文件知识点
  • C语言:数组指针 函数指针
  • 全面介绍HTML的语法!轻松写出网页
  • 数学建模【相关性模型】
  • 「优选算法刷题」:字母异位词分组
  • 【教程】 iOS混淆加固原理篇
  • 《银幕上的编码传奇:计算机科学与科技精神的光影盛宴》
  • linux提权之sudo风暴
  • 数据结构之:跳表
  • matlab 线性四分之一车体模型
  • LeetCode第二题: 两数相加
  • web组态插件
  • Android14 InputManager-InputManagerService环境的构造
  • 搜维尔科技:【周刊】适用于虚拟现实VR中的OptiTrack
  • matlab倒立摆小车LQR控制动画
  • 【C++】类和对象(2)
  • 用Python实现创建十二星座数据分析图表
  • 备战蓝桥杯————递归反转单链表的一部分
  • rabbitmq知识梳理
  • 【数据结构与算法】动态规划法解题20240227
  • 备战蓝桥杯—— 双指针技巧巧答链表2
  • 半监督节点分类-graph learning
  • 软件文档-运维-开发-管理-资质-评审-招投标-验收
  • 猫头虎分享已解决Bug || Vue中的TypeError: Cannot read property ‘name‘ of undefined 错误
  • 技术应用:使用Spring Boot、MyBatis Plus和Dynamic DataSource实现多数据源
  • C# Onnx 使用onnxruntime部署实时视频帧插值
  • 编程笔记 Golang基础 016 数据类型:数字类型
  • 一周学会Django5 Python Web开发-会话管理(CookiesSession)