数据结构--查找的基本概念

     查找表是由同一类型的数据构成的集合,集合间存在着松散的关系,因此查找表是一种应用灵便得结构。

1.关键字:

主关键字:可唯一的识别一个记录的关键字(学号)

次关键字:可识别若干个记录的关键字(姓名:重名)

查找——根据给定的值,在查找表中的值等于给定的值

2.对查找表进行的操作:

可以理解为:增删改查

查找表分类:  静态查找

                        动态查找

当我们在数据结构中讨论查找表(也称为搜索表)时,我们通常根据查找过程中表是否发生变动来将其分类为静态查找和动态查找。以下是这两种查找类型的解释:

  1. 静态查找

    • 定义:在静态查找中,查找表中的数据在查找过程中不会发生变化。换句话说,我们只对查找表中的元素进行查询操作,而不进行插入或删除操作。
    • 应用场景:通常用于只需要查询而不需要修改的数据集,如字典、电话簿等。
    • 常用算法:顺序查找(线性查找)、二分查找(如果数据已排序)、哈希查找(如果可以使用哈希函数将数据映射到特定位置)等。
    • 特点:由于数据在查找过程中不会发生变化,所以静态查找通常更注重查找效率,例如使用哈希表可以实现常数时间的查找。
  2. 动态查找

    • 定义:在动态查找中,查找表中的数据在查找过程中可能会发生变化。这通常涉及到在查找表中插入或删除元素。
    • 应用场景:需要频繁插入、删除和查找元素的数据结构,如数据库、文件系统等。
    • 常用数据结构:二叉搜索树(BST)、平衡二叉搜索树(如AVL树、红黑树)、B树、B+树、哈希表(虽然哈希表主要用于静态查找,但在某些实现中也可以支持动态操作)等。
    • 特点:动态查找需要同时考虑查找效率以及插入和删除操作的效率。例如,在二叉搜索树中,插入和删除操作可以保持树的结构相对平衡,从而确保查找效率。而在哈希表中,插入和删除操作可能会导致哈希表的重构,以维持哈希表的性能。

总结:静态查找和动态查找的主要区别在于查找表中的数据在查找过程中是否会发生变化。静态查找更关注于查询效率,而动态查找需要同时考虑查询、插入和删除操作的效率。

3.查找算法的评价指标:关键字的平均比较次数ASL

ASL,即Average Search Length(平均查找长度),是衡量查找算法效率的一个重要指标。它表示在查找过程中,平均需要和待查找值进行比较的关键字次数。这个指标能够直观地反映查找算法的时间性能。

具体解释如下:

  1. 定义
    • ASL是指在查找过程中,为了找到目标元素,算法平均需要比较的关键字次数。
    • 通常假设查找表中每个元素被查找的概率相同,即每个元素的查找概率Pi = 1/n,其中n为查找表中元素的个数。
  2. 计算方式
    • 对于每个元素i,设其被查找的概率为Pi,找到该元素所需的比较次数为Ci。
    • 则ASL可以表示为:ASL = Σ(Pi * Ci),其中Σ表示对i从1到n的求和。
    • 在实际计算中,如果假设每个元素被查找的概率相同,即Pi = 1/n,则ASL可以简化为:ASL = (ΣCi) / n,即所有元素比较次数之和除以元素个数。
  3. 意义
    • ASL越小,说明查找算法的时间性能越好,即算法在查找过程中需要比较的关键字次数越少。
    • 反之,如果ASL较大,则说明算法在查找过程中可能需要进行较多的比较操作,时间性能较差。
  4. 示例
    • 以顺序查找为例,假设查找表中有n个元素,且每个元素被查找的概率相同。在最坏情况下(即目标元素位于查找表的最后一个位置),每次查找都需要与查找表中所有元素进行比较,因此Ci = n。所以,顺序查找的ASL = (1+2+...+n) / n = (n+1)/2。

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

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

相关文章

攻防世界maze做法(迷宫题)

首先查壳64bit,直接丢进ida64中进行反编译就完事儿了,然后直接进入main函数打注释分析首先,题目已经提示了这是个迷宫题,我们抓住做迷宫题的两个要点,一找玩法,二找地图, 玩法在主函数中&#…

Linux防火墙入门——iptables、firewalld配置详解

合理的防火墙是你的计算机防止网络入侵的第一道屏障。你在家里上网,通常互联网服务提供会在路由中搭建一层防火墙。当你离开家时,那么你计算机上的那层防火墙就是仅有的一层,所以配置和控制好你 Linux 电脑上的防火墙很重要。 很多 Linux 发…

刚体运动描述:欧拉角与四元数

在机器人学中,刚体的运动描述是非常重要的,特别是当我们需要精确控制机器人的姿态时。欧拉角和四元数是两种常用的描述刚体在三维空间中旋转的方法。下面将分别介绍这两种方法并给出其特点。 欧拉角 定义与特点: 定义:欧拉角是…

35python数据分析numpy基础之setdiff1d求两个数组的差集

1 python数据分析numpy基础之setdiff1d求两个数组的差集 python的numpy库的setdiff1d(x,y)函数,表示数组x与y的差,即在x且不在y中的元素,且进行去重排序。 用法 numpy.setdiff1d(ar1, ar2, assume_uniqueFalse)描述 numpy.setdiff1d(ar1,…

微信视频号上是怎么开店铺的?从入驻到发货,具体流程来了!

这两年,视频号逐渐走入大家视野 单价高,商家又少,很多类目都属于空白无商家入驻阶段,于是好多商家,都准备去视频号小店这个新“黑马”发展发展 那视频号是怎么开店卖东西的?今天我就来给大家分享一下&…

外汇天眼:总是权衡利弊,投资注定失败

投资股票的人往往会频繁地评估自己的投资结果,尤其是在信息时代,手机上随时可以查看股票行情,导致很多人时不时地打开行情软件,看一看自己的股票是涨了还是跌了,盈利了还是亏损了。 频繁评估结果的弊端 一、引发急躁…

导入和使用标准模块

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中,自带了很多实用的模块,称为标准模块(也可以称为标准库),对于标准模块&#xf…

每日一练——分糖果2

1103. 分糖果 II - 力扣(LeetCode) /*** Note: The returned array must be malloced, assume caller calls free().*/ int* distributeCandies(int candies, int num_people, int* returnSize) {int num 0;int* arr (int*)malloc(sizeof(int)*num_peo…

学习小心意——简单的循坏语句

for循坏 基本语法格式 for 变量 in 序列:代码块 示例代码如下 for i in range(10):print(i)#输出结果:0 1 2 3 4 5 6 7 8 9 简单案例代码如下 利用for语句遍历序列 # 遍历字符串打印每个字母 for letter in "python":print(letter)# 遍历列表并打印每个元素 a …

软件功能测试内容简析,第三方软件测试机构进行功能测试的好处

软件功能测试是指对软件产品的各项功能进行验证和确认的过程。它是软件开发过程中非常重要的一环,通过对软件的功能进行全面测试,可以确保软件在交付给用户之前达到预期的质量要求。 在进行功能测试时,需要包括以下几个方面的测试内容&#…

json formatter哪个好用

在众多的JSON Formatter工具中,确实有几个相当出色的选择,它们各自拥有独特的特点和优势,可以满足不同用户群体的需求。下面就来为大家推荐几个好用的JSONFormatter工具: 1. JSON Formatter & Validator:这款工具…

索尼CEO宣布全力推进AI电影制作,《蜘蛛侠》制片人坚称不用AI

原标题:索尼互娱制片人与CEO唱反调 易采游戏网6月3日消息:在最近的一次行业会议上,索尼影业高层首席执行官托尼文西奎拉向媒体透露,索尼正在全力推进人工智能(AI)技术的研发与应用,特别是在电影制作流程中。这一策略旨…

React@16.x(17)Portals

目录 1,使用2,事件冒泡 一句话总结:和 Vue3 的 Teleport 一个效果。 1,使用 import React, { PureComponent } from "react"; import ReactDOM from "react-dom";// 返回一个 React 元素(ReactNo…

如何快速的将Excel定义的表结构变成MySQL的建表语句

如何快速的将Excel定义的表结构变成MySQL的建表语句 最近需求有点多啊,做一个小需求就有一堆表结构,一个一个实行CV大法,实在太伤身体了,有没有能够快速便捷的方法将一大堆Excel表转换成MySQL的表结构建表语句呢,网上…

前端 JS 经典:判断数组的准确方法

前言:判断数组的方法有很多,但是最完美的只有一个。 1. Object.prototype.toString.call 通过 toString.call 方法来判断是否数组。 function isArray(obj) {return Object.prototype.toString.call(obj) "[object Array]"; } 缺点&#…

Kafka之Consumer原理

1. Kafka消息消费流程 kafka的消费流程,首先是producer生产消息经过处理后放入到Broker服务器中,然后进入到内存中,内存再进行刷盘到磁盘中,kafak提供了两种刷盘策略,同步刷盘(flush.message 一次IO刷盘多少消息)和异…

音频pop音的数学与物理解释

音频数据跳变太大的时候通常会有pop音,此时频谱上看pop音位置能量较高 音频中的“pop”音通常是由于信号的不连续性或瞬态变化造成的。这种不连续性的数学和物理原因可以从以下几个方面解释: 数学解释 信号不连续性 当音频信号发生突变时,…

LangChain学习之Chains的执行过程

1. 学习背景 在LangChain for LLM应用程序开发中课程中,学习了LangChain框架扩展应用程序开发中语言模型的用例和功能的基本技能,遂做整理为后面的应用做准备。视频地址:基于LangChain的大语言模型应用开发构建和评估。 2.前期准备 本实验…

缨帽变换(TCT)增强特征(亮度、绿度、湿度)

目录 缨帽变换(TCT)简介TCT与主成分分析(PCA)区别使用函数.matrixMultiply().arrayProject()缨帽变换(TCT)简介 缨帽变换(Tasseled Cap Transformation),也称为缨帽特征空间或缨帽系数,是一种用于遥感图像分析的线性变换方法。它最初由美国农业部的研究人员E. K…

SwiftUI三处理用户输入

代码下载 在Landmark应用中,标记喜爱的地方,过滤地标列表,只显示喜欢的地标。要增加这些特性,首先要在列表上添加一个开关,用来过滤用户喜欢的地标。在地标上添加一个星标按钮,用户可以点击它来标记这个地…