从头开始的Java学习Day07——稀疏矩阵
程序员文章站
2022-03-25 13:01:46
矩阵的压缩存储什么是压缩存储?在高阶矩阵中,若多个数据元素的值都相同,则为多个值相同的元素只分配一个存储空间,对零元素不分配存储空间。所有二维数组(矩阵)都能压缩吗?未必,要看矩阵是否具备以上压缩条件。什么样的矩阵具备以上压缩条件?一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。什么叫稀疏矩阵?矩阵中非零元素的个数较少(一般小于5%)稀疏矩阵实现方法:将每个非零元素用一个三元组(i,j,aij)来表示,则每个稀疏矩阵可用一个三元组表来表示。public class...
矩阵的压缩存储
- 什么是压缩存储?
在高阶矩阵中,若多个数据元素的值都相同,则为多个值相同的元素只分配一个存储空间,对零元素不分配存储空间。- 所有二维数组(矩阵)都能压缩吗?
未必,要看矩阵是否具备以上压缩条件。- 什么样的矩阵具备以上压缩条件?
一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。- 什么叫稀疏矩阵?
矩阵中非零元素的个数较少(一般小于5%)
稀疏矩阵实现方法:
将每个非零元素用一个三元组(i,j,aij)来表示,则每个稀疏矩阵可用一个三元组表来表示。
public class SparseMatrix {
public static void main(String[] args) {
/*
创建一个15*15的二维数组
*/
int[][] a = new int[15][15];
a[0][1] = 1;
a[1][1] = 2;
a[1][4] = 2;
/*
* 记录有效数字个数
* */
int sum = 0;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j] != 0) {
sum++;
}
}
}
/*创建稀疏数组*/
int[][] Matrix = new int[sum + 1][3];
Matrix[0][0] = 15;
Matrix[0][1] = 15;
Matrix[0][2] = sum;
/*
在稀疏矩阵中进行存储
*/
int index=1;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j] != 0) {
Matrix [index][0]=i;
Matrix [index][1]=j;
Matrix [index][2]=a[i][j];
index++;
}
}
}
/*遍历稀疏矩阵并输出*/
System.out.println("输出稀疏矩阵");
for (int i = 0; i < Matrix.length; i++) {
for (int j = 0; j < Matrix[i].length; j++) {
System.out.print(Matrix[i][j]+"\t");
}
System.out.println();
}
/*将稀疏数组转二维数组*/
int [] [] b = new int[Matrix[0][0]][Matrix[0][1]];
for (int i = 1; i < Matrix.length; i++) {
b[Matrix[i][0]][Matrix[i][1]]=Matrix[i][2];
}
/*
遍历输出转化后的二维数组
*/
System.out.println("输出转化后的二维矩阵");
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < b[i].length; j++) {
System.out.print(b[i][j]+"\t");
}
System.out.println();
}
}
}
输出结果:
输出稀疏矩阵
15 15 3
0 1 1
1 1 2
1 4 2
输出转化后的二维矩阵
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 2 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 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Process finished with exit code 0
本文地址:https://blog.csdn.net/XiaoFanMi/article/details/109865461
下一篇: 晚上我动静老大了