算法设计--JAVA实现稀疏矩阵

【华为机试真题 JAVA】最大矩阵和-100 给定一个二维整数矩阵,要在这个矩阵中选出一个子矩阵,使得这个子矩阵内所有的数字和尽量大,我们把这个子矩阵称为和最大子矩阵,子矩阵的选取原则是原矩阵中一块相互连续的矩形区域。 阅读详情

稀疏矩阵

在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。
此处使用JAVA代码实现对矩阵的压缩与扩展
可以想象,当我们玩五子棋或其他棋类游戏时,当我们需要对游戏来进行存档。那么可以把棋盘来当作一个矩阵,有棋子的地方用相应的数字来进行表示。没有棋子的地方用0来表示。
这里假设棋盘为11*11的一个矩阵。
倘若棋盘中1为黑子,2为白子。
原始矩阵为:
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 1 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0

那么问题来了,我们要存储这盘棋。那我们需要将这盘棋所有的二维数组整个存储吗?当然不是,我们可以考虑将原始矩阵的行和列存储进来,并将对应行列的值进行存储下来,这样就只需要存储较少的数值了。如下图:

rowcolvalue
11112
221
232

其中,第一行为原始矩阵的行和列,第一行的value为一共有多少个棋子(即有多少个有意义的值)。第二行往后为对应值的存储的行和列在哪个地方。

所以我们可以利用这种思想,将原始矩阵压缩,在通过IO流存储到本地文件,需要使用时,再将矩阵恢复为原始矩阵即可:

JAVA代码实现稀疏矩阵

class ReducedDimensionMatrix {
    public static void main(String[] args) {
		//原始矩阵--------------------
        int aa[][] = new int[11][11];
        aa[2][2] = 1;
        aa[2][3] =2;
        int sum =0;  //用来记录有多少不为0的数据
        System.out.println("原始矩阵为:");
		for(int[] i : aa) {
			for(int j : i) {
				if(j!=0){
					sum++;
				}
                System.out.print(j+" ");
            }
            System.out.println();
        }
		//稀疏矩阵--------------------------
        int bb[][] = new int[sum+1][3];
        bb[0][0] = 11;	//记录总行数
        bb[0][1] = 11;	//记录总列数
        bb[0][2] = sum;
		int n=1;
        for(int i =0 ; i<aa.length; i++) {
			for(int j=0;j<aa[i].length;j++){
				if(aa[i][j]!=0){
					bb[n][0]=i;
					bb[n][1] = j;
					bb[n][2] = aa[i][j];	
					n++;
				}
			}
        }
		System.out.println("得到的稀疏矩阵为:");
		for(int [] i : bb){
			for(int j : i){
				System.out.print(j+" ");
			}
			System.out.println();
		}
		//恢复稀疏矩阵-----------------------
		int cc[][] = new int[bb[0][0]][bb[0][1]];
		for(int i=1;i<bb.length;i++){
			for(int j=0;j<bb[i].length;j++){
				cc[bb[i][0]][bb[i][1]] = bb[i][2];
			}
		}
		System.out.println("恢复得的矩阵为:");
		for(int [] i : cc){
			for(int j : i){
				System.out.print(j+" ");
			}
			System.out.println();
		}

    }
}
Java实现行列式求值的高斯消元法 行列式,作为线性代数中的核心概念,是反映线性方程组、矩阵理论性质和解决线性问题的重要数学工具。它不仅仅是一个数值表达式,更是一个包含多重信息的集合。在几何中,行列式可以表示向量构成的平行多面体的体积。在代数中,行列式与矩阵的逆、秩等特性紧密相连,对于求解线性方程组、计算矩阵特征值等问题至关重要。理解行列式的定义及其背后的数学原理,对于IT行业中的算法工程师、数据分析专家以及科研工作者来说,不仅是理论基础的掌握,更是实践能力的提升。高斯消元法是一种在数值线性代数中用于求解线性方程组的算法。 阅读详情

相关推荐

Java编程数组中最大子矩阵简便解法实现代码

主要介绍了Java编程数组中最大子矩阵简便解法实现代码,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

最java大子矩阵和问题_最大子矩阵问题实例解析

问题:求一个M*N的矩阵的最大子矩阵和。比如在如下这个矩阵中:0 -2 -7 09 2 -6 2-4 1 -4 1-1 8 0 -2拥有最大和的子矩阵为:9 2-4 1-1 8其和为15。思路:首先,这个子矩阵可以是任意大小的,而且起始点也可以在任何地方,所以,要把最大子矩阵找出来,我们要考虑多种情况。假定原始矩阵的行数为M,那么对于子矩阵,它的行数可以是1到M的任何一个数,而且,对于一个K行(K...

weixin_34938347的博客 872

最大子矩阵问题实例解析

主要介绍了最大子矩阵问题实例解析,分别列举了Java和C语言的相关实现,需要的朋友可以参考下

笔试面试算法经典--动态规划-最大子矩阵和(Java)

【题目】 给定一个矩阵 matrix,其中矩阵中的元素可以包含正数、负数、和0,返回子矩阵的最大累加和。例如,矩阵 matrix 为: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 拥有最大和的子矩阵为: 9 2 -4 1 -1 8 其和为15。

有图有真相 8088

python——体育收入排行2012-2019

请分析文件并读取数据,完成以下功能: 1. 某年的收入排名前若干名选手 如果输入n是2012-19之间的年份,则可以输入整数k,输出n年的前k名排名信息。如果k大于当年排名运动员人数,则输出当年所有的信息。每行一名运动员信息,以' | '间隔该行各项信息。 2. 某年属于某个运动项目的所有运动员信息,和收入总和 如果输入的是'sport'(不区分大小写),则可以继续输入一个年份201*,输出一个当年排行中的运动项目菜单,按照字符串升序排列,格式见示例,再输入运动项目对应的数字来输出该项运动当

m0_62488776的博客 2257

光储微电网混合储能系统的控制策略

随着社会生产力的不断提高,对不可再生资源的大量消耗,人们已经意识到发展可再生能源的重要性,因此微电网技术作为再生能源利用的有效形式被快速发展。蓄电池容量无限大是传统光储微电网混合储能系统控制策略一种理想形式,但实际上蓄电池的容量是有限度的,传统控制策略在蓄电池剩余电量达到阖值时将无法正常使用,由此提出了光储微电网混合储能系统的新型控制策略,又结合实际情况,对开关进行了改进,利用开关与二极管并联,使其拥有四种工作状态,当储能元件剩余电量达到阈值时,可自动恢复电量降低成本,提高并输出电池电能质量。

nhkg888的博客 1739

Java动态规划算法:最大子阵

历届试题 最大子阵 问题描述 给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵中的元素和最大。 其中,A的子矩阵指在A中行和列均连续的一块。 输入格式 输入的第一行包含两个整数n, m,分别表示矩阵A的行数和列数。 接下来n行,每行m个整数,表示矩阵A。 输出格式 输出一行,包含一个整数,表示A中最大的子矩阵中的元素和。 样例输入: 3 3 -1 -4 3 3 4 -1 -5 -2 8 样例输出:10 样例说明 取最后一列,和为10。 数据规模和约定 对于50%的数据,1<=n, m&lt

qq_43610675的博客 550

在VScode中配置Python开发环境(详细图片文字结合)

需要用到的软件下载包在官网里找一下,在window下的点击安装就行了;找一个3.8到3.10版本差不多都完善跟的上;

m0_72811193的博客 1599

最大子矩阵和java_Java编程数组中最大子矩阵简便解法实现代码

本文研究的主要是Java编程数组中最大子矩阵的相关内容,具体介绍如下。遇到一个好人,可以改变一生;遇到一本好书,又何尝不是呢?最近在翻阅 左程云先生的《程序员代码面试指南–IT名企算法与数据结构题目最优解》时就非常的有感悟。建议有这方面爱好的博友,也去观摩观摩。书中讲解的基于栈的数组的最大矩阵的算法很经典,但是博主能力有限,没能彻底的领悟该算法的精髓,但是根据这个思想,博主想出了一种简易的应对该类...

weixin_39805255的博客 513

C#实现自己的远程桌面控制工具

1. 创建一个winform工程并添加RDP客户端COM组件。右击工具箱,然后点击选择项,选中下图所示组件并点击确定。为窗口加载时添加自动连接远程桌面代码。3.调试运行程序,验证远程桌面控制。拖放RDP控件到窗口中。2.编写远程桌面连接代码。

6089

机器学习算法原理:详细介绍各种机器学习算法的原理、优缺点和适用场景

现在,我们将进入到机器学习的核心部分——算法原理。在本篇文章中,我们将详细探讨各种机器学习算法的原理、优缺点和适用场景。

a871923942的博客 2965

协同过滤算法的电影推荐系统 21109(java毕业设计项目源码)

本系统(程序+源码+数据库+调试部署+讲解)同时还支持java、ThinkPHP、Node.js、Spring Boot、SSM、Springcloud 带文档1万字以上 有源码 程序 和表结构sql文档,开发工具:IntelliJ IDEA,VScode;数据库管理软件:Navicat;开发技术框架:MyBatis,Spring Boot,Vue;

bishe288的博客 1247

矢量网络分析仪校准:原理、方法与系统适配性

矢量网络分析仪(VNA)校准是射频测量的关键环节,通过误差建模(12项误差项)和标准件测量,可将系统不确定度从±5dB降至±0.1dB以下。主流校准方法包括SOLT(适用于同轴系统)和TRL(适用于波导系统),二者在标准件、误差重点及频率上限等方面存在显著差异。随着6G与量子通信的发展,动态实时校准将成为新趋势。工程师需根据传输结构、频率范围及精度需求选择合适方法,确保测量精度。

u014344410的博客 262

协同过滤算法新疆肉牛智慧养殖平台

前端开发框架:vue.js 数据库 mysql 版本不限 后端语言框架支持: 1 java(SSM/springboot)-idea/eclipse 2.Nodejs+Vue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx

abo2022的博客 742

保姆级教程!Python爬虫爬取知乎回答,保存为Markdown文件

本教程实现了知乎公开回答的完整爬取与Markdown保存,核心流程为「请求页面→解析作者/时间/正文/图片→下载图片→保存MD文件」,步骤清晰,代码可直接复用关键特性:支持合并/单文件两种保存模式、自动下载图片并引用、中文乱码防护、非法文件名过滤,满足日常整理知乎回答的需求新手友好:无需复杂配置,仅需修改知乎问题URL即可运行,全程无坑,5分钟内可看到运行结果灵活扩展:支持进阶优化(登录、分页、格式完善),可根据个人需求调整功能。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1232

ATS Request中的PASID的作用是什么

摘要: PASID(进程地址空间标识符)是PCIe ATS(地址转换服务)中的关键组件,用于标识不同进程或虚拟机的地址空间。其主要作用包括:1)支持多进程共享设备时隔离地址空间;2)实现共享虚拟地址(SVA),允许用户态程序直接访问设备;3)提升虚拟化性能(如SIOV),通过PASID区分虚拟机请求;4)增强安全性,基于PASID限制设备内存访问权限。PASID通过20位标识符在TLP前缀中传递,与IOMMU协作完成地址转换与缓存,适用于高性能计算、AI及虚拟化场景,但依赖硬件支持和软件适配。

元直的博客 1562

书刊教材网上商城销售系统设计与实现_n92j5d1b

本系统立足于先进的技术架构,以Java作为开发语言,构建了一个高效且稳定的毕业设计系统。在后台管理系统的构建上,我们巧妙地运用了Spring Boot这一强大的框架,它以其简洁、高效的特点,极大地提升了系统的开发效率和运行性能。同时,为了存储和处理大量的数据,我们选择了MySQL数据库系统,其稳定的数据存储能力和高效的数据检索速度,为系统的顺畅运行提供了坚实的基础。作为计算机科学专业的学生,我们深知这些技术的重要性。

qq2295116502的博客 801

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

springboot基于web的家居家庭装饰装修家具商城购物电商平台的设计与实现

本系统立足于先进的技术架构,以Java作为开发语言,构建了一个高效且稳定的毕业设计系统。在后台管理系统的构建上,我们巧妙地运用了Spring Boot这一强大的框架,它以其简洁、高效的特点,极大地提升了系统的开发效率和运行性能。同时,为了存储和处理大量的数据,我们选择了MySQL数据库系统,其稳定的数据存储能力和高效的数据检索速度,为系统的顺畅运行提供了坚实的基础。作为计算机科学专业的学生,我们深知这些技术的重要性。

我的个人的博客 1700

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java协同过滤算法的外卖商城互助平台vue

协同过滤算法是一种基于用户行为数据的推荐技术,通过分析用户历史行为(如订单、评分)发现相似用户或商品,生成个性化推荐。在外卖商城场景中,该算法可挖掘用户偏好,提升推荐精准度。本次毕业设计主要围绕老师要求的设计与实现展开,通过综合运用现代信息技术,旨在解决传统管理系统中存在的流程冗杂、信息孤岛化、评审透明度不足等问题。在系统的设计与实现过程中,我们采用了SpringBoot框架和MySQL数据库等先进技术,实现了系统的前后端分离、模块化设计以及高效的数据处理与存储功能。

QQ_402205496的博客 995

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

vue基于springboot的校园点歌系统的设计与实现

探索如何设计一个用户友好、响应迅速的系统界面,确保系统后端逻辑的高效和稳定性。研究如何通过Spring Boot实现系统的快速开发和部署,利用Vue构建动态的前端页面,以及如何通过MySQL进行高效的数据管理和查询。系统决定采用Vue.js作为前端框架,因其易用、灵活且支持组件化开发,适合快速开发动态交互的Web应用。Vue.js的生态系统丰富,社区支持强大,可以有效地加速开发进程和提高前端开发效率。经过评估,Vue.js完全满足系统对前端技术的需求。前端开发框架:vue.js。

鹏飞的博客 399

springboot高校读书分享系统的设计与实现_34ur7fyk-

采用 SpringBoot 框架进行后端设计和开发,以确保平台的稳定性和可扩展性。前端基于Vue.js+Element UI构建组件化界面,降低跨平台适配开发成本。使用 Idea 开发工具和 MVC 模式,实现前后端分离,提高开发效率和代码可维护性。使用 MySQL 数据库对数据进行存储和管理,保障数据的安全性和可靠性。使用测试工具通过对平台进行功能测试、性能测试和用户体验测试,发现并修复系统中的缺陷,优化系统性能。

abo2022的博客 562

vue+SpringBoot的在线宠物医疗预约平台的设计与实现_b5z03zls

探索如何设计一个用户友好、响应迅速的系统界面,确保系统后端逻辑的高效和稳定性。研究如何通过Spring Boot实现系统的快速开发和部署,利用Vue构建动态的前端页面,以及如何通过MySQL进行高效的数据管理和查询。系统决定采用Vue.js作为前端框架,因其易用、灵活且支持组件化开发,适合快速开发动态交互的Web应用。Vue.js的生态系统丰富,社区支持强大,可以有效地加速开发进程和提高前端开发效率。经过评估,Vue.js完全满足系统对前端技术的需求。前端开发框架:vue.js。

bishe288的博客 762

vue基于Spring Boot框架的网上家庭烹饪学习系统的设计与实现_j980oaou

探索如何设计一个用户友好、响应迅速的系统界面,确保系统后端逻辑的高效和稳定性。研究如何通过Spring Boot实现系统的快速开发和部署,利用Vue构建动态的前端页面,以及如何通过MySQL进行高效的数据管理和查询。系统决定采用Vue.js作为前端框架,因其易用、灵活且支持组件化开发,适合快速开发动态交互的Web应用。Vue.js的生态系统丰富,社区支持强大,可以有效地加速开发进程和提高前端开发效率。经过评估,Vue.js完全满足系统对前端技术的需求。前端开发框架:vue.js。

bishe288的博客 240

基于Spring Boot的选课系统的设计与实现_55rwm51r-java毕业设计

采用 SpringBoot 框架进行后端设计和开发,以确保平台的稳定性和可扩展性。前端基于Vue.js+Element UI构建组件化界面,降低跨平台适配开发成本。使用 Idea 开发工具和 MVC 模式,实现前后端分离,提高开发效率和代码可维护性。使用 MySQL 数据库对数据进行存储和管理,保障数据的安全性和可靠性。使用测试工具通过对平台进行功能测试、性能测试和用户体验测试,发现并修复系统中的缺陷,优化系统性能。

ztopmind的博客 684

基于springboot和vue的超市商店商场会员系统_0z5gsuh8(java毕业设计项目源码)

采用 SpringBoot 框架进行后端设计和开发,以确保平台的稳定性和可扩展性。前端基于Vue.js+Element UI构建组件化界面,降低跨平台适配开发成本。使用 Idea 开发工具和 MVC 模式,实现前后端分离,提高开发效率和代码可维护性。使用 MySQL 数据库对数据进行存储和管理,保障数据的安全性和可靠性。使用测试工具通过对平台进行功能测试、性能测试和用户体验测试,发现并修复系统中的缺陷,优化系统性能。

QQ_188083800的博客 939

vue基于Spring Boot框架的静雅园养老院老年人健康服务系统的设计与实现_bg5bcmsn

探索如何设计一个用户友好、响应迅速的系统界面,确保系统后端逻辑的高效和稳定性。研究如何通过Spring Boot实现系统的快速开发和部署,利用Vue构建动态的前端页面,以及如何通过MySQL进行高效的数据管理和查询。系统决定采用Vue.js作为前端框架,因其易用、灵活且支持组件化开发,适合快速开发动态交互的Web应用。Vue.js的生态系统丰富,社区支持强大,可以有效地加速开发进程和提高前端开发效率。经过评估,Vue.js完全满足系统对前端技术的需求。前端开发框架:vue.js。

bishe288的博客 334
上一篇: C++实现快速排序
下一篇: JAVA实现简单的顺序队列
AlonScholar
博客等级 码龄7年 25粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值