数据结构(Java)——查找算法(二)

TensorRT的安装:一步一步教会你如何安装TensorRT TensorRT(Tensor Runtime)是由NVIDIA开发的一个用于深度学习推理(inference)优化的库,它可以在NVIDIA的GPU上加速神经网络模型的推理过程,从而提高模型的性能和效率。安装完成后,需要将CUDA的安装路径添加到系统环境变量中,以便系统能够找到CUDA的库文件。根据你安装的CUDA版本,将CUDNN的库文件复制到CUDA的安装目录中。要使用TensorRT,首先需要安装NVIDIA的CUDA和cuDNN库,并根据NVIDIA官方文档安装TensorRT。 阅读详情

查找(二)

斐波那契查找(黄金分割查找)

也是在有序数列中进行进行查找的一种方法

**斐波那契数列{1,1,2,3, 5,8,13, 21, 34, 55 }**发现斐波那契数列的两个相邻数的比例,无限接近黄金分割值0.618

斐波那契(黄金分割法)原理:

斐波那契查找原理与前两种相似,仅仅改变了中间结点(mid)的位置,mid不再是中间或插值得到,而是位于黄金分割点附近,即mid=low+F(k-1)-1。

image-20211229200816714

对F(k-1)-1的理解::

F是斐波那契数列,k是斐波那契数列的第几个元素

1)由斐波那契数列 F[k]=F[k- 1]+F[k-2]的性质,可以得到(F[k]-1) = (F[k-1]-1) + (F[k-2]-1) +1。该式说明:只要顺序表的长度为F[k]-1,则可以将该表分成长度为F[k-1]-1和F[k-2]-1的两段,即如上图所示。从而中间位置为mid=low+F(k-1)-1

2)类似的,每一子段也可以用相同的方式分割

3)但顺序表长度n不一定刚好等于F[k]-1, 所以需要将原来的顺序表长度n增加至F[k]-1.这里的k值只要能使得F[k]-1恰好大于或等于n即可,由以下代码得到顺序表长度增加后,新增的位置(从n+ 1到F[k]-1位置),都赋为n位置的值即可。

// 非递归方法得到一个斐波那契数列
	public static int[] fib() {
		int[] f = new int[maxSize];
		f[0] = 1;
		f[1] = 1;
		for (int i = 2; i < maxSize; i++) {
			f[i] = f[i - 1] + f[i - 2];
		}
		return f;
	}
	
	public static int fibSearch(int[] a, int key) {//key 我们需要查找的关键码(值)
		int low = 0;
		int high = a.length - 1;
		int k = 0; // 表示斐波那契分割数值的下标
		int mid = 0; // 存放mid值
		int f[] = fib(); // 获取到斐波那契数列
		// 获取到斐波那契分割数值的下标
		while (high > f[k] - 1) {
			k++;
		}
		// 因为 f[k] 值 可能大于 a 的 长度,因此我们需要使用Arrays类,构造一个新的数组,并指向temp[]
		// 不足的部分会使用0填充
		int[] temp = Arrays.copyOf(a, f[k]);
		// 实际上需求使用a数组最后的数填充 temp
		// 举例:
		// temp = {1,8, 10, 89, 1000, 1234, 0, 0} => {1,8, 10, 89, 1000, 1234, 1234,
		// 1234,}
		for (int i = high + 1; i < temp.length; i++) {
			temp[i] = a[high];
		}

		// 使用while来循环处理,找到我们的数 key
		while (low <= high) { // 只要这个条件满足,就可以找
			mid = low + f[k - 1] - 1;
			if (key < temp[mid]) { // 我们应该继续向数组的前面查找(左边)
				high = mid - 1;
				// 为甚是 k--
				// 说明
				// 1. 全部元素 = 前面的元素 + 后边元素
				// 2. f[k] = f[k-1] + f[k-2]
				// 因为 前面有 f[k-1]个元素,所以可以继续拆分 f[k-1] = f[k-2] + f[k-3]
				// 即 在 f[k-1] 的前面继续查找 k--
				// 即下次循环 mid = f[k-1-1]-1
				k--;
			} else if (key > temp[mid]) { // 我们应该继续向数组的后面查找(右边)
				low = mid + 1;
				// 为什么是k -=2
				// 说明
				// 1. 全部元素 = 前面的元素 + 后边元素
				// 2. f[k] = f[k-1] + f[k-2]
				// 3. 因为后面我们有f[k-2] 所以可以继续拆分 f[k-1] = f[k-3] + f[k-4]
				// 4. 即在f[k-2] 的前面进行查找 k -=2
				// 5. 即下次循环 mid = f[k - 1 - 2] - 1
				k -= 2;
			} else { // 找到
				// 需要确定,返回的是哪个下标
				if (mid <= high) {
					return mid;
				} else {
					return high;
				}
			}
		}
		return -1;
	}

属实不太容易理解这个。

哈希表

是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

image-20211230085435538

应用实例:有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,名字,住址…),当输入该员工的id时,要求查找到该员工所有信息
要求:不使用数据库,速度越快越好=>哈希表(散列)

思路分析:

image-20211230090424242

一个散列函数的求法

public int hashFun(int id) {
		return id % size;
	}
基于自适应小波阈值算法的图像去噪 自适应小波阈值算法是一种基于小波变换的方法,它相对于传统的小波阈值去噪方法具有更好的性能和鲁棒性。该算法首先对图像进行小波变换,然后根据小波系数的大小确定一个自适应的阈值,将小波系数与阈值进行比较,大于阈值的系数被保留,小于阈值的系数被置零。在上述代码中,首先选取了小波函数sym4进行小波分解,然后根据标准差计算出阈值,使用wthresh函数进行阈值处理,最后进行反变换得到处理后的图像。该GUI界面与前面的自适应小波阈值算法代码结合,实现了图像的去噪,并提供了可视化的效果。 阅读详情

相关推荐

STM32新手必看:3分钟搞定ST官网资料下载(附F0系列手册+外设库下载技巧)

本文为STM32开发新手提供高效获取ST官网技术资料的完整指南,重点介绍如何快速下载STM32F0系列数据手册和外设库。通过系统性的资源分类解析和实用下载技巧,帮助开发者快速定位所需文档,建立本地知识库,提升开发效率。

ujm5678901的博客 270

以下哪种数据结构的查找效率最高

网易2017实习生招聘笔试题-Java开发工程师 以下哪种数据结构的查找效率最高 A 二叉树 B 队列 C 栈 D hash 个人参考答案:D欢迎下方讨论交流

xhyxxx的博客 2万+

axi时序图_(AXI)握手协议(pvld/prdy或者valid-ready)中ready打拍技巧

内容提要ready打拍的问题用FIFO的思路去解决用Buffer的思路去解决问题提出:ready时序如何优化?在valid/ready 握手协议中,valid 与 data的时序优化比较容易理解,(不熟悉valid/ready协议或者valid打拍方法的)大家可以参考上次推送(握手协议(pvld/prdy或者valid-ready或AXI)中Valid及data打拍技巧)。 但是有时候,关键路径是...

weixin_29763641的博客 3325

java四个数24_【Java】基础24:数据的存与取

在计算机世界里面所有的一切皆是数据,其存在的形式为二进制,也就是只有0和1。那么对于计算机来说,它需要做好两件事:如何存这些数据?如何取这些数据?这两件事情的过程就是数据结构。所以不要看这个定义好像很复杂的样子,其实很好理解,就是如何存数据和如何取数据。现在主要介绍简单的几个数据结构。一、堆栈和队列其实关于这两种数据结构,用中国的一个成语推陈出新就可以理解,这里面还牵扯到了一个小故事。《九章算术...

weixin_34221197的博客 244

西门子触摸屏教程wincc flexible2008 sp5 Smart V3 V4中文版软件

西门子触摸屏教程wincc flexible2008 sp5 Smart V3 V4中文版软件

liang007dudu的博客 1万+

LabVIEW vs Python:谁更适合你的ATE自动化测试系统?实测对比与选型建议

本文深入对比了LabVIEW和Python在ATE自动化测试系统中的性能表现、开发效率和应用场景,帮助工程师根据实时控制需求、数据处理复杂度及团队技能做出最优选型决策。通过实测数据和典型案例,分析两者在硬件集成、系统性能和维护成本等方面的差异,并提供混合架构实施建议。

weixin_29240711的博客 277

数据结构与算法之查找(Java版)

顺序查找 代码实现: public class SeqSearch { public static void main(String[] args) { int[] arr ={1,9,11,-1,34,89}; int index = seqSearch(arr, 11); if (index == -1){ System.out.println("没有找到"); }else { Sys

weixin_45802793的博客 241

LabVIEW波形图表时间轴设置:三种方法实现横坐标显示日期时间

在数据采集与设备监控场景中,波形图表的横坐标默认显示采样点序号而非日期时间,这给工程师分析历史数据带来不便。理解时间标识(Timestamp)的本质——一个自1904年起算的双精度秒数,是解决问题的关键。时间轴设置既是显示格式问题,更是数据层与显示层的协同设计。通过属性节点动态生成刻度标签、将时间标识数组直接作为X轴数据、或使用波形数据(Waveform)类型绑定t0与dt,分别适用于固定点数显示、非等间隔事件记录和等间隔连续采样等不同需求。合理选择方案并注意缓冲区预分配与时间连续性处理,可让波形图表准确呈

weixin_33416697的博客 255

java 效率极高的查询数据结构——SkipList 跳表

前一阵子和朋友聊天,他和我讲在面试中被问到跳表。当时我也很迷从来没听说过跳表,赶快学习了一下,学习了之后才发现这个数据结构不是很难,而且效率非常高,在平均情况下查找的时间复杂度约为O(log n)堪比平衡树。而且具体的数据结构的实现也非常有趣。SkipList 跳跃列表原理跳跃列表是一种由多条链表组合而成的允许快速查询有序元素的数据结构。跳跃列表中的每条链表表示一个层,每一层存在的元素都是前一层(前

往事散云烟,十寸光阴换一钱 5012

dex2oat编译优化调试

dex2oat编译调试的一些技巧和方法

jidapenglin28的专栏 5046

Lammps实现Ar的沸腾过程(包含in文件)

Lammps实现简单的沸腾过程

Rockyoung 3503

java查找排序的算法_java数据结构(二)常用简单的查找、排序算法

java数据结构(二)常用简单的查找、排序算法理解了Java数据结构,还必须要掌握一些常见的基本算法。理解算法之前必须要先理解的几个算法的概念:空间复杂度:一句来理解就是,此算法在规模为n的情况下额外消耗的储存空间。时间复杂度:一句来理解就是,此算法在规模为n的情况下,一个算法中的语句执行次数称为语句频度或时间频度。稳定性:主要是来描述算法,每次执行完,得到的结果都是一样的,但是可以不同的顺序输...

weixin_32672675的博客 262

黑猫带你学eMMC协议第14篇:eMMC FFU详解(Field Firmware Update)

1 前言 1.1 声明 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 本文结合eMMC JEDEC5.1协议手册查看效果更佳。 1.2 内容提要 1、ffu相关寄存器有哪些? 2、如何设置ffu? 3、什么是ffu?是否能够更新旧版本的固件到emmc? 4、ffu配置流程图。 2 什么是FFU 主机下载新的固件到eMMC,下载成功后eMMC将固件安装到设备。 3 相关寄存器/命令 SUPPORTED_MODES [493] FFU_FEATURES [492] 该

黑猫奥利奥的博客 4659

JAVA数据结构和算法(二)—线性查找

Question:N个不重复的数,按照线性查找其中的某个数,则该数所查找用的次数为? Answer: (1)概念:线型查找:把数组的每一个元素和检索关键字比较,按顺序从第一个元素一直检索到要查找的元素, 平均来说,程序要把查找关键字与一半数组元素进行比较。 (2)举例说明(Java语言): int[] c = {1,2,3,4,5,6,7,8,9,10};(为了演示方便直接取的1

迎着晨曦,Keep Going 410

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

数据结构笔记(二)—— 排序算法和查找算法(java代码实现)

数据结构——绪论 数据结构简介 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7vaPjMSg-1624172502134)(C:\Users\value\AppData\Roaming\Typora\typora-user-images\image-20210321175244346.png)] 数据、数据元素、数据项、数据对象 数据 是能被输入计算机且能被计算机处理的各种符号的集合 信息的载体 是对客观事物符号化的表示 能够被计算机识别、存储和加工 包括

qq_45473439的博客 212

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

数据结构Java版(二):用递归计算二叉树中叶子节点数目、实现图的存储、实现二分查找算法、实现双向冒泡排序算法

数据结构Java版(二):用递归计算二叉树中叶子节点数目、实现图的存储、实现二分查找算法、实现双向冒泡排序算法

weixin_50736686的博客 1055

使用Java实现数据结构和算法:排序、查找、图

数据结构和算法是计算机科学的两个基石,它们是解决各种复杂问题和优化计算机程序的关键工具。提高程序效率:好的数据结构和算法可以让程序更快地运行,更有效地利用计算资源。例如,使用快速排序算法比使用冒泡排序算法可以大大减少排序时间。解决复杂问题:数据结构和算法可以帮助开发人员解决各种复杂问题,如图形处理、人工智能、大数据处理等。例如,使用适当的数据结构和算法可以使搜索引擎更好地处理用户查询,并返回最相关的结果。提高程序可靠性:使用正确的数据结构和算法可以避免程序运行时出现各种错误和异常。

小易 178

Java基础算法与数据结构

包装类就是基本数据类型所对应的对象.

MOVEhomie的博客 736

java算法题思路_算法题思路总结

引言算法题,无外乎两类:一类考对基本算法实现的掌握,另一类考运用算法解决实际问题。第一类:排序:快排、归并排序、堆排序怎么实现的?查找:有序数组的二分查找、二叉查找树怎么实现的、红黑树是什么?字符串:KMP会吗?鄙人不才,只能想到算法世界里的冰山一角。这些基本算法的实现过程中的思想,需要掌握!最好能用自己的话讲明白。第二类:运用数据结构解决实际问题。这种题目有两个考察点:1、找到一种解决问题的算法...

weixin_39827798的博客 317

算法简介之二分查找

其实日常的开发中,因为更多的是复杂的业务逻辑,但分解之后,其实用到的算法知识并不多,更何况作为一名Java程序员,常用类库中已经实现了一些算法,例如排序,Hash等,但是随着开发的深入,我意识到算法其实不只是为了去解决一种特定的问题,也是开阔思维的一种很棒的办法,特开此篇,一方面学习,一方面记录。 其实二分查找的思想在生活中很多地方都有运用,比如我们猜数的时候,例如给定0-4000的范围选出一个数...

u012476022的博客 240

Java数据结构与算法入门

第一部分:Java数据结构要理解Java数据结构,必须能清楚何为数据结构?数据结构:Data_Structure,它是储存数据的一种结构体,在此结构中储存一些数据,而这些数据之间有一定的关系。而各数据元素之间的相互关系,又包括三个组成成分,数据的逻辑结构,数据的存储结构和数据运算结构。而一个数据结构的设计过程分成抽象层、数据结构层和实现层。数据结构在Java的语言体系中按逻辑结构可以分为两大类:线...

qq_37101453的博客 3万+

Java数据结构课程设计 二叉树查找

题目:在二叉树中查找值为X的结点,试设计打印值为X的结点的所有祖先的算法,假设值为X的结点不多于1个。 import java.util.*; public class BinTree { private List binTree; public static void main(String[] args) { Scanner reader = new Scanner(System

揸支枪|去打仗 1790

【数据结构查找算法篇】----线性查找【实战项目】

在数据结构中,有许多查找算法,它们根据数据的存储结构方式和结构的特点而有所区别,关于数据结构查找算法的学习,博主会依次详细的介绍现在比较常见的查找算法,通过对算法的介绍,搭配Java的实战项目,更深层次的对算法进行讲解。今天,我们就来介绍一下比较简单的查找算法----线性查找。线性查找,也叫顺序查找(Sequential Search),是一种最基本的查找算法。它适用于元素随机排列的数组(或者其他线性数据结构,如链表)。这种查找算法不要求数据被排序。线性查找的工作原理是。

m0_71685576的博客 1775

Java数据结构和算法

【前言】 Java数据结构和算法 BliBli视频链接地址为:《Java 数据结构与算法视频教程全集(195P)| 50 小时从入门到精通》 需要完整笔记课件等资料请联系邮箱:shaneholmes@qq.com 关于我的GitHub 以下是Java数据结构和算法的代码 Java数据结构和算法 ...

ShaneHolmes 2009

数据结构与算法【Java】06---七大查找算法总结

七大查找算法,查找算法分类,查找算法时间复杂度分析,查找算法代码实现,顺序查找,二分查找,插值查找,斐波那契查找,分块查找,哈希查找,树表查找,哈希表解决冲突的方法

鹤鸣呦呦、、的博客 2429

java数据结构与算法之“查找算法”

文章目录java数据结构与算法之“查找算法”查找算法介绍线性查找算法代码实现二分查找算法二分查找二分查找算法思路二分查找代码实现插值查找算法插值算法原理介绍举例说明插值查找算法 1-100 的数组代码实现注意事项斐波那契(黄金分割法)查找算法斐波那契(黄金分割法)查找基本介绍:斐波那契(黄金分割法)原理:对 F(k-1)-1 的理解:代码实现 java数据结构与算法之“查找算法” 查找算法介绍 在 java 中, 我们常用的查找有四种: 顺序(线性)查找 二分查找/折半查找 插值查找 斐波那契查找

ruan_luqingnian的博客 585

Java数据结构查找算法

• 核心原理:对二分查找的优化,针对均匀分布的有序数据,不固定取中间元素,而是通过公式(mid = low + (target - arr[low]) * (high - low) / (arr[high] - arr[low]))计算目标值可能所在的位置,缩小查找范围。Java 中数据结构的查找算法,核心围绕线性查找(无结构依赖)和基于有序结构的查找(依赖数据有序性,效率更高)展开,不同算法在时间复杂度、适用场景上差异明显,需根据数据是否有序、存储结构等选择。

2501_92639113的博客 755
上一篇: 数据结构(Java)——查找算法(一)
下一篇: 关于vue点击下载的避坑指南
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

痞子三分冷ゾジ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值