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

数据结构复习 (顺序查找,对半查找,斐波那契查找,插值查找,分块查找)

查找(检索):

定义:从给定的数据中找到对应的K

1,顺序查找:

O(n)的从前向后的遍历

2,对半查找,要求有序

从中间开始查找,每次检查中间的是否正确,不正确就根据性质去左边or右边找

2.1对半插入排序

在找位置的时候是logn 去找, 但是最后需要换位置 排序之后仍然是O()N^2)

对同一序列分别进行对半插入排序和直接插入排序,两者之间

可能的不同之处是___D___。【考研题全国卷】

A.排序的总趟数

B.元素的移动次数

C.使用辅助空间的数量

D.元素的比较次数

2.2二叉判定树(扩充二叉树):

在二叉树中空指针的位置,都增加特殊的结点(空叶结点),由此生成的二叉树称为扩充二叉树。称圆形结点为内结点,方

形结点为外结点

➢当high-low+1 £ 0时:T(low, high)为空;

➢当high-low+1 > 0时,令mid = ë(low+high)/2û

✓T(low, high)的根结点是mid ;

✓根结点的左子树是Rlow,…,Rmid-1对应的二叉判定树;

✓根结点的右子树是Rmid+1,…,Rhigh对应的二叉判定树。

对半查找算法的每次成功查找正好对应判定树的一个内结点,元素比较次数为该结点的深度加1,即从根到该结点所经过的结点数。

每次不成功的查找对应判定树的一个外结点,元素比较次数恰好为该结点深度,即根到该节点所经过的内结点数

平均失败的查找长度:外节点深度之和/外节点数(3.5)

平均成功查找长度:(内节点深度之和)/内节点数+1 (下面的是2.9)

➢优点:平均查找效率不超过O(logn) ,比顺序查找高。

➢缺点:

✓适用于有序数组,对有序链表难以进行二分查找。

✓适用于静态查找场景,若元素动态变化(频繁增删)后,

为了维持数组有序,需要O(n)时间调整,与顺序查找相比,

就没有优势了。

3,斐波那契查找

斐波那契数列:f0=0,f1=1;fi=fi-1+fi-2

斐波那契查找:
如果一个数组的长度是一个斐波那契数-1 ,那么他的左右就被分为了左边F(k-1)-1,中间一个,右边F(k-1)-;

所以我们可以尝试根据斐波那契数列来优化查找

假定数组中元素个数n是某个斐波那契数减1,即n=Fk-1。

令mid ¬ Fk-1把K与R[mid]比较,若:

➢K < R[mid]:在R[1]…R[Fk-1-1]内继续查找;

➢K > R[mid]:在R[Fk-1+1]…R[Fk-1]内继续查找;

➢K = R[mid]:则查找成功。

int FibSearch(int R[], int n, int K, int F[], int k){

int low=1,high=n;

while(low <= high){

int mid=low+F[k-1]-1;      //因为我们的F[k]=f[k-1]+f[k-2],现在以f[k-1]为mid

if(K<R[mid]) {high=mid-1; k--;}//我们抛弃了f[k-2] ,查找范围从low--low+f[k]--->low---low+f[k-1]

//长度为 f[k-1]-1

else if(K>R[mid]) {low=mid+1; k-=2;}  //我们抛弃了f[k-1],从low--f[k]--->low+f[k-1]-->low+f[k]

//长度为f[k-2]-1

else return mid;

}

return -1;

}

本质是从黄金比例查找

并且进入左边的几率更大,所需要的比较次数少,

4,插值查找

根据数学所学,根据直线算出可能的横坐标,假设原来的都是均分布且线性增长

平均时间复杂度:loglogn --->n

从O(logn)到O(loglogn)优势并不明显(除非查找表极长,

或比较操作成本极高)。

比如n=232 » 42.9亿

logn = log232 = 32

loglogn= log32 = 5

➢需引入乘除法运算。

➢元素分布不均匀时效率受影响。

➢实际中可行的方法:首先通过插值查找迅速将查找范围缩

小到一定的范围,然后再进行对半查找或顺序查找。

5,分块查找:

将大数组分成若干子数组(块),每个块中的数值都比后一块中数值小(块内不要求有序),建一个索引表记录每个子表的起始地址和各块中的最大关键字

查找的过程:先块间对半查找,再内部顺序查找,类似组相联cache

相关文章:

数据结构复习 (顺序查找,对半查找,斐波那契查找,插值查找,分块查找)

查找&#xff08;检索&#xff09;&#xff1a; 定义&#xff1a;从给定的数据中找到对应的K 1&#xff0c;顺序查找&#xff1a; O(n)的从前向后的遍历 2&#xff0c;对半查找&#xff0c;要求有序 从中间开始查找&#xff0c;每次检查中间的是否正确&#xff0c;不正确就…...

el-input输入框需要支持多输入,最后传输给后台的字段值以逗号分割

需求&#xff1a;一个输入框字段需要支持多次输入&#xff0c;最后传输给后台的字段值以逗号分割 解决方案&#xff1a;结合了el-tag组件的动态编辑标签 那块的代码 //子组件 <template><div class"input-multiple-box" idinputMultipleBox><div>…...

C# 枚举格式字符串

总目录 前言 当前文章为 C# 中的格式设置(格式化字符串) 大全 中的一个小章节。 一、概述 1. 基本信息 可以使用 Enum.ToString 方法&#xff0c;新建表示枚举成员的数字值、十六进制值或字符串值的字符串对象。枚举格式说明符不区分大小写。 二、自定义数字格式说明符详解…...

【51单片机-零基础chapter1】

安装软件(配套的有,不多赘述) 1.管理员身份运行keil和破解软件kegen 将CID代码复制粘贴到 一定要管理员方式,不然会error 插入板子 我的电脑,管理 1.如果是拯救者,查看端口,如果没有则显示隐藏 2.苹果不知道,好像不可以 3.其他电脑在"其他设备找" (注:本人在校已…...

记录:导出功能:接收文件流数据进行导出(vue3)

请求接口&#xff1a;一定要加responseType: blob 后端返回数据&#xff1a; api.js export function export() {return request({url: dev/api/export,method: get,responseType: blob,//一定要加}) } vue&#xff1a; import {export} from /api// 导出 const exportTab…...

基于Spring Boot + Vue3实现的在线汽车保养维修预约管理系统源码+文档

前言 基于Spring Boot Vue3实现的在线汽车保养维修预约管理系统是一种前后端分离架构的应用&#xff0c;它结合了Java后端开发框架Spring Boot和现代JavaScript前端框架Vue.js 3.0的优势。这样的系统可以为汽车服务站提供一个高效的平台来管理客户的预约请求 技术选型 系统…...

PHP框架+gatewayworker实现在线1对1聊天--接收消息(7)

文章目录 接收消息的原理接收消息JavaScript代码 接收消息的原理 接收消息&#xff0c;就是接受服务器转发的客户端消息。并不需要单独创建函数&#xff0c;因为 ws.onmessage会自动接收消息。我们需要在这个函数里进行处理。因为初始化的时候&#xff0c;已经处理的init类型的…...

18.1、网络安全策略分类 流程 内容

目录 网络安全测评概况网络安全测评类型—基于测评目标分类网络安全测评类型—基于实施方式分类网络安全测评类型—基于测评对象保密性分类网络安全等级保护测评内容网络安全测评流程与内容 网络安全测评概况 网络安全测评&#xff0c;它是指参照一定的标准规范要求&#xff0…...

深入理解连接池:从数据库到HTTP的优化之道

在现代应用开发中&#xff0c;高效的资源管理是关键&#xff0c;其中连接池&#xff08;Connection Pool&#xff09;技术起到了至关重要的作用。本文将带你深入了解连接池的概念及其在数据库和HTTP通信中的应用&#xff0c;结合 JDBC 与 Druid 的关系&#xff0c;以及 HttpURL…...

【2025最新计算机毕业设计】基于SpringBoot+Vue智慧养老医护系统(高质量源码,提供文档,免费部署到本地)【提供源码+答辩PPT+文档+项目部署】

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...

关于使用vue-cropperjs上传一张图后,再次上传时,裁剪的图片不更新的问题

不更新的原因 它与cropperjs不太一样&#xff0c;vue-cropperjs不是一个实例&#xff0c;当页面首次刷新时它就已经创建&#xff0c;即使后面更改了它的某些数据也不会改变&#xff0c;因为浏览器会对dom组件进行缓存。 解决办法 可以使用v-if来控制它的显示和隐藏&#xff…...

学习threejs,导入VTK格式的模型

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.VTKLoader VTK模型加…...

大麦抢票科技狠活

仅供学习参考&#xff0c;切勿再令您所爱的人耗费高昂的价格去购置黄牛票 ⚠️核心内容参考: 据悉&#xff0c;于购票环节&#xff0c;大麦凭借恶意流量清洗技术&#xff0c;于网络层实时甄别并阻拦凭借自动化手段发起下单请求的流量&#xff0c;强化对刷票脚本、刷票软件以及…...

PostgreSQL 表达式

PostgreSQL中的表达式是一种强大的工具&#xff0c;用于在数据库查询中处理和计算数据。它们由一个或多个值、运算符和PostgreSQL函数组合而成&#xff0c;类似于公式&#xff0c;并用于求值【1†source】。 在PostgreSQL中&#xff0c;表达式可以分为不同类型&#xff0c;如布…...

WPF区域导航+导航参数使用+路由守卫+导航日志

背景&#xff1a;使用ContentControl控件实现区域导航是有Mvvm框架的WPF都能使用的&#xff0c;不限于Prism 主要是将ContenControl控件的Content内容在ViewModel中切换成不同的用户控件 下面是MainViewModel&#xff1a; private object body;public object Body {get { retu…...

Springboot启动报错:Failed to start bean ‘documentationPluginsBootstrapper‘

在使用SpringBoot2.7时&#xff0c;由于与Swagger2的版本不兼容引发的ApplicationContextException&#xff0c;解决方法是在application.yml中配置spring.mvc.pathmatch.matching-strategy:ant_path_matcher。 org.springframework.context.ApplicationContextException: Fai…...

qt-C++笔记之动画框架(Qt Animation Framework)入门

qt-C笔记之动画框架(Qt Animation Framework)入门 code review! 在 Linux 平台上&#xff0c;使用 C 和 Qt 框架实现动画是一个非常好的选择。Qt 提供了强大的动画框架&#xff08;Qt Animation Framework&#xff09;&#xff0c;使得动画的实现变得简单高效。下面将介绍 Qt …...

C++26 函数契约(Contract)概览

文章目录 1. 什么是契约编程?契约编程的三大核心: 2. C26 契约编程的语法语法示例 3. 契约检查模式3.1. default 模式3.2. audit 模式3.3. axiom 模式检查模式的设置 4. 契约编程与传统 assert 的区别示例对比 5. 契约编程的应用场景6. 注意事项7. 示例: 带契约的矩形面积计算…...

Flink CDC 自定义函数处理 SQLServer XML类型数据 映射 doris json字段方案

Flink CDC 自定义函数处理 SQLServer XML类型数据方案 1. 背景 因业务使用SQLServer数据库&#xff0c;CDC同步到doris 数仓。对于SQLServer xml类型&#xff0c;doris没有相应的字段对应&#xff0c; 可以使用json来存储xml数据。需要进行一步转换。从 flink 自定义函数入手…...

F.interpolate函数

F.interpolate 是 PyTorch 中用于对张量&#xff08;通常是图像数据&#xff09;进行插值操作的函数&#xff0c;常用于调整张量的大小&#xff0c;例如改变图像的分辨率。它支持多种插值方法&#xff0c;包括最近邻插值、双线性插值和三次插值等。 语法 torch.nn.functional…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...