查找算法复习

news2024/11/15 12:08:14

先序

在了解查找算法之前,需要熟悉几个概念,不然后面容易产生理解错误。

查找表:即被查找的对象,通常由几个关键字组成。

关键字:就是数据项、字段的意思。关键字有主次之分,其中主关键字取值是唯一的。

查找长度:给定的关键字在查找表中的比较次数。(查找就是拿要找的数在对应的字段中一个个比较)

静态、动态查找:静态查找只执行查找操作(判断有无和位置在哪),不改变数据;动态查找除了查找还会改变数据。

一、顺序查找(静态查找)

原理:极其简单,就是拿给定值和对应的关键字中的所有数按照指定顺序(从前到后等)一个个比较知道找到或比较完所有值。

考点:顺序查找包括不带监视哨和带监视哨两种类型

不带监视哨的顺序查找

def SeqSearch(self, key):
    iPos = 0    # 数据元素在查找表中的位置,从第一个开始
    while iPos < self.length and self.data[iPos] != key:    
        iPos += 1    # 只要没找到就往后加1
    return (iPos if iPos < self.length else -1)    # 找到了返回对应位置;没找到返回-1

上述代码中我们需要判断iPos < self.length,即防止越界。为了提高效率,可以把查找表的第一个元素作为监视哨。

带监视哨的顺序查找

def SeqSearch(self, key):
    self.data[0].key = key    # 将第一个元素作为监视哨
    iPos = self.length - 1    # 从最后一个数据开始比较
    while self.data[iPos].key != key:
        iPos -= 1    # 没找到往前加而不是减一,就不可能越界,也就不用判断。
    return iPos if iPos > 0 else -1

二、折半查找(静态查找)

条件:折半查找要求查找表必须是有序的

过程:

  1. 首先确定查找范围(左边low, 右边high,两者差大于等于0就有范围),若范围为空则查找失败

  1. 若范围不为空,则在查找范围的中间位置比较,若相同则查找成功

  1. 若小于中间数,则在中间数左边部分(low不变,high为中间位置减一)继续按照上述步骤查找(确定查找范围,比较中间数)

  1. 若大于中间数,则在中间数右边部分(high不变,low为中间位置加一)继续按照上述步骤查找(确定查找范围,比较中间数)

三、二叉排序树(动态查找)

  • 二叉排序树的概念:

它要么是空树,要么是满足以下性质的二叉树:

① 若根结点的左子树非空,则左子树中所有结点的值都小于根结点的值。

② 若根结点的右子树非空,则右子树中所有结点的值都大于根结点的值。

③ 根结点的左、右子树均是一棵二叉排序树。

  • 二叉排序树的创建:采用插入算法。很简单,根据给定的顺序,第一个被插入的作为根节点,后面插入的与根节点比较按照其性质放置在左右子树中。

例:关键字{11,12,8,5,10,15}

关键字{5,12,8,11,10,15}

  • 二叉排序树的查找:类似于折半查找,从根节点开始比较,然后往左右子树的根节点比较,就类似与折半查找比较中间位置。

  • 二叉树删除关键字:

分三种情况,被删除的节点为叶子结点、只有左子树或者右子树、左右子树都有。

前两种很简单,第一种直接删了,其双亲的指针域改成空;第二种让双亲指针指向下一个根节点即可

第三种提一下,有两种办法,下图的是其中一种,即找到要被删除的节点的左子树中最大的节点。然后把该删除的节点删掉用左子树的最大的节点补充即可。

当然还有第二种办法,就是找到右子树中最小的节点然后把该删除的删除,用右子树最小的节点代替即可。

四、平衡二叉树、B-树的概念(动态查找)

平衡二叉树:二叉树查找中二叉树的高度越小平均查找长度就会越小,所以平衡二叉树就是使得二叉树的深度尽可能的小并满足原来二叉树性质的特殊的二叉树。别名AVL树

平衡二叉树的性质:每个节点的左右子树的深度之差的绝对值小于等于1(-1,0,1)

B-树:解决数据元素太大查找效率低下的问题。

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

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

相关文章

工程监测多通道振弦模拟信号采集仪VTN的AABB 通讯协议

工程监测多通道振弦模拟信号采集仪VTN的AABB 通讯协议 AABB 通讯协议是一种非标准自定义协议&#xff0c; 相较于 MODBUS 通讯协议&#xff0c;结构更简单&#xff0c;指令生成方法更容易&#xff0c;便于进行快速测试。 AABB 通讯协议支持单寄存器读写两种指令。 &#xff08…

开机一键ghost重装系统如何操作

现在有很多的朋友伙伴们在后台反映自己想尝试一个简单的重装系统方法&#xff0c;现在小编就带着推荐来啦&#xff0c;开机一键ghost重装系统&#xff0c;他简单操作易上手&#xff0c;小白也可以轻松掌握&#xff0c;大家一起来看看吧。 工具/原料&#xff1a; 系统版本&…

NLP文本自动生成介绍及Char-RNN中文文本自动生成训练demo

前言 文本自动生成是自然语言处理领域的一个重要研究方向&#xff0c;实现文本自动生成也是人工智能走向成熟的一个重要标志。文本自动生成技术极具应用前景。 例如&#xff0c;文本自动生成技术可以应用于智能问答与对话、机器翻译等系统&#xff0c;实现更加智能和自然的人机…

云生源安全引流方案(K8S)

背景 在云原生中,我们无法非常方便准确的截取流量。比如在 K8S 中的每个 Pod 都需要和 API Server 进行 health 通讯等,这些并非是我们用户真实发生的流量。所以我们需要把 K8S 中发生的流量和用户发生的流量给分割开来,还有就是 K8S 对于开发者来说是一个黑盒,不知道怎么…

如何写好controller层

前言一、Controller层参数接收二、统一状态码三、统一校验四、统一响应五、统一异常前言本篇主要要介绍的就是controller层的处理&#xff0c;一个完整的后端请求由4部分组成&#xff1a;1. 接口地址(也就是URL地址)、2. 请求方式(一般就是get、set&#xff0c;当然还有put、de…

运行redis报错 由于目标计算机积极拒绝,无法连接

第一打开redis服务器时出现闪退第二再点击redis-cli.exe时&#xff0c;出现了由于目标计算机积极拒绝&#xff0c;无法连接尝试用这个命令解决此问题&#xff1a;打开命令运行窗口&#xff0c;进入cmd&#xff0c;然后进入redis安装的目录&#xff0c;如下图&#xff1a;回车之…

“与众不同”的TOP250详细数据采集,pyecharts世界地图多维可视化展示

“与众不同”的TOP250详细数据采集&#xff0c;pyecharts世界地图多维可视化展示 前言&#xff1a; 本文描述爬取逗瓣250的电影详细信息&#xff0c;包括对电影名、评分、评论人数、电影名言、导演演员信息、电影年份、电影国家、电影类型等详细爬取&#xff1b; 并且针对爬…

EasyExcel 低内存导出大数据量的Excel方案探索 50万行 50列 (附:实现代码)

文章目录1.前言2.准备工作3.导出测试3.1.单次查询、全量导出3.2. 多次查询&#xff0c;多个文件&#xff0c;单次写入3.3.多次查询&#xff0c;多个文件&#xff0c;多次写入3.4.多线程导出探索3.5.文件打包成ZIP3.6.响应给客户4.实现代码5.结语1.前言 最近接到一个需求&#…

唤醒手腕 Java 后端 Springboot 结合 Redis 数据库学习笔记(更新中)

Redis 基本介绍 Redis Introduction The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker. 基本概念&#xff1a;redis 是一个开源的、使用 C 语言编写的、支持网络交互的、可基于内存也可持…

没有资源没有人脉,23年跨境电商仍值得入局!

随着经济全球化的不断深入&#xff0c;越来越多人关注到跨境电商行业。作为新兴的贸易业态&#xff0c;跨境电商拥有多边化、交易链条短等传统电商无法比拟的优势&#xff0c;能够有效地推广更多中国优质产品到全球市场上&#xff0c;在促进国家经济发展过程中发挥着举足轻重的…

谷歌推出新优化器Lion:优化算法的符号发现

文章目录谷歌推出新优化器Lion&#xff1a;优化算法的符号发现Lion VS AdamW论文实验1.图像分类2.视觉语言对比学习3.扩散模型4.语言建模和微调5.与其他流行优化器的比较超参数设置小结谷歌推出新优化器Lion&#xff1a;优化算法的符号发现 优化器即优化算法&#xff0c;优化器…

加入蓝精灵协会的快速指南

了解使用蓝精灵协会应用程序所需的所有要点。 什么是蓝精灵协会&#xff1f; 蓝精灵协会是唯一一个由蓝精灵官方品牌支持的 PFP 项目。 我们目前正处于这个交互式项目的第二阶段&#xff0c;重点是通过游戏化的 Web3 体验建立一个大型社区。下面是参与游戏的基本步骤&#xff0…

C++进阶:二叉搜索树

文章目录1 二叉搜索树概念2 二叉搜索树的实现2.1 结点的定义2.2 二叉搜索树的插入2.2 二叉搜索树的查找2.3 二叉搜索树的删除2.4 二叉搜索树的默认成员函数2.4.1 拷贝构造2.4.2 析构函数2.4.3 赋值重载3 二叉搜索树的应用3.1 k模型3.2 kv模型4 二叉搜索树的性能分析1 二叉搜索树…

【字典转模型 Objective-C语言】

一、点按钮,弹出的这个效果,这实际上是个Label, 这实际上是一个Label,点按钮弹出的这个效果, 设置一个Label的背景色、前景色、透明度、等等, 让它加进来,然后通过动画让它隐藏掉, 这就是,这个效果的实现思路, 咱们这个效果,先稍微往后放一放, 这个并不是重点…

匈牙利算法学习笔记

匈牙利算法学习笔记1. 前言1.1 二分图1.2 二分图匹配2. 匈牙利算法(Hungarian Algorithm)2.1 基础概念2.2 实现步骤参考链接&#xff1a;1. 14-4&#xff1a;匈牙利算法 Hungarian Algorithm1. 前言 1.1 二分图 二分图通常针对无向图问题。假设G(V,E)G(V,E)G(V,E)是一个无向图…

Linux搭建gitlab服务器

第一步&#xff1a;切换到root用户 sudo root或者 sudo -i第二步&#xff1a;执行以下命令 yum install curl openssh-server openssh-clients postfix cronie -y​systemctl start postfix.servicechkconfig postfix onlokkit -s http -s ssh第三步&#xff1a;添加Gitlab&…

如何理解 Python 的赋值逻辑

摘要&#xff1a; 如果你学过 C 语言&#xff0c;那么当你初见 Python 时可能会觉得 Python 的赋值方式略有诡异&#xff1a;好像差不多&#xff0c;但又好像哪里有点不太对劲。 本文比较并解释了这种赋值逻辑上的差异。回答了为什么需要这种赋值逻辑以及如何使用这种赋值逻辑…

Acer新蜂鸟Swift3电脑开机总是蓝屏错误怎么办?

Acer新蜂鸟Swift3电脑开机总是蓝屏错误怎么办&#xff1f;有用户使用的Acer新蜂鸟Swift3电脑一开机的时候&#xff0c;没过几秒电脑桌面就变成了蓝屏的了&#xff0c;通过强制重启之后依然会重复这个问题&#xff0c;那么这个问题要怎么去进行解决了&#xff0c;今天将你怎么重…

Android 反序列化漏洞攻防史话

Java 在历史上出现过许多反序列化的漏洞&#xff0c;但大部分出自 J2EE 的组件。即便是 FastJSON 这种漏洞&#xff0c;似乎也很少看到在 Android 中被实际的触发和利用。本文即为对历史上曾出现过的 Android Java 反序列化漏洞的分析和研究记录。 序列化和反序列化是指将内存数…

k8s-kubectl命令

文章目录一、kubectl 基本命令1、陈述式资源管理方法:2、声明式资源管理办法二、基本信息查看三、项目的生命周期创建kubectl run命令四、金丝雀发布(Canary Release)——陈述式管理方法五、声明式管理方法kubectl create 和 kubectl apply区别一、kubectl 基本命令 1、陈述式…