JAVA算法数据结构第一节稀疏矩阵

一、稀疏矩阵介绍:

稀疏矩阵是一种特殊类型的矩阵,其中大部分元素都是零。在处理这类矩阵时,如果仍然使用标准的矩阵存储方式(即传统的二维数组),则会浪费大量的存储空间来保存零值。为了提高存储效率以及在某些情况下提高计算效率,人们发明了稀疏矩阵的概念及其相应的存储方法。

稀疏矩阵的特点

  • 高零值比例:矩阵中的零元素远多于非零元素。
  • 节省空间:只存储非零元素,减少不必要的内存占用。
  • 优化运算:在进行矩阵运算时,可以跳过与零相关的计算,从而加快计算速度。

二、稀疏矩阵代码实现:

1)原始二维代码: 

  //创建一个原始的二维数组9*9//0:表示没有棋子,1:表示黑子,2:表示白子int[][] ints = new int[9][9];ints[1][2]=1;ints[2][4]=2;//输出原始二维数组for (int[] row:ints){for (int data:row){System.out.print(data+"\t");}System.out.println();}

输出结果:

 

创建如图9*9的二维矩阵。

2)、将二维矩阵转化成稀疏矩阵:

  //创建对应稀疏矩阵int[][] xishu = new int[sum + 1][3];//给稀疏矩阵赋值xishu[0][0]=9;xishu[0][1]=9;xishu[0][2]=sum;//遍历二维数组,将非零值存放到xishu中int count=0;//用于记录是第几个非零数据for (int i=0;i<9;i++){for (int j=0;j<9;j++){if (ints[i][j]!=0){count++;xishu[count][0]=i;xishu[count][1]=j;xishu[count][2]=ints[i][j];}}}//输出稀疏数组的形式System.out.println("----------稀疏数组为---------");for (int i=0;i < xishu.length;i++){System.out.println(xishu[i][0]+"  "+xishu[i][1]+"  "+xishu[i][2]);}

输出结果:

 

3)、将稀疏矩阵转化为 二维矩阵:

   //读取稀疏数组第一行,根据第一行创建原始的二维数组int[][] huifus = new int[xishu[0][0]][xishu[0][1]];//读取稀疏数组后几行的数据并赋给原始二维数组即可//这里是要遍历稀疏矩阵的值而不是恢复矩阵for (int k=1;k< xishu.length;k++){huifus[xishu[k][0]][xishu[k][1]]=xishu[k][2];}System.out.println("---------恢复的二维矩阵-------");for (int[] row:huifus){for (int data:row){System.out.print(data+"\t");}System.out.println();}

输出结果:

 

三、完整代码:

//TIP 要<b>运行</b>代码,请按 <shortcut actionId="Run"/> 或
// 点击装订区域中的 <icon src="AllIcons.Actions.Execute"/> 图标。
public class Main {public static void main(String[] args) {//创建一个原始的二维数组9*9//0:表示没有棋子,1:表示黑子,2:表示白子int[][] ints = new int[9][9];ints[1][2]=1;ints[2][4]=2;//输出原始二维数组for (int[] row:ints){for (int data:row){System.out.print(data+"\t");}System.out.println();}
//将二维数组 转 稀疏数组的思想//1.先遍历二维数组 得到非零数据的个数int sum=0;for (int i=0;i<9;i++){for (int j=0;j<9;j++){if (ints[i][j]!=0){sum++;}}}//创建对应稀疏矩阵int[][] xishu = new int[sum + 1][3];//给稀疏矩阵赋值xishu[0][0]=9;xishu[0][1]=9;xishu[0][2]=sum;//遍历二维数组,将非零值存放到xishu中int count=0;//用于记录是第几个非零数据for (int i=0;i<9;i++){for (int j=0;j<9;j++){if (ints[i][j]!=0){count++;xishu[count][0]=i;xishu[count][1]=j;xishu[count][2]=ints[i][j];}}}//输出稀疏数组的形式System.out.println("----------稀疏数组为---------");for (int i=0;i < xishu.length;i++){System.out.println(xishu[i][0]+"  "+xishu[i][1]+"  "+xishu[i][2]);}//读取稀疏数组第一行,根据第一行创建原始的二维数组int[][] huifus = new int[xishu[0][0]][xishu[0][1]];//读取稀疏数组后几行的数据并赋给原始二维数组即可//这里是要遍历稀疏矩阵的值而不是恢复矩阵for (int k=1;k< xishu.length;k++){huifus[xishu[k][0]][xishu[k][1]]=xishu[k][2];}System.out.println("---------恢复的二维矩阵-------");for (int[] row:huifus){for (int data:row){System.out.print(data+"\t");}System.out.println();}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

iptables部署使用

1、Iptables-server安装确认 [rootlocalhost ~]$ rpm -qa|grep iptables #查看安装iptables iptables-1.4.21-18.0.1.el7.centos.x86_64 [rootlocalhost ~]$ rpm -ql iptables #查看iptables相关文件 2、安装iptables-services [rootlocalhost ~]$ yum list all|grep iptab…

Ubuntu24.04 安装opencv4.10

Ubuntu24.04 安装opencv4.10 一、下载OpenCV二、更新系统&#xff0c;安装必要的包1、“E: unable to locate libjasper-dev"的解决方法2、没有公钥&#xff0c;无法验证下列签名 :NO_PUBKEY 的解决方法 三、配置&#xff0c;使用cmake工具1、新建build目录2、在build中&a…

【梯度下降|链式法则】卷积神经网络中的参数是如何传输和更新的?

【梯度下降|链式法则】卷积神经网络中的参数是如何传输和更新的&#xff1f; 【梯度下降|链式法则】卷积神经网络中的参数是如何传输和更新的&#xff1f; 文章目录 【梯度下降|链式法则】卷积神经网络中的参数是如何传输和更新的&#xff1f;1. 什么是梯度&#xff1f;2.梯度…

2024 VMpro 虚拟机中如何给Ubuntu Linux操作系统配置联网

现在这是一个联网的状态 可以在商店里面下载东西 也能ping成功 打开虚拟网络编辑器 放管理员权限 进行设置的更改 选择DNS设置 按提示修改即可 注意的是首选的DNS服务器必须是114.114.114.114 原因 这边刚刚去查了一下 114.114.114.114 是国内的IP地址 8.8.8.8 是国外的I…

MySQL record 05 part

外键 注意&#xff0c;外键所在的表一般被称为从表&#xff0c;被引用的表被称为主表。 直接删除主表会报错&#xff0c;因为主表被从表&#xff08;有外键的那个表&#xff09;所引用,所以&#xff0c;删除主表&#xff08;被引用数据的表&#xff09;之前&#xff0c;要先删除…

【宠物小精灵之收服(待更新)】

题目 代码 #include <bits/stdc.h> using namespace std; int f[1010][510]; int main() {int n, m, k;cin >> n >> m >> k;int c 0;for(int i 1; i < k; i){int cost, hp;cin >> cost >> hp;for(int j n; j > cost; j--){for(i…

EndnoteX9安装及使用教程

EndnoteX9安装及使用教程 一、EndNote安装 1.1 下载 这里提供一个下载链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1RlGJksQ67YDIhz4tBmph6Q 提取码&#xff1a;5210 解压完成后&#xff0c;如下所示&#xff1a; 1.2 安装 双击右键进行安装 安装比较简单…

ChatGPT有三个快捷指令和三个模式,你知道吗?

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

Vue3 项目实战甄选硅谷

1.技术选型 2.搭建Vue3 项目使用pnpm 1.安装pnpm pnpm安装 npm i -g pnpm 2.项目初始化 pnpm create vite cd ./project pnpm i pnpm run dev 初始化完成 3.项目开始之前先对项目进行一些配置 1.想让刚启动项目浏览器自动打开 找到 2.eslint配置 1.安装eslint pnpm…

Java算法总结

文章目录 一、链表相关1.1 从尾到头打印单链表[要求 方式1&#xff1a;反向遍历。方式2&#xff1a;Stack栈]1.2 josephu问题&#xff08;使用带尾指针的循环链表&#xff09; 二、动态规划2.1 斐波那契数列 2022.4.182.2 青蛙上台阶 2022.4.18 三、位运算符3.1 二进制中1的个数…

【Python爬虫系列】_023.关于视频爬取

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈…

全方位解读信息架构:从挑战到解决方案,推动企业数字化转型的全面指南

在数字经济迅猛发展的今天&#xff0c;信息架构 已经成为企业实现数字化转型、提高运营效率和优化 IT 投资的关键手段。无论是初创企业还是成熟企业&#xff0c;构建和实施有效的信息架构不仅能支持业务增长&#xff0c;还能确保数据安全和合规性。《信息架构&#xff1a;商业智…

如何在kotlin中给空字符串(””)和null值设置默认值问题?

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。 &#x1f60a; 座右铭&#xff1a;不…

回归预测|基于鲸鱼优化随机森林数据的数据回归预测Matlab程序 多特征输入单输出WOA-RF

回归预测|基于鲸鱼优化随机森林数据的数据回归预测Matlab程序 多特征输入单输出WOA-RF 文章目录 一、基本原理鲸鱼优化算法&#xff08;WOA&#xff09;随机森林&#xff08;RF&#xff09;WOA-RF的结合总结 二、实验结果三、核心代码四、代码获取五、总结 一、基本原理 WOA-R…

数据结构——树(终极版)

树的基本概念&#xff1a; 树的顶部是根节点也是树的入口 父节点&#xff1a;例如&#xff1a;B是F的父节点 子节点&#xff1a;树中的每个节点都可以有0个或多个子节点 叶子节点&#xff1a;像KLFGMIJ这种没有子节点的节点 节点的度&#xff1a;节点的子节点数&#xff1…

Minio环境搭建(单机安装包、docker)(一)

前言&#xff1a; 项目中客户不愿意掏钱买oss&#xff0c;无奈只能给他免费大保健来一套。本篇文章只是记录验证可行性&#xff0c;毕竟minio太少文档了&#xff0c;参考着官网来。后面还会再出一套验证集群部署的文章。 一、资料 MinIO官网&#xff1a; MinIO | S3 Compatib…

使用Qt 搭建简单雷达

目录 1.简易雷达图思维导图 2.结果展示图 3.制作流程 3.1表盘的绘制 3.1.1 绘制底色 ​编辑 3.1.2 绘制大圆 3.3.3绘制小圆 3.3.4 绘制小圆的内容 3.3.5 绘制表盘刻度和数字标注 3.3.6 绘制指针 3.3.7 绘制扇形 3.2 设置定时器让表盘动起来 3.3.1 设置动态指针…

Fastjson反序列化漏洞——JNDI注入

一.前言 之前使用反序列化和序列化时写入的到文件里面的&#xff0c;真实环境中&#xff0c;也是这样吗&#xff1f; 当然不是了&#xff0c;通过二进制&#xff0c;字节流数据进行的。 为什么会有JNDI&#xff1f; 由于http和ftp传输消耗资源仍然很大&#xff0c;就有了JRM…

EasyRecovery 17完美破解版 2024 年最新永久免费使用 EasyRecovery激活图文教程

我们在平时使用电脑或者操作文件过程中&#xff0c;或多或少都有过格式化文件或者为了方便&#xff0c;直接摁住了shifitdelete键&#xff1b;删除后发现&#xff0c;我们删错了&#xff0c;有些文件不是我们要删的&#xff0c;甚至有的文件是特别重要的&#xff1b;这时候恢复…

基于java 的医院排号管理系统设计与实现

博主介绍&#xff1a;专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…