北大硕士LeetCode算法专题课-基础算法查找

news2024/11/25 14:36:06

算法专题系列:

北大硕士LeetCode算法专题课---算法复杂度介绍_骨灰级收藏家的博客-CSDN博客

北大硕士LeetCode算法专题课-基础算法之排序_骨灰级收藏家的博客-CSDN博客

查找算法

查找算法也可以叫搜索算法。   查找算法就是从个有序数列中找出个特定的数,常用千判断某个数是否在数列中或者某个数在数列中的位置。

在计算机应用中查找是常用的基本运算是算法的重要组成部分。

顺序查找被称为线性查找是最简单、最直接的查找镜法顾名思义顺序查找就是将数列从头到尾按照顺序查找一遍, 是最容易理解的算法。

举例: 我们要从下面数列中找到"1" 这个元素

举例: 我要从面数中找到"1" 元素,从 第素开始遍历比较

 

 

举例: 我们要从下面数列中找到"1" 这个元素,从 第个元素开始遍历, 逐比较, 直到找到或遍历完成为止

顺序查找代码

 

 二分查找

二分查找(Binary Search)是应用在有序数据中的, 十分高效的查找算法。 如果数据是无序的, 我们先要将数据从小到大排序。其原理是比较待查数据与数组中值的数据的大小, 如果等千中间值则直接返回, 如果大千中间值, 就只在后半部分查找,如果小千中间值, 就在前半部分查找, 如此往复, 直到找到数据, 或剩下一个元素。

二分查找原理

二分查找代码实现

 

二分查找代码实现 

二分查找的时间复杂度是O(logn)

O在n个元素中寻找➔ @在n/2个元素中寻找今@在n/4个元素中寻找……在1个元素中寻找

n经过几次"---;-2 " = 1➔ log2n = O (logn)

二分查找:搜索过程从数组的中间元素开始, 如果中间元素正好是要查找的元素, 则搜索过程结束。
如果某一特定元素大千或者小千中间元素, 则在数组大千或小于中间元素的那一半中查找, 而且跟开始一样从中间元素开始比较。
如果在某一步骤数组为空, 则代表找不到。 这种搜索算法每一次比较都使搜索范围缩小一半。
二分查找的时间复杂度:0 (logn) 

插值查找

插值查找(Interpolation Search)是对实例的二分查找的改进, 其应用场景是排序数组中的值是均匀分布的。
二分查找总是到中间元素做左右划分, 而插值搜索会根据正在搜索的Key的大小来确定划分的位置

例如, 如果Key更接近最后 个元素, 则插值搜索会从后半部分开始进行数据划分

Mid= L + (R-L) X (target - data[L]) / data[R]-data[L]

 

 插值查找代码

分块查找

 分块查找和以上几种查找方式有所不同: 顺序查找的数列是可以无序的; 二分法查找和插入查找的数列必须是有序的;分块查找介千两者之间, 需要块有序, 元素可以无序。

分块查找先按照一定的取值范围将数列分成数块。 块内的元素是可以无序的, 但块必须是有序的。

所谓块有序, 就是处千后面位置的块中的最小元素都要比前面位置块中的最大元素大

分块查找查找过程:
印确定待查记录所在块(顺序或折半查找)@在块内查找(顺序查找)

 

 

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

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

相关文章

66.物体检测算法:区域卷积神经网络(R-CNN)系列

1. R-CNN ps:在计算机视觉中,深度学习之前,分类器用的是SVM 2. 兴趣区域(RoI)池化层 目的是为了让每个锚框都可以变成一个自己想要的形状。 3. Fast RCNN 具体步骤如下: 对整张图片用CNN抽特征&#xff…

IT服务管理(ITSM)是什么?ITSM工具哪个好用

什么是IT服务管理(ITSM) IT 服务管理 (ITSM) 包含一组策略和实践,这些策略和实践可用于为最终用户实施、交付和管理 IT 服务,以满足最终用户的既定需求和企业的既定目标。 在此定义中,最终用户可以包含员工、客户或业…

一网打尽链表的经典OJ题!链表必考笔试题第一弹

目录 0.前言 1. 移除链表元素 2. 反转链表 2.1 方法一(遍历反转链接关系) 2.2 方法二(节点头插构造新链表) 3.链表的中间节点 4. 链表中倒数第k个节点 5. 总结 0.前言 本文所有代码都已传入gitee,可自取 3链表OJ题p1 onlookerzy123456qwq/data_structu…

使用Electron创建桌面程序,从创建到打包

在桌面程序中,使用C#语言可以创建winform和WPF程序,他们2个在Windows中都非常的优秀,还有就是使用QT开发桌面,可以跨平台开发,这三种都是比较“正规”的,而Electron是使用框架开发桌面程序的,还…

JDBC核心技术_第9章:Apache-DBUtils实现CRUD操作

目录9.1 Apache-DBUtils简介9.2 主要API的使用9.2.1 DbUtils9.2.2 QueryRunner类9.2.3 ResultSetHandler接口及实现类9.1 Apache-DBUtils简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低&#xff0…

硬件设备上也能安全运行小程序

当前,在百度、支付宝、今日头条等各大巨头都把持小程序技术尚未开放的情况下,市面上可商用的小程序技术选择面非常狭窄。与此同时,企业仍希望实现 “一次开发,多端运行”,从而真正达到降本增效。今天为大家分享一下&am…

【c++复习梳理】--基础入门语法

目录 1.函数重载 1.1 函数重载概念 1.2C支持函数重载的原理--名字修饰(name Mangling) 2.引用 2.1 引用概念 2.2 引用特性 2.3 常引用 2.4 使用场景 2.4.1 做参数 2.4.2 做返回值 2.5 传值、传引用效率比较 2.5.1 传值、传引用效率比较--做参数返回 2.5.2 值和引用…

Linux--进程地址空间在线程方面的补充--页表的操作模式 0109

上一篇有关地址空间的博客 (入门自用)--Linux--程序地址空间--程序的创建--0907-0913_Gosolo!的博客-CSDN博客 很久之前写的,最近会完善。 1. 进程地址空间在线程方面的补充 线程由于资源都是从主进程直接拿来的,所以他们的pcb结构体中的地址…

如何让 Shell 提示符更酷炫

使用远程终端时,默认的命令行提示符格式已经能满足大部分用户需求了,但有时我们希望提示符看起来更直观、优雅、酷炫、美观,可以从中直接得到我们想要的信息,而且清晰分明。本文就详细讲解一下如何让 Shell 提示符更酷炫&#xff…

13_9、Java的IO流之NIO.2中Path、Paths、Files类的使用

一、引入1、Java NIO (New IO,Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的(IO是面向流的)、基于通道的…

cinder对接nfs后端存储

1.部署配置流程 1.安装nfs服务端 可以新增一个节点,或直接使用计算节点,因为存储节点上已经有lvm了这里直接使用计算节点来安装 yum install nfs-utils -y2.修改配置 vi /etc/exports # 要共享的目录 允许的网络1(操做权限) 允许的网络2(操做权限) …

Mybatis源码分析(八)MapperMethod的Select分析

目录一 Select1.1 参数的对应解析convertArgsToSqlCommandParam1.2 ID获取对应的MappedStatement1.3 MappedStatement交给执行器执行1.4 根据参数获取BoundSql1.5 SqlNode节点的解析1.5.1 MixedSqlNode1.5.2 IfSqlNode1.5.3 StaticTextSqlNode1.5.4 TextSqlNode1.6 执行器执行查…

Delete `␍`eslint(prettier/prettier) 错误的解决方案

Delete ‘␍’ eslint(prettier/prettier) 错误的解决方案 问题背景 在Windows笔记本上新拉完代码,在执行pre-commit时,出现如下错误: Delete ␍eslint(prettier/prettier)下面是几种个人尝试过的解决方案: 解决方案 一、Crtl…

【自学Python】Python bytes转string

Python bytes转string Python string转bytes教程 在 Python 中,bytes 类型和 字符串 的所有操作、使用和内置方法也都基本一致。因此,我们也可以实现将 bytes 类型转换成 string 类型。 Python bytes转string方法 Python bytes 转 string 方法主要有…

effective c++读书笔记4

设计class犹如设计type新type的对象应该如何被创建和销毁?:这会影响到你的class的构造函数和析构函数以及内存分配函数和释放函数的设计。对象的初始化和对象的赋值有什么样的区别?这答案决定你的构造函数和赋值操作符的行为,以及…

分享一套Springboot个人博客系统源码带本地搭建教程

Springboot个人博客系统源码带本地搭建教程,需要源码学习可私信我获取。 技术架构 前端框架:JQuery SemanticUI Markdown prism animatecss Tocbot zplayer lightbox 后端框架:SpringBoot 2.2.5 Mybatis Thymeleaf PageHelper m…

基于JAVA SSM springboot实现的抗疫物质信息管理系统设计和实现

基于JAVA SSM springboot实现的抗疫物质信息管理系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 …

记录一次Spring事务线上异常

Spring事务管理配置方式: XML模糊匹配,绑定事务管理注解,可对每个需要进行事务处理的方法单独配置,只需 Transactional,然后添加属性配置 为简便,本文使用注解方式。Spring初始化时,会通过扫描…

C进阶:通讯录(动态版本 + 文件操作)附源码

本文主要讲解通讯录的代码; 需要拥有结构体,动态内存开辟,文件操作的知识; 目录 🐲一.通讯录思路 🕊️二.三个文件的建立 😼三.所需要使用的变量的创建(包含在头文件contact.h中&…

从0到1完成一个Vue后台管理项目(十三、信息列表页面实现:对话框新增、DateTimePicker 日期时间选择器)

往期 从0到1完成一个Vue后台管理项目(一、创建项目) 从0到1完成一个Vue后台管理项目(二、使用element-ui) 从0到1完成一个Vue后台管理项目(三、使用SCSS/LESS,安装图标库) 从0到1完成一个Vu…