关于java的稀疏数组

关于java的稀疏数组

我们在前面的文章中了解了冒泡排序和优化冒泡排序,在本篇文章中我们来介绍一下稀疏数组,我们学会了可以自己动手试一试😀

稀疏数组

在介绍稀疏数组之前,我们先来了解一下五子棋。

在这里插入图片描述

我们这里有一个11 x 11的棋盘,棋盘上有两个棋子,一黑一白,所以我们可以用我们之前学过的二维数组来表示。

0  0  0  0  0  0  0  0  0  0  0
0  0  1  0  0  0  0  0  0  0  0
0  0  0  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

黑色棋子代表1,白色棋子代表2,但是我们会发现,二维数组很多的默认值都是0,所以记录了很多没有意义的数据。

所以,可以通过压缩数组的方法,来解决次问题,这个就叫做稀疏数组

稀疏数组的介绍

1、当一个数组中大部分的元素都是0,或者都为同一个数值,可以用稀疏数组来保存该数组。

2、稀疏数组的处理方法:

  • 记录数组一共有几行,有几列,有多少个不同的值
  • 把具有相同值的元素和行列以及值,记录在一个小规模的数组中,从而缩小了程序的规模。

3、举例说明:

  • 原始数组
0   0   0   22  0   0   15
0   11  0   0   0   17   0
  • 稀疏数组
||[0]  2  |   7 |   4 
--------|-----|-------    //意思就是,两行,七列,4个不相同的值。
[1]  0  |   3 |  22
[2]  0  |   6 |  15
[3]  1  |   1 |  11
[4]  1  |   5 |  17

4、我们用代码来写一下棋盘😎

  • **创建一个二维数组 **
  • 棋盘格式为11*11 没有棋子代表0 ,黑色为1,白色为2。
public class Demo
{public static void main(String[] args){int[][] array1 = new int[11][11];}
}
  • 给数组赋值
public class Demo
{public static void main(String[] args){int[][] array1 = new int[11][11];array1[1][2]=1;array1[2][3]=2;}
}
  • 遍历输出棋盘
public class ArraysDemo08 {public static void main(String[] args) {//创建一个二维数组  11*11  没有棋子代表0 黑色为1,白色为2int[][] array1=new int[11][11];array1[1][2]=1;array1[2][3]=2;//输出原始数组System.out.println("输出原始数组");for(int[] ints:array1){for (int anInt:ints){System.out.print(anInt+"\t");}System.out.println();}       }
}

我们执行以下代码,看一下结果。

输出原始数组
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	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进程结束.......
  • 转换为稀疏数组
  • 获取有效值个数
public class ArraysDemo08 {public static void main(String[] args) {//创建一个二维数组  11*11  没有棋子代表0 黑色为1,白色为2int[][] array1=new int[11][11];array1[1][2]=1;array1[2][3]=2;//输出原始数组System.out.println("输出原始数组");for(int[] ints:array1){for (int anInt:ints){System.out.print(anInt+"\t");}System.out.println();}//转化为稀疏数组保存//获取有效值的个数int sum = 0;for (int i = 0; i < 11; i++){for (int j = 0; j < 11; j++){if (array1[i][j]!=0){sum++;}}}System.out.println("有效值的个数:"+sum);}
}
  • 创建一个稀疏数组
 //稀疏数组
int[][] array2=new int[sum+1][3];array2[0][0]=11;//行array2[0][1]=11;//列array2[0][2]=sum;//有效值
  • 遍历二维数组(非0的值存在稀疏数组中)输出稀疏数组。
public class ArraysDemo08 {public static void main(String[] args) {//创建一个二维数组  11*11  没有棋子代表0 黑色为1,白色为2int[][] array1=new int[11][11];array1[1][2]=1;array1[2][3]=2;//输出原始数组System.out.println("输出原始数组");for(int[] ints:array1){for (int anInt:ints){System.out.print(anInt+"\t");}System.out.println();}//转化为稀疏数组保存//获取有效值的个数int sum = 0;for (int i = 0; i < 11; i++){for (int j = 0; j < 11; j++){if (array1[i][j]!=0){sum++;}}}System.out.println("有效值的个数:"+sum);//稀疏数组int[][] array2=new int[sum+1][3];array2[0][0]=11;//行array2[0][1]=11;//列array2[0][2]=sum;//有效值int count=0;for (int i = 0; i < array1.length; i++){for (int j = 0; j < array1[i].length; j++){if (array1[i][j]!=0){count++;array2[count][0] =i;array2[count][1] =j;array2[count][2] =array1[i][j];}}}//输出稀疏数组System.out.println("稀疏数组");for (int i = 0; i < array2.length; i++){System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+array2[i][2]+"\t");}}
}

我们执行一下,就可以发现变成了我们上面介绍的样子。

输出原始数组
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	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	有效值的个数:2稀疏数组
11	11	2	
1	2	1	
2	3	2	

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

色标在matplotlib和plottable中

是这样的&#xff0c;我有一个数组[-4.4, -2.8, -2.6, -2.2, -1.1, 1.1, 1.2, 1.3, 3.6, 6.0, 6.4, 12.3]&#xff0c;它需要绘制散点图&#xff0c;点的颜色来代表数值大小&#xff1b;同时&#xff0c;也需要在plottable上作为一列显示&#xff0c;同样用颜色来代表数值的大小…

2024年3月10日PMI认证考试的报名时间确定!

⏰中国大陆地区2024年第1期PMI认证考试于3月10日举办 ⏰报名时间&#xff1a; 为减少同一时间集中报名造成的网络拥堵&#xff0c;本次报名将采取以下形式分地区、分批次开放报名。&#x1f447; 1️⃣第1批报名城市&#xff1a;⏰2024年1月11日10:00至1月18日16:00&#xff0c…

AlexNet(fashion-mnist)

前言 AlexNet相较于LeNet-5具有更深的网络结构&#xff0c;采用relu激活函数。 AlexNet 参数更多&#xff0c;计算量更大&#xff0c;计算速度更慢&#xff0c;精度更高。 netnn.Sequential(nn.Conv2d(1,96,kernel_size11,stride4,padding1),nn.ReLU(),nn.MaxPool2d(kernel…

「超级细菌」魔咒或将打破,MIT 利用深度学习发现新型抗生素

作者&#xff1a;加零 编辑&#xff1a;李宝珠、三羊 MIT 利用图神经网络 Chemprop 识别潜在抗生素&#xff0c;特异性杀死鲍曼不动杆菌。 自然界中充满了各种各样的微生物&#xff0c;例如结核杆菌&#xff08;导致肺结核&#xff09;、霍乱弧菌&#xff08;导致霍乱&#…

SENet实现遥感影像场景分类

今天我们分享SENet实现遥感影像场景分类。 数据集 本次实验我们使用的是NWPU-RESISC45 Dataset。NWPU Dataset 是一个遥感影像数据集&#xff0c;其中 NWPU-RESISC45 Dataset 是由西北工业大学创建的遥感图像场景分类可用基准&#xff0c;该数据集包含像素大小为 256*256 共计 …

软件测试|Python urllib3库使用指南

简介 当涉及到进行网络请求和处理HTTP相关任务时&#xff0c;Python的urllib3库是一个强大且灵活的选择。它提供了一种简单的方式来执行HTTP请求、处理响应和处理连接池&#xff0c;使得与Web服务进行交互变得更加容易。本文将详细介绍如何使用urllib3库进行网络请求。 安装u…

11 个 Python全栈开发工具集

前言 以下是专注于全栈开发不同方面的 Python 库;有些专注于 Web 应用程序开发&#xff0c;有些专注于后端&#xff0c;而另一些则两者兼而有之。 1. Taipy Taipy 是一个开源的 Python 库&#xff0c;用于构建生产就绪的应用程序前端和后端。 它旨在加快应用程序开发&#xf…

电子学会C/C++编程等级考试2023年12月(一级)真题解析

C/C++编程(1~8级)全部真题・点这里 第1题:数的输入和输出 输入一个整数和双精度浮点数,先将浮点数保留2位小数输出,然后输出整数。 时间限制:1000 内存限制:65536 输入 一行两个数,分别为整数N(不超过整型范围),双精度浮点数F,以一个空格分开。 输出 一行两个数,分…

MyBatisPlus学习笔记一

1、简介 MyBatisPlus&#xff08;简称MP&#xff09;是一个MyBatis的增强工具&#xff0c;在MyBatisMyBatisMyBatis的的基础上只做增强不做改变&#xff0c;为简化开发&#xff0c;提高效率而生。 官网&#xff1a;MyBatis-Plus mybatisplus通过扫描实体类&#xff0c;并基于…

85.乐理基础-记号篇-力度记号

内容来源于&#xff1a;三分钟音乐社 上一个内容&#xff1a;78.乐理基础-非常见拍号如何打拍子-CSDN博客 85-78之间的内容观看索引&#xff1a; 腾讯课堂-三分钟音乐社-打拍子&#xff08;20&#xff09;-总结、重点、练习与检验方法开始看 力度记号&#xff1a;p、f、mp、…

NLP|LSTM+Attention文本分类

目录 一、Attention原理简介 二、LSTMAttention文本分类实战 1、数据读取及预处理 2、文本序列编码 3、LSTM文本分类 三、划重点 少走10年弯路 LSTM是一种特殊的循环神经网络&#xff08;RNN&#xff09;&#xff0c;用于处理序列数据和时间序列数据的建模和预测。而在N…

Poi实现根据word模板导出-图表篇

往期系列传送门&#xff1a; Poi实现根据word模板导出-文本段落篇 &#xff08;需要完整代码的直接看最后位置&#xff01;&#xff01;&#xff01;&#xff09; 前言&#xff1a; 补充Word中图表的知识&#xff1a; 每个图表在word中都有一个内置的Excel&#xff0c;用于…