算法与数据结构【Java】:稀疏表

蓝桥杯国赛真题解析:最大公约数算法与Java/C++/Python三语言实现 最大公约数(GCD)是数论与算法中的基础概念,用于求解两个或多个整数的最大公共因子。其核心原理基于欧几里得算法(辗转相除法),通过递归或迭代高效求解。该算法在计算机科学中具有重要价值,不仅用于分数化简、周期计算等基础场景,更是算法竞赛和面试中的高频考点。在实际应用中,GCD常与数据结构结合处理区间查询,或利用裴蜀定理解决不定方程问题。本文以蓝桥杯国赛真题为例,深入剖析GCD的算法优化与工程实现,并针对Java、C++、Python三种语言,详细讲解代码细节、性能考量与常见避坑指南,帮助读者掌握跨语言的高效解 阅读详情

很多情境下,存储数据的最好方式就是表。

 
当数据较为稠密的聚集在某个坐标范围中时,采用数组是最好的选择。
比如,要存储一个班学生的成绩,该班级有30人,编号从1-30,有10门课,编号1-10
那么就可以用一个30x10的数组存储这张成绩表,经济实惠使用方便

但是有的时候数据非常稀疏,比如一个学校一共开设了1000门课,有的学生可以随意选课,现在需要一个数据结构存储每个学生每门课的成绩。
显然一个学生一学期只能上十几门课,所以表内的数据很稀疏,大部分结点都是空结点,没有数据。如果使用数组,那就需要提前分配好空间,不仅成绩表本身很大,也浪费了很多空间。

这个时候,就可以使用稀疏表。


想象现在有一张记录3000名学生在1000门课的成绩。
现在把每个非空的表中元素抽象成一个结点,每一列串起来形成很多列,这些列一起放入一个数组;每一行串起来形成很多行,这些行一起放入一个数组,这样,整个稠密的数组被选出来的结点编织成一张稀疏的网。
维护与存储这张网即可

如下图:

 

稀疏表的属性如下:


    int rowTotalNum;    //总行数
    int colTotalNum;    //总列数
    LinkedList[] row;    //行链表的指针,大小需要与下方一致
    LinkedList[] col;    //列链表的指针,大小需要与下方一致

稀疏表提供的方法如下:


    SparseTable():构造方法,初始化参数
    void insert(int value ,int rowIndex, int colIndex):向稀疏表的某个点(rowIndex,colIndex)插入value值
    void remove(int rowIndex, int colIndex):删除某个坐标(rowIndex,colIndex)的结点
    int getValue(int rowIndex, int colIndex):获取指定坐标(rowIndex,colIndex)的值,如果没有该结点,返回-1;方法内部提供了两种方法,按列查找和按行查找
    void printSelfByRow():通过行链表打印稀疏表
    void printSelfByCol():通过列链表打印稀疏表

    LinkedList getCol(int colIndex):获取某列的列链表
    LinkedList getRow(int rowIndex):获取某行的行链表

下方是Java实现:

package com.sparsetable;

public class SparseTable {
	int rowTotalNum;	//总行数
	int colTotalNum;	//总列数
	LinkedList[] row;	//行链表的指针,大小需要与下方一致
	LinkedList[] col;	//列链表的指针,大小需要与下方一致
	
	//构造方法
	SparseTable(){
		rowTotalNum = 500;
		colTotalNum = 500;
		row = new LinkedList[rowTotalNum];
		col = new LinkedList[colTotalNum];
		for (int i=0; i<rowTotalNum; i++)
			r
整数列表与稀疏矩阵ADT设计 本文定义了整数列表和二维数组的抽象数据类型(ADT),并通过Java抽象类展示其操作接口。针对稀疏矩阵场景,提出了坐标列表和行链表两种节省空间的实现方式,并分析了稀疏矩阵在何种零元素比例下优于标准存储。内容涵盖ADT设计、数据结构选择与空间优化策略。 阅读详情

相关推荐

二叉树最近公共祖先(LCA)算法详解与工程实践

最近公共祖先(LCA)是树结构中的基础算法问题,用于查找两个节点的最近共同祖先节点。其核心原理是通过递归或迭代遍历树结构,利用后序遍历特性自底向上查找。该算法在时间复杂度上可达O(N),空间复杂度取决于实现方式。工程实践中,LCA算法广泛应用于数据库索引优化、版本控制系统、DOM树处理等场景。针对二叉搜索树等特殊结构,还可利用节点值关系进一步优化。掌握LCA算法不仅能提升面试通过率,更能帮助开发者处理实际工程中的树形结构问题,如组织架构权限判断、商品分类处理等。递归和父指针哈希表是两种典型解法,各有其适用场

weixin_34130389的博客 433

Python dict 从无序到有序:哈希表与紧凑字典的演进

哈希表是字典高效查找的核心,但它的物理布局天然导致遍历顺序与插入顺序无关。Python 3.6 引入的紧凑字典(compact dict)将索引与存储分离,在保持 O(1) 查找的同时降低了内存占用,并意外地保留了插入顺序——这一行为到 3.7 才成为语言规范。理解紧凑字典的底层设计,不仅有助于解析扩容与删除带来的顺序变化,也能在构建大型映射结构或优化对象属性存储时做出更合理的内存权衡。从 Python 3.11 到 3.13,字典的 on-disk 布局与并发控制仍在持续演进。掌握这些原理,可以让你从“背

weixin_34342207的博客 356

深入理解Tai-e实验代码:从架构解析到实战调试的完整指南

程序分析是软件工程与编译原理中的核心领域,旨在通过静态或动态方法理解程序行为、发现潜在缺陷。其基本原理包括构建中间表示、数据流分析、指针分析等,通过算法在控制流图或调用图上进行信息推导。在工程实践中,一个设计良好的分析框架能极大提升开发效率与可靠性。Tai-e作为现代化的Java程序分析框架,以其清晰的模块化架构和丰富的教学资源,成为学习与实践程序分析的理想平台。理解其分层设计、数据流与指针分析框架的抽象,以及实验代码的典型结构,是掌握静态分析技术、实现如常量传播等经典算法的关键。本文聚焦于Tai-e实验代

weixin_30321449的博客 347

Java:实现Sparse Table稀疏表算法(附完整源码)

Java:实现Sparse Table稀疏表算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 514

【春招笔试题】2025.03.08-淘天春招笔试题

1️⃣:数位和计算2️⃣:可行范围确定3️⃣:枚举最优解整体难度:简单该题目要求在不超过k次操作(每次+1或-1)的前提下,找到一个数m,使其数位和w(m)最大。关键思路是确定可行的数字范围[max(1,n-k), n+k],然后枚举这个范围内的所有数字,计算它们的数位和,取最大值。时间复杂度O(k×log(n+k)),其中k是操作次数限制,log(n+k)是计算数位和的复杂度。

春秋招笔试突围 525

20、P系统模拟:从通用模拟到种群动态模拟

本文详细探讨了P系统的模拟方法,从通用模拟到种群动态模拟的演进,涵盖了计算复杂度、模拟算法设计、顺序与并行模拟器的实现及其性能对比,以及种群动态P系统的关键技术和模拟流程。通过ABCDGPU框架和DCBA算法,展示了如何在GPU环境下高效模拟具有活性膜的P系统,特别是在处理规则概率、对象竞争和同步机制方面的挑战。最后,文章展望了P系统模拟在未来生物信息学、优化问题及与其他前沿技术结合的应用前景。

blue的专栏 109

【信息科学与工程学】信息科学领域工程——第十一篇 数据库基础07 关系代数

核心数学:线性代数、度量空间、概率论、优化理论计算理论:数据结构、算法复杂度、信息论机器学习:表示学习、深度学习、度量学习数据库系统:索引结构、查询处理、事务理论分布式系统:一致性、复制、分片理论硬件体系:并行计算、内存层次、存储优化质量评估:信息检索评价、相似度质量评估高级数学:泛函分析、微分几何、随机矩阵理论这些理论基础共同支撑了向量数据库的设计、实现和优化,使其能够高效处理高维向量数据,满足大规模相似性搜索的需求。

weixin_49199313的博客 682

【信息科学与工程学】【数据中心】第三十二篇 云数据中心的计算/存储/网络的核心挑战01

状态方程: SOCk+1​=SOCk​−Qn​ik​Δt​;: 三相电流变换到αβ坐标系: iα​=32​​(ia​−21​ib​−21​ic​), iβ​=32​​(23​​ib​−23​​ic​). 计算瞬时有功功率p和无功功率q,经低通滤波器分离直流分量,反变换得基波电流,差值即为谐波指令。: 节点i的信念 bi​(xi​)=ϕi​(xi​)∏j∈N(i)​mji​(xi​), 消息 mij​(xj​)=∑xi​​ϕi​(xi​)ψij​(xi​,xj​)∏k∈N(i)\j​mki​(xi​).

weixin_49199313的博客 217

开源:AI+无人机巡检系统项目调研

本文系统梳理了主流开源无人机巡检技术栈,涵盖飞控系统(PX4/ArduPilot)、地面站软件(QGroundControl)、AI视觉识别(VisDrone/MPID/CPLID数据集)、三维重建(OpenDroneMap/COLMAP)和仿真模拟(AirSim/Gazebo)五大领域。通过对比各项目的技术特点、开发语言、开源协议及商用友好度,为无人机巡检产品开发提供完整的技术选型参考。重点推荐PX4飞控、DroneKit开发API等商用友好项目,同时分析了GPL/AGPL协议项目的开源要求。

lovehu6686的博客 2447

LC-3 机器语言 指令集

生活本就沉闷,但跑起来就有风

笔记 1万+

Sony SLVS-EC接口实战:如何用Xilinx K7 FPGA接收IMX421传感器数据(附电气特性匹配技巧)

本文详细介绍了在Xilinx Kintex-7 FPGA平台上实现Sony IMX421图像传感器SLVS-EC接口数据接收的完整实战方案。内容涵盖从硬件选型、PCB布局的电气特性匹配技巧,到FPGA内部GTX收发器配置、多通道绑定以及SLVS-EC协议数据解析与图像重组的关键步骤,为高速视觉系统开发提供了宝贵的调试经验和系统集成指导。

efc12345678的博客 261

KEPServerEX实战:Modbus TCP与RTU双协议配置详解

本文详细解析了如何使用KEPServerEX软件同时配置与管理Modbus TCP和RTU混合网络。通过实战步骤,指导用户建立双协议通道、配置设备与标签,并分享核心的地址映射规则与通讯故障排查技巧,帮助工业自动化工程师高效集成多协议设备,简化数据采集架构。

weixin_29186249的博客 397

http协议

HTTP 协议由起始行、头部、空行、消息体组成。

qq_34059233的博客 88

网络分析工具Wireshark系列专栏:01-专栏导读

随着人工智能技术的普及,越来越多的博主开始利用AI进行内容创作,导致优快云等平台上充斥着大量低质量的洗稿文章,严重影响了技术软文的质量和可信度。为了应对这一现象,提升技术内容的质量,瑞哥决定推出系列技术专栏,为大家带来系统、深入且高质量的技术学习资源。这些专栏将帮助读者从入门到精通,特别适合习惯通过文档学习的技术爱好者。作为首个专栏,我们将聚焦于Wireshark——一款广受欢迎的网络协议分析工具。根据优快云后台的反馈,许多读者表示Wireshark是他们欠缺的一项技能。因此,本专栏将通过精心设计的课程

网络技术联盟站 357

基于simulink的车道保持辅助系统(LKA)的仿真与实现

本文介绍了如何利用Simulink实现车道保持辅助系统(LKA)的仿真与建模。首先对比了车道偏离预警(LDW)和LKA的功能差异,强调LKA的主动干预特性。接着详细阐述了LKA系统架构,包括环境感知、决策控制等核心组件,并基于自行车模型建立车辆横向动力学方程。 文章重点演示了Simulink建模步骤:搭建车辆动力学模型、设计LKA控制器(采用LQR算法)、实现执行器接口和驾驶员干预检测。通过四个典型场景的仿真测试,验证了系统在直道行驶、弯道跟踪等工况下的控制性能,并给出了关键评价指标。最后展望了MPC控制、

amy_mhd的博客 226

【论文解读--Xdog】新型电驱式四足机器人研制与测试

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、四足机器人体型大小和驱动方式的比较二、四足机器人设计一些重要的结论三、系统控制框架四、系统硬件框架五、力位混合控制(阻抗控制)六、侧向平衡控制(和VMC如出一辙)七、电机驱动系统研制(FOC磁场定向控制)总结 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对新型电驱式四足机器人研制与测试做个简单的介绍,具体内容后续再更,其他模块可以参

qq_35635374的博客 3724

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 算法与数据结构【Java】:跳跃链表
下一篇: 算法与数据结构【C++】:稀疏表
WilliamCode
博客等级 码龄11年 118粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值