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

查找(检索):

定义:从给定的数据中找到对应的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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kafka使用以及基于zookeeper集群搭建集群环境

一、环境介绍 zookeeper下载地址&#xff1a;https://zookeeper.apache.org/releases.html kafka下载地址&#xff1a;https://kafka.apache.org/downloads 192.168.142.129 apache-zookeeper-3.8.4-bin.tar.gz kafka_2.13-3.6.0.tgz 192.168.142.130 apache-zookee…

Redis的内存预分配策略

Redis的内存预分配策略是一种优化手段&#xff0c;旨在减少频繁的内存分配和释放操作对性能的影响。以下是对Redis在使用各数据结构类型时内存变化以及触发底层数据结构变化条件的详细分析&#xff1a; 一、内存预分配策略概述 Redis通过预先分配足够的内存&#xff0c;可以提高…

卸载wps后word图标没有变成白纸恢复

这几天下载了个wps教育版&#xff0c;后头用完了删了 用习惯的2019图标 给兄弟我干没了&#xff1f;&#xff1f;&#xff1f; 其他老哥说什么卸载关联重新下 &#xff0c;而且还要什么撤销保存原来的备份什么&#xff0c;兄弟也是不得不怂了 后头就发现了这个半宝藏博主&…

麒麟服务器安装kafka--亲测

我这安装的是单机版本的&#xff1a; 下载地址&#xff1a;Index of /kafka/3.9.0 我下载的是&#xff1a;https://dlcdn.apache.org/zookeeper/zookeeper-3.9.3/apache-zookeeper-3.9.3-bin.tar.gz https://dlcdn.apache.org/kafka/3.9.0/kafka_2.12-3.9.0.tgz 一、下载并上…

104周六复盘 (188)UI

1、早上继续看二手书的一个章节&#xff0c;程序开发流程、引擎、AI等内容&#xff0c; 内容很浅&#xff0c;基本上没啥用&#xff0c;算是复习。 最大感触就是N年前看同类书的里程碑、AI相关章节时&#xff0c;会感觉跟自己没啥关系&#xff0c; 而如今则密切相关&#xf…

Chromebook 的 4 个最佳变声器

您对使用chromebook 变声器感到困惑吗&#xff1f;您是否认为在 Chromebook 上安装变声器很困难&#xff1f;如果是&#xff0c;那么这篇文章适合您&#xff0c;因为在 Chromebook 上安装和使用简单且准确的变声器非常简单且轻松。 在本文中&#xff0c;我们将分享适用于 Chro…

DC系列之DC-8渗透测试

DC-8 靶机渗透测试实战 靶机下载地址&#xff1a; https://download.vulnhub.com/dc/DC-8.zip&#xff08;下载速度慢可以用迅雷下载&#xff09; 一、实验环境 实验环境&#xff1a; kali2024&#xff1a;192.168.234.145&#xff08;nat模式&#xff09; 靶机环境DC-7&#…

12306分流抢票软件 bypass v1.16.43 绿色版(春节自动抢票工具)

软件介绍 12306Bypass分流抢票软件&#xff0c;易操作强大的12306抢票软件&#xff0c;全程自动抢票&#xff0c;云识别验证码打码&#xff0c;多线程秒单、稳定捡漏&#xff0c;支持抢候补票、抢到票自动付款&#xff0c;支持多天、多车次、多席别、多乘客、短信提醒等功能。…

NS4861 单灯指示独立耳锂电池充放电管理 IC

1 特性  最大 500mA 线性充电电流&#xff0c;外部可调节  内部预设 4.2V 充电浮充电压  支持 0V 电池充电激活  支持充满 / 再充功能  内置同步升压放电模块&#xff0c;输出电压 5.1V  同步升压 VOUT 最大输出电流 500mA  VOL/OR 独…

基于Java的敬老院管理系统的设计和实现【源码+文档+部署讲解】

基于Java的敬老院管理系统设计和实现 摘 要 新世纪以来,互联网与计算机技术的快速发展,我国也迈进网络化、集成化的信息大数据时代。对于大众而言,单机应用早已成为过去&#xff0c;传统模式早已满足不了当下办公生活等多种领域的需求,在一台电脑上不联网的软件少之又少&#x…

基于YOLOv8的道路缺陷检测系统

基于YOLOv8的道路缺陷检测系统 (价格80) 包含 [Block crack, Longitudinal crack, Strip repair, Transverse crack] [‘块状裂缝’&#xff0c;‘纵向裂缝’&#xff0c;‘修复’&#xff0c;‘横向裂缝’] 4个类 通过PYQT构建UI界面&#xff0c;包含图片检测&#xff…

我用AI学Android Jetpack Compose之开篇

最近突发奇想&#xff0c;想学一下Jetpack Compose&#xff0c;打算用Ai学&#xff0c;学最新的技术应该要到官网学&#xff0c;不过Compose已经出来一段时间了&#xff0c;Ai肯定学过了&#xff0c;用Ai来学&#xff0c;应该问题不大&#xff0c;学习过程记录下来&#xff0c;…

unity学习7:unity的3D项目的基本操作: 坐标系

目录 学习参考 1 unity的坐标系 1.1 左手坐标系 1.2 左手坐标系和右手坐标系的区别 1.3 坐标系的原点(0,0,0) 2 坐标系下的具体xyz坐标 2.1 position这里的具体xyz坐标值 2.2 父坐标 2.3 世界坐标和相对坐标 2.3.1 世界坐标 2.3.2 相对坐标 2.4 父物体&#xff0c;…

爬虫案例-爬取某度文档

文章目录 1、第三方库的安装和pytesseract安装2、爬取某度文档的代码3、效果图 1、第三方库的安装和pytesseract安装 #以下是安装http请求的第三方库 pip install requests #以下是安装处理文档的第三方库 pip install python-docx #以下是安装处理图片的第三方库 pip install…

在Lua中,Metatable元表如何操作?

Lua中的Metatable&#xff08;元表&#xff09;是一个强大的特性&#xff0c;它允许我们改变表&#xff08;table&#xff09;的行为。下面是对Lua中的Metatable元表的详细介绍&#xff0c;包括语法规则和示例。 1.Metatable介绍 Metatable是一个普通的Lua表&#xff0c;它用于…

【Ubuntu20.04】Apollo10.0 Docker容器部署+常见错误解决

官方参考文档【点击我】 Apollo 10.0 版本开始&#xff0c;支持本机和Docker容器两种部署方式。 如果您使用本机部署方式&#xff0c;建议使用x86_64架构的Ubuntu 22.04操作系统或者aarch64架构的Ubuntu 20.04操作系统。 如果您使用Docker容器部署方式&#xff0c;可以使用x…

springboot整合Logback

Logback介绍 描述 Logback是由log4j创始人设计的另外一种开源日志组件&#xff0c;性能比log4j要好。相对是一个可靠、通用、快速而又灵活的Java日志框架。 Logback主要分三个模块 1、logback-core&#xff1a;其他两个模块的基础模块 2、logback-classic&#xff1a;它是lo…

仓库叉车高科技安全辅助设备——AI防碰撞系统N2024G-2

在当今这个高效运作、安全第一的物流时代&#xff0c;仓库作为供应链的中心地带&#xff0c;其安全与效率直接关系到企业的命脉。 随着科技的飞速发展&#xff0c;传统叉车作业模式正逐步向智能化、安全化转型&#xff0c;而在这场技术革新中&#xff0c;AI防碰撞系统N2024G-2…

学习笔记|arduino uno r3| RGB 灯珠|Atmega328P|PWM|analogWrite|analogRead函数: RGB灯珠呼吸灯

目录 RGB 灯珠呼吸灯实验RGB 灯珠实验概述工作原理组件清单接线程序代码编译和执行 Tips&#xff1a; Arduino常用的函数解释analogWrite(pin, value)函数analogRead(pin)函数 总结 RGB 灯珠呼吸灯实验 RGB 灯珠实验概述 1-三色LED黑板模块的PCB颜色为黑色&#xff0c;使用5M…

杰发科技——使用ATCLinkTool解除读保护

0. 原因 在jlink供电电压不稳定的情况下&#xff0c;概率性出现读保护问题&#xff0c;量产时候可以通过离线烧录工具避免。代码中开了读保护&#xff0c;但是没有通过can/uart/lin/gpio控制等方式进行关闭&#xff0c;导致无法关闭读保护。杰发所有芯片都可以用本方式解除读保…