算法基础:常用的查找算法知识笔记

1、查找表和查找效率的概念

查找表是指由同一类型的数据元素构成的集合。分为静态查找表和动态查找表。

1.1 静态查找表

1、查询某个特定元素是否在查找表的集合当中

2、查询某个特定元素的各种属性

1.2 动态查找表

1、在查找表中插入一个数据元素

2、在查找表中删除一个元素

1.3 关键字

它是数据元素的某个数据项的值。用来识别该元素。主关键字是唯一能表示该元素的值。次关键字用来表示多个数据元素的关键字。

1.4 查找

根据给定的值在查找表中查询是否存在一个其关键字等于给定值的记录或者数据元素。

1.5 平均查找长度

关键字和给定值进行比较的记录个数的平均值。也是衡量查找算法好坏的依据。

2、顺序查找

从数据集合的一端,逐个记录的关键字和给定值进行比较,找到则为查找成功。整个数据集合比较完后仍然找不到,则为查找失败。

顺序查找适用于顺序存储和链式存储。其平均查找长度为(n+1)/2.

顺序查找算法简单、适应性广。当数据集合数据量大的话,查询效率会较低。

3、折半查找

折半查找也称为二分查找。

平均查找长度:(n+1)/n*log^2(n+1) -1,当n值较大 log^2(n+1) -1

折半查找效率比顺序查找高,它比较合适顺序存储和关键字有序排列。所以折半查找适合数据表不经常变动,查询频率较高的情况。

             

4、索引顺序查找

索引顺序查找又称为分块查找,是顺序查找的一个改进查找算法。

原理:分块查找首先将表分为若干块。每一块可以无序。但块之间是要有序的。即后一块所记录的关键字均大于前一块的关键字。另外还会创建一个索引块表,索引块表关键字有序。

查询过程:1、在索引表中确认待查记录所在数据块。2、在该数据块内顺序查找。

平均查找长度:1/2(n/s + s) +1

它的效率优于顺序查找,比不上折半查找。

5、树表查找

常见的树表查找有二叉查找树、B-树、红黑树等常见查找算法。二叉查找树是一种动态查找表

5.1 二叉查找树查找过程

利用二叉查找树左小右大的特性,可以很容易实现查找任意值和最大/小值。

在二叉查找树中查找一个给定的关键字n的过程与折半查找很类似,

查找过程如下:

1.若二叉树是空树,则查找失败。

2.若x等于根节点的数据,则查找成功,否则。

3.若x小于根节点的数据,则递归查找其左子树,否则。

4.递归查找其右子树。

5.2 二叉树查找树b插入操作x的过程

1.若b是空树,则直接将插入的节点作为根节点插入。

2.x等于b的根节点的数据的值,则直接返回,否则。

3.若x小于b的根节点的数据的值,则将x要插入的节点的位置改变为b的左子树,否则。

4.将x要插入的节点的位置改变为b的右子树。

注:如果二叉树是单枝树。查询效率和顺序查找相当。

6、哈希查找

6.1 概念

通过计算数据元素的存储地址进行元素查找的一种查找算法。

根据设定的哈希函数和处理冲突的方法,将一组关键字映射到一个有限的连续的地址集上,并以关键字在地址集中的“像”作为记录在表中的存储位置,这种表称为哈希表。这一映射过程称为哈希造表或散列。所得的存储位置称为哈希位置或者散列地址。

哈希算法要解决两个问题:哈希函数的构造、冲突的解决。

6.2 解决冲突

解决冲突就是为出现冲突的关键字找到另一个“空”的哈希地址。

常用的解决冲突的方法有:开放定址法、链地址法、再哈希法、建立公共溢区法。

6.2.1开放定址法

最简单的产生探测序列的方法是进行线性探测,发生冲突后,顺序到下一个存储单元进行探测。

6.2.2 链地址法

链地址法是常用并且很有效的方法。它将具有相同哈希函数值记录组成一个链表,当链域值为NULL时,表示没有后继记录。

6.2.3 哈希查找

线性探测解决冲突的方式下:某一个位置上找到关键字等于key的记录,表示查找成功;探测序列查不到key关键字的记录,又遇到了空单元,表示找不到该元素,查找失败。

链地址法解决冲突构造的哈希表中查找元素,就是根据哈希函数得到的元素所在链表的头指针,然后在链表中顺序查找的过程。

IT技术分享社区

个人博客网站:https://programmerblog.xyz

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识

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

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

相关文章

注解参数怎么使用变量_硅橡胶胶水有哪些特点?使用参数表现的怎么样?如何储存?...

作为单组分产品,硅橡胶胶水的使用方法简单又灵活。直接涂抹在粘接基面上,固化之后即可抵抗外界的压力与冲击。别看它的规格不是很打,却可以顺顺利利完成粘接,形成保护膜。硅橡胶胶水有哪些特点?没有固化之前,是半透明…

Java中return的两种用法

一、return语句总是用在方法中,有两个作用。 一个是返回方法指定类型的值(这个值总是确定的)。 一个是结束方法的执行(仅仅一个return语句)。 一般的就百是用在有反回值的方法中,用来返回方度法指定问类…

算法基础:递归算法知识笔记

1、递归算法定义递归算法是将重复问题分解为同类的子问题而解决问题的方法,其核心思想是分治策略。简单来说就是自己调用自己。直到达到退出递归的条件,则完成递归。2、递归的步骤1、找整个递归的终止条件:递归应该在什么时候结束&#xff1f…

ttl继承逻辑门的逻辑功能与参数测试 实验总结_LMS电声测试仪,LMS-V测试系统,精声电声...

LMS-V测试系统LMS扬声器测试仪从推出到现在25年的时间,在全世界被很多扬声器开发与制造厂家广泛应用研发与生产质量控制,传统的LMS扬声器测试仪采用ISA卡的形式提供,所以面临着越来越多的零件过时,所以为了彻底解决这些问题&#…

java中break标记的使用

笔试题目&#xff1a;break目前位于内层的for循环&#xff0c;如何才能让break作用于外层 的for循环。可以标记解决 标记的命名只要符合标识符的命名规则即可。 Test public void test2(){aaa:for(int j 0 ; j<3 ; j){ // j0 外层for循环for(int i 0 ; i< 2 ; i){ //…

电脑基础知识入门:键盘上的英文,意思和功能汇总!

电脑键盘是把文字信息的控制信息输入电脑的通道&#xff0c;从英文打字机的键盘演变而来的。它最早出现在电脑上的时候&#xff0c;还是一种叫做“电传打字机”的部件。那些陌生的键盘按键都有什么用途?很多孩子不知道键盘上功能键和字母数字键以外的键盘按键有什么用&#xf…

elementui el-dialog 离顶部的位置_驻马店建筑物避雷带的安装位置,本月报价

首页 > 新闻中心发布时间&#xff1a;2020-11-06 18:23:42 导读&#xff1a;科杰防雷为您提供驻马店建筑物避雷带的安装位置的相关知识与详情&#xff1a; 该系统在正常运行时&#xff0c;不管三相负荷平衡不平衡&#xff0c;在中性线N带电情况下&#xff0c;PE线不会带电。…

android 弹出框带标题栏,Android开发靠标题栏的弹框

一、效果图title_dialog.png二、思路首先它是一个弹框&#xff0c;只是弹框的布局做些处理&#xff0c;布局占满屏幕&#xff0c;只有需要白色的布局的背景设为白色。其他没设置背景颜色&#xff0c;自然用dialog的style的windowBackground三、案例关键代码dialog的xmlxmlns:ap…

算法基础:图的相关算法知识笔记

一、图的相关算法1、图的分类知识如下图&#xff1a;2、生成树概念对连通图进行遍历&#xff0c;过程中所经过的边和顶点的组合可看做是一棵普通树&#xff0c;通常称为生成树。连通图的生成树具有这样的特征&#xff1a;边的数量 顶点数 - 13、最小生成树在连通网的所有生成树…

java中break和continue的用法例子

break用于switch语句 1. break用于switch语句中&#xff0c;终止switch语句 下面先看 加上break,效果如下 我们可以看到&#xff0c;没有用过break关键字时&#xff0c;不会在判断下一个case的值&#xff0c;直接向后运行&#xff0c;直到遇到break&#xff0c;或者整体swit…

ftp 工具_ftp工具,ftp工具有哪些

对于ftp工具&#xff0c;你了解多少&#xff1f;其实一般人也接触不到这种软件。ftp工具主要是针对从事网站管理的工作人员比较有利的一款工具。可以帮助他们快速的解决工作中的问题。方便、简单、快捷又明了的解决问题。那ftp工具有哪些呢&#xff1f;接下来给大家推荐四款好用…

盘点世界十大软件外包公司排名是哪些公司

排名第一:IBMIBM,总部在纽约的阿蒙克。托马斯沃森19世纪80年代在美国成立,是全球最大的信息技术和商业解决方案公司,在全球拥有超过30万名员工,业务遍及160多个国家和地区。电脑上的制作非常出名,事实上,IBM在软件方面取得了巨大的成就,特别是在一些IBM服务器上使用的软件平台上…

判断不为空和不为空串的方法java

判断不为空和不为空串的方法 方法一:用StringUtils工具类 首先要引入依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId> </dependency> if( StringUtils.isNotBlank(str3) && St…

android xml事件,安卓事件

1、自定义内部类2、匿名内部类3、当前activity去实现事件接口4、在布局文件xml中添加点击事件属性(使用频率非常高)补充&#xff1a;a、Android 在xml文件中 给某个控件声明 id 是: "/自定义名字" &#xff0c;获取是&#xff1a; "/自定义的名字" &#x…

Cocos2d-x v3.0物理系统 利用PhysicsEditor创建多边形

Cocos2d-x 3.0的新物理系统我就不必多说了&#xff0c;接触一段时间&#xff0c;感觉还是不错的。对于那些基本概念&#xff0c;网上的教程已经泛滥了&#xff0c;就不多说了&#xff0c;不过对于创建多边形物体的教程&#xff0c;还真不多&#xff0c;很多都是创建圆形和矩形&…

公众号开发 单独 给某个用户 推送消息_韩国5G用户6月底已达134万 较5月底增加近70%...

中关村在线消息&#xff1a;韩国三大运营商SK、KT和LG率先于去年12月开始向企业用户提供商用5G 服务&#xff0c;今年4月初推出面向个人消费者的5G民用服务。韩国作为全球首个推出5G 服务的国家&#xff0c;他们的5G用户数量在6月时已经突破100万大关。日前韩国公布6月底最新的…

程序语言的概念知识笔记

1、低级语言和高级语言 计算机指令程序&#xff1a;0、1 组成的机器指令序列。特点&#xff1a;效率低、可读性差、难以维护。 汇编指令&#xff1a;用常用的符号代替0、1 序列来 表示机器指令&#xff0c;例如用ADD表示加法。 高级语言&#xff1a;面向对象设计的各类应用的程…

java lambda 表达式中的双冒号和箭头的用法 ::

先构造一些数据,创建一个User类 java lambda 表达式中的双冒号的用法 &#xff1a;&#xff1a; 双冒号运算就是Java中的[方法引用],[方法引用]的格式是 类名::方法名 如下图所示 User是一个类, getAge是方法名,注意是方法名呀&#xff0c;后面没有括号()的。为什么不要括号…

linux内核设计与实现 中文第三版 pdf_大牛推荐的5本 Linux 经典必读书

今天给大家推荐5本Linux学习相关的书籍&#xff1b;这些书籍基本都是很多大牛推荐过&#xff0c;并且深受业界好评的书&#xff1b;虽然只有5本&#xff0c;但是相信把5本全都认真看过的同学应该不多吧&#xff1f;希望这些书能够帮助你进阶为大牛&#xff01;5.《鸟哥的 Linux…

号称最好的国产操作系统在 Windows 10 面前能否一战?

统信软件旗下的UOS操作系统正式推出UOS V20个人版&#xff0c;并开启99元预售活动。统信UOS虽名不见经传&#xff0c;但身披“国产操作系统”外衣的它却让科技圈炸开了锅。有人说它是“国货之光”&#xff0c;堪称最好的国产系统&#xff0c;但也因为“收费”的问题引发一致批评…